将自定义分类添加到WordPress默认帖子类型

时间:2014-08-23 作者:dazunE

我正在尝试将自定义分类法(标记)添加到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 );
我使用了上面的代码,但它似乎不起作用。我有什么办法能完成这项工作吗。提前谢谢你

3 个回复
最合适的回答,由SO网友:Rajeev Vyas 整理而成

试试这个

add_action( \'init\', \'tag_synchro\', 10 );
可能的情况是,当您将优先级设置为0时,不会调用回调。

SO网友:fuxia

注册分类法的正确方法是等待操作registered_post_type, 因为只有这样know 您的帖子类型实际上存在。注册post类型时激发此操作。

已注册核心职位类型twice for reasons. 你必须等待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;
});

SO网友:Nicolai Grossherr

register_taxonomy() 法典页:

较好的be safe than sorry 为自定义帖子类型注册自定义分类时。使用register_taxonomy_for_object_type() 就在连接它们的功能之后。否则,您可能会遇到陷阱,其中在parse_requestpre_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\' );
此外,还可以使用taxonomies 使用时的参数register_post_type() 要使用自定义帖子类型注册分类,请执行以下操作:

即使在创建post类型时注册分类法,也必须使用register_taxonomy().

尽管如此,它可以取代上述建议register_taxonomy_for_object_type() 呼叫

结束