Как установить таксономию в пользовательском плагине?

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

Вот как я зарегистрировал пользовательский пост и таксономию:

function post_type_questionnaire() { $labels = array( 'name' => _x('Questionnaire', 'post type general name'), 'singular_name' => _x('Questionnaire', 'post type singular name'), 'add_new' => _x('Add New Question', 'questionnaire'), 'add_new_item' => __('Add New Questionnaire') ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => true, '_builtin' => false, // It's a custom post type, not built in! 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => null, 'supports' => array('title', //'editor', /*'excerpt', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'author', 'page-attributes'*/ )); register_post_type('questionnaire',$args); } add_action('init', 'post_type_questionnaire'); function create_questionnaire_taxanomies(){ register_taxonomy('qcategories','questionnaire', array( 'hierarchical'=>true, 'label'=>'Questionnaire Categories', 'rewrite' => array( 'slug' => 'questionnaire' ) )); } add_action('init', 'create_questionnaire_taxanomies',0); 

Я использую короткий код для отображения его в интерфейсе.

используя приведенный ниже код, он показывает все сообщения

  $args = array( 'post_type' => 'questionnaire', 'posts_per_page' => -1, ); $query = new WP_Query($args); if ( $query->have_posts() ) { ?> <?php while ( $query->have_posts() ) :query->the_post(); ?> 

Но когда я пытаюсь указать термин таксономии, это не работает, и это код:

  $args = array( 'post_type' => 'questionnaire', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'qcategories', 'field' => 'slug', 'terms' => $atts["name"] ) ) ); $query = new WP_Query($args); if ( $query->have_posts() ) { ?> <?php while ( $query->have_posts() ) : $query->the_post(); ?> 

Когда я попытался отобразить количество сообщений на странице шаблона, он ничего не показывает:

  $term = get_term( 3, 'qcategories' ); echo $term->count; 

Это ничего не дает, поэтому я считаю, что таксономия не регистрируется, может кто-нибудь помочь мне зарегистрировать таксономию в моем пользовательском плагине. Заранее спасибо!

Solutions Collecting From Web of "Как установить таксономию в пользовательском плагине?"

Возможно, вам придется сохранить свои постоянные ссылки. Просто нажмите кнопку «Сохранить» в настройках постоянной ссылки: /wp-admin/options-permalink.php

В противном случае ваш код работает после очистки всего лишь нескольких опечаток:

 function post_type_questionnaire() { $labels = array( 'name' => _x('Questionnaire', 'post type general name'), 'singular_name' => _x('Questionnaire', 'post type singular name'), 'add_new' => _x('Add New Question', 'questionnaire'), 'add_new_item' => __('Add New Questionnaire') ); $args = array( 'labels' => $labels, 'public' => true, 'publicly_queryable' => true, 'show_ui' => true, 'query_var' => true, 'rewrite' => false, '_builtin' => false, // It's a custom post type, not built in! 'capability_type' => 'post', 'hierarchical' => false, 'menu_position' => null, 'supports' => array( 'title', //'editor', /*'excerpt', 'thumbnail', 'trackbacks', 'custom-fields', 'comments', 'revisions', 'author', 'page-attributes'*/ )); register_post_type('questionnaire',$args); } add_action('init', 'post_type_questionnaire'); function create_questionnaire_taxanomies(){ register_taxonomy('qcategories','questionnaire', array( 'hierarchical'=>true, 'label'=>'Questionnaire Categories', 'rewrite' => array( 'slug' => 'questionnaire' ) )); } add_action('init', 'create_questionnaire_taxanomies',0); 

Этот код шаблона имел несколько опечаток, но он бы вызвал ошибку:

 $atts["name"] = 'stackexchange'; $args = array( 'post_type' => 'questionnaire', 'posts_per_page' => -1, 'tax_query' => array( array( 'taxonomy' => 'qcategories', 'field' => 'slug', 'terms' => $atts["name"] ) ) ); $query = new WP_Query($args); if ( $query->have_posts() ) { ?> <?php while ( $query->have_posts() ) : $query->the_post(); ?> <?php the_title(); ?> <?php endwhile; ?> <?php } ?>