web-dev-qa-db-ja.com

パーマリンク後の更新のフック

私は、投稿のパーマリンク/ URLが変更されたときにどのフックを使うべきか知りたいのです。私の目標は、古いパーマリンクと新しいパーマリンクを手に入れることで、私のプラグインにそれを使用できるようにすることです。ありがとう。

[編集]質問を明確にしたいだけです。たとえば、ユーザーが管理領域で投稿を1つ選択し、現在のパーマリンク/ url(/ helloworld)を新しいパーマリンク/ url(/ helloworld_new)に編集した場合など、シナリオで新旧のURLを取得したいと思います。選択した投稿投稿が編集中の完全なURLを取得したいのですが。

2
Pelang

wp_insert_post_dataを正確に使用する必要があります。これには、WordPressがすべての検証/サニタイズを行った後にデータベースに保存される投稿データの配列が含まれています。

add_filter('wp_insert_post_data', 'wpse_wp_insert_post_data', 10, 2);
function wpse_wp_insert_post_data($data, $post_attr)
{
    // you get the post_name using $data['post_name'];

    // post id will not be present for the first insert
    // but you can check $post_attr['ID'] to be sure if an ID has been passed.
    // note: $data won't contain post id ever, only the $post_attr will have it

    // if you want to compare the name, you could use -
    if( isset($post_attr['post_name']) 
        && !empty($post_attr['post_name']) 
        && $post_attr['post_name'] != $data['post_name'] )
    {
        // So here you can guess post name has been changed
        // note: $post_attr['post_name'] might come undefined or empty sometime.
        // and $data['post_name'] could also comes up empty, but it will be always defined
    }

    // you do not need to modify anything, so you should return it as it is
    return $data;
}

それが役に立てば幸い。

1
Shazzad

アクションはupdate_option_permalink_structureです。

次の例はこのフックで動作します。

add_action( 'update_option_permalink_structure' , 'my_custom_function', 10, 2 );
function my_custom_function( $old_value, $new_value ) {

    // test
    var_dump( $old_value );
}

この文脈でのフックは常にupdate_option_{$option} [またはupdate_option_{$option_name}(WordPress 3.6以降廃止予定)]です。

pre_update_option_{$option}とMultisiteバージョンのupdate_site_option_{$option}pre_update_site_option_{$option}のフックも関連しています。

0
bueltge