カスタムの分類法(タグ)をWordPressのデフォルトの投稿タイプに追加しようとしています。カスタム分類タイプにもこの分類法を使用したいのです。
// Register Custom Taxonomy
function tag_synchro() {
$labels = array(
'name' => _x( 'QA Tags', 'Taxonomy General Name', ET_DOMAIN ),
'singular_name' => _x( 'QA Tag', 'Taxonomy Singular Name', ET_DOMAIN ),
'menu_name' => __( 'QA Tags', ET_DOMAIN ),
'all_items' => __( 'All Tags', ET_DOMAIN ),
'parent_item' => __( 'Parent Item', ET_DOMAIN ),
'parent_item_colon' => __( 'Parent Item:', ET_DOMAIN ),
'new_item_name' => __( 'New Tags Name', ET_DOMAIN ),
'add_new_item' => __( 'Add New tag', ET_DOMAIN ),
'edit_item' => __( 'Edit tag', ET_DOMAIN ),
'update_item' => __( 'Update tag', ET_DOMAIN ),
'separate_items_with_commas' => __( 'Separate tags with commas', ET_DOMAIN ),
'search_items' => __( 'Search Items', ET_DOMAIN ),
'add_or_remove_items' => __( 'Add or remove items', ET_DOMAIN ),
'choose_from_most_used' => __( 'Choose from the most used tagd', ET_DOMAIN ),
'not_found' => __( 'Not Found', ET_DOMAIN ),
);
$args = array(
'labels' => $labels,
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_admin_column' => true,
'show_in_nav_menus' => true,
'show_tagcloud' => true,
'update_count_callback' => '_update_post_term_count',
'query_var' => true,
'rewrite' => array( 'slug' => ae_get_option('tag_slug', 'qa-tag') ),
);
register_taxonomy( 'qa_tag', array( 'post' ), $args );
}
// Hook into the 'init' action
add_action( 'init', 'tag_synchro', 0 );
上記のコードを使用しましたが、うまくいきません。私はこの仕事を成し遂げることができる方法がありますか。前もって感謝します
これを試して
add_action( 'init', 'tag_synchro', 10 );
あなたが優先順位を0に設定するとき、あなたのコールバックが呼ばれないということは本当かもしれません。
分類法を登録する正しい方法は、アクションregistered_post_type
を待つことです。これが、自分の投稿タイプが実際に存在することをknowにする唯一の方法だからです。このアクションは投稿タイプが登録されたときに発生します。
コア投稿タイプはtwiceの理由で登録されています 。書き換えオブジェクトは以前は使用できないため、secondの呼び出しを待つ必要があります。あなたの分類法がパーマリンクを持つべきなら、あなたが最初の呼び出しでそれを登録するとき、あなたはエラーを得ます。
影響を受ける組み込みの投稿タイプは次のとおりです。
post
page
attachment
revision
nav_menu_item
あなたのコードは次のように書き直すべきです:
add_action( 'registered_post_type', function( $post_type ) {
static $first_call = TRUE;
if ( 'post' !== $post_type || $first_call ) {
$first_call = FALSE;
return;
}
register_taxonomy(
'test',
'post',
[
'labels' => [
'name' => 'Tests',
'singular_name' => 'Test'
]
]
);
$first_call = FALSE;
});
register_taxonomy()
codexページから:
カスタム投稿タイプのカスタム分類を登録する場合は、を申し訳ありませんより安全にしてください。相互接続するには、関数の直後に
register_taxonomy_for_object_type()
を使用します。そうでなければ、ポストタイプがparse_request
またはpre_get_posts
の間に実行されるフィルタコールバック内にアタッチされていないミニトラップに遭遇する可能性があります。
それで、あなたは実際にそれをしたいかもしれません、このように:
// for the buil-in post type post
register_taxonomy_for_object_type( 'qa_tag', 'post' );
// for your custom post type
register_taxonomy_for_object_type( 'qa_tag', 'your_cpt' );
さらに、 register_post_type()
を使用する場合は、 taxonomies
引数を使用することもできます。分類法をカスタム投稿タイプに登録します。ただし、
投稿タイプの作成中に分類を登録する場合でも、
register_taxonomy()
を使用して分類を明示的に登録および定義する必要があります。
それにもかかわらず、それは上で提案された register_taxonomy_for_object_type()
呼び出しを置き換えることができます。