Добавление пользовательской таксономии в тип записи 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 );

Я использовал приведенный выше код, и, похоже, он не работает. есть ли какой-нибудь способ, которым я могу выполнить эту работу? Заранее благодарю вас

Author: dazunE, 2014-08-23

3 answers

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

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

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

 1
Author: Rajeev Vyas, 2014-08-23 16:09:18

Правильный способ зарегистрировать таксономию - дождаться действия 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
Author: fuxia, 2014-08-23 17:34:58

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

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

Кроме того, есть возможность использовать в taxonomies аргумент при использовании register_post_type() чтобы зарегистрировать свою таксономию с вашим пользовательским типом записи, но:

Даже если вы зарегистрируете таксономию при создании типа записи, вы все равно должны явно зарегистрировать и определить таксономию с помощью register_taxonomy().

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

 0
Author: Nicolai, 2014-08-23 21:34:12