質問: wp_insert_post(array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => 1, 'post_name' => 'tile'.$x, 'post_title' => 'tile', 'post_status' => 'publish', 'post_type' => 'frontiles', )); wp_set_object_terms($post_id, array('mosaic-home'), 'tiles_categories', true); $x++; } while ($x <= 24); } 私はその24のカスタム投稿を自動的に作成しますが、その過程でそれらに用語を割り当てる方法はありません。以前は、この関数を使ってこの用語を作成しましたが、問題はありません。function example_insert_category() { wp_insert_term( 'mosaic - home', 'tiles_categories', array( 'description' => 'add tiles here to load in first term', 'slug' => 'mosaic-home' ) ); } add_action('init','example_insert_category'); 何が悪いの?
回答: 私はその問題と解決策を見つけました。 「is_wp_error」を使用して「wp_set_object_terms」をデバッグしたところ、「invalid taxonomy」というメッセージが表示され、投稿が作成されたときにはその用語は存在しないことがわかりました。そのため、programmatic_create_post()関数でフックを "init"に変更しました。この行の下のコードは動作しました: <?php // to do when theme is activated /////////////////////// if (isset($_get['activated']) && is_admin()){ // 3. add term "mosaic-home" to custom taxonomy "tiles_categories" function example_insert_category() { wp_insert_term( 'mosaic - home', 'tiles_categories', array( 'description' => 'add tiles here to load in first term', 'slug' => 'mosaic-home' ) ); } add_action('init','example_insert_category'); // 4. make loop for creating 24 posts function create_frontles_posts() { $x = 1; do { $post_id = wp_insert_post(array( 'comment_status' => 'closed', 'ping_status' => 'closed', 'post_author' => 1, 'post_name' => 'tile'.$x, 'post_title' => 'tile', 'post_status' => 'publish', 'post_type' => 'frontiles', // 'tax_input' => array('tiles_categories' => 2), )); wp_set_object_terms($post_id, 'mosaic-home', 'tiles_categories', true); $x++; } while ($x <= 24); } // 5. add the loop to the function for create posts function programmatically_create_post() { // initialize the page id to -1. this indicates no action has been taken. $post_id = -1; $title=''; // if the page doesn't already exist, then create it if( null == get_page_by_title( $title ) ) { create_frontles_posts(); } else { // otherwise, we'll stop $post_id = -2; } } add_filter( 'init', 'programmatically_create_post' ); } // end to do on activation ?>