Добавление Пользовательской Таксономии к типу Сообщения значения по умолчанию 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
23.08.2014, 19:05
3 ответа

Попробуйте это

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

Могло бы иметь место, что при установке приоритета на 0 обратный вызов не становится названным.

1
19.02.2020, 22:48

Корректный способ зарегистрировать таксономию состоит в том, чтобы ожидать действия registered_post_type, потому что это - единственный способ знать, что Ваш тип сообщения на самом деле существует. Это действие запущено, когда тип сообщения был зарегистрирован.

Базовые типы сообщения регистрируются дважды по причинам. Необходимо ожидать второго вызова, потому что переписать объект не доступен ранее. Если Ваша таксономия должна иметь постоянные ссылки, Вы получаете ошибку при регистрации ее на первом вызове.

Затронутые встроенные типы сообщения:

  • 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
19.02.2020, 22:48
  • 1
    Привет, Это также, хорошо, но если пользовательский тип сообщения уже регистрируется, что мы можем сделать? Регистр –  dazunE 28.08.2014, 17:14
  • 2
    @dazunE обратный вызов достаточно рано. –  fuxia♦ 28.08.2014, 17:24

От register_taxonomy() страница кодекса:

Лучше будьте в безопасности, чем жаль при регистрации пользовательского taxonomies для пользовательских типов сообщения. Использовать register_taxonomy_for_object_type() прямо после функции для соединения их. Еще Вы могли столкнуться с minetraps, где тип сообщения не присоединяется в обратном вызове фильтра, которые работают во время 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' );

Дополнительно существует возможность использовать taxonomies аргумент при использовании register_post_type() зарегистрировать Вашу таксономию в Вашем пользовательском типе сообщения, но:

Даже при регистрации таксономии при создании типа сообщения необходимо все еще явно зарегистрировать и определить использование таксономии register_taxonomy().

Тем не менее, это может заменить выше предложенного register_taxonomy_for_object_type() звонить.

0
19.02.2020, 22:48

Теги

Похожие вопросы