web-dev-qa-db-ja.com

プラグインのアクティブ化に機能しないオブジェクト用語を設定する

私は、カスタム投稿をいくつか作成し、プラグインのアクティベーション時にそれにカスタム分類用語を設定しようとしています。登録プラグインアクティベーションフックを使用しています。投稿は正しく作成されていますが、投稿期間が設定されていません。 wp_set_object_termsを使っています。考えられる原因は何ですか?

私のコードはこれに似ています:

register_activation_hook( __FILE__, 'insert_latest_books' );

public function insert_latest_books() {
    //Get the latest books
    $data = new Data_Fetcher();
    $latest_books = $data->get_latest_books();

    foreach($latest_books as $latest_book) {
        //Create a book post for each latest book
        $book = [
            'post_type' => 'book',
            'post_status' => 'publish',
            'post_title' => $latest_book->name,
            'post_content' => $latest_book->description
        ];

        $book_id = wp_insert_post($book);

        //TODO: Not working on plugin activation
        wp_set_object_terms($book_id, array('latest'), 'label');
        set_book_thumbnail($book_id, $latest_book->name, $latest_book->preview_image_url);
        update_post_meta($book_id, 'book_code', $latest_book->embed_code);
        update_post_meta($book_id, 'book_pages', $latest_book->length);
    }
}
1

@Pieter Goosenと@ Ignat.Bのコメント、および@Pieter Goosenの回答 から、プラグインの有効化に関する分類法を登録して用語を挿入する必要があることがわかりました 。それから、codexが提案するように、分類登録コードをinitアクションフックにフックする必要があります。これにより、プラグインアクティベーションに関する用語を挿入したときに、分類法が既に登録され、initを使用してWordPressの指示に従ってinitを使用するようになります。

疑似コード:

function register_tax() {
    //Register the taxonomy
}


function activate() {
    register_tax();
    wp_insert_term(...);
}

register_activation_hook('...', 'activate');
add_action('init', 'register_tax');

これが誰かが同様の状況で立ち往生するのを助けることを願っています。説明が必要な場合、Pieterの回答は本当に役に立ちます。

1

register_activation_hookは1回限りのアクティベーションフックです。例として、データベース構造の作成に使用できます。プラグインのアクティブ化トリガーでのみ起動する必要があります。

カスタム分類を設定するには、一度だけではなく、WordPressのロードごとに起動するフックが必要です。 initのように。

それを達成するためにadd_action( 'init', 'YOUR_CALLBACK' );を使う

2
Ignat B.