web-dev-qa-db-ja.com

WordPressのデフォルトの投稿タイプにカスタム分類法を追加する

カスタムの分類法(タグ)を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 );

上記のコードを使用しましたが、うまくいきません。私はこの仕事を成し遂げることができる方法がありますか。前もって感謝します

1
dazunE

これを試して

add_action( 'init', 'tag_synchro', 10 );

あなたが優先順位を0に設定するとき、あなたのコールバックが呼ばれないということは本当かもしれません。

1
Rajeev Vyas

分類法を登録する正しい方法は、アクション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;
});
2
fuxia

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() 呼び出しを置き換えることができます。

0
Nicolai