Перечислить все пользовательские сообщения типа сообщений из данной категории?


У меня есть пользовательский тип записи myposttype, и его таксономия называется myposttype_categories.

myposttype_categories внутри есть несколько терминов, таких как foo и bar.

Сложный вопрос - как мне перечислить все сообщения myposttype, которые принадлежат foo (или bar)?

Я думал, что это должно сработать, но это не так:

$args = array( 
       'post_type' => 'myposttype', 
       'myposttype_categories'=> 'foo');
$loop = new WP_Query( $args );

И цикл всегда пуст.

Я перепробовал, возможно, каждый Параметр таксономии для WP_Query() также проверил категорию параметры.

Есть очень старые сообщения, посвященные этой проблеме, но, похоже, она все еще не работает спустя 3 года...? Или я что-то упускаю?

Http://wordpress.org/support/topic/wp_query-and-custom-taxonomies

Http://core.trac.wordpress.org/ticket/13582

[редактировать]

Вот как я регистрирую свой тип сообщения:

add_action('init', 'myposttype_register');  

function myposttype_register() {

    $labels = array(
        'name' => _x('Myposttype', 'post type general name'),
        'singular_name' => _x('Myposttype item', 'myposttype item'),
        'add_new' => _x('Add Myposttype', 'myposttype item'),
        'add_new_item' => __('Add New Item'),
        'edit_item' => __('Edit Item'),
        'new_item' => __('New Item'),
        'view_item' => __('View Item'),
        'search_items' => __('Search Items'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail','page-attributes','comments','trackbacks'),
        'show_in_nav_menus' => true,
      ); 

    register_post_type( 'myposttype' , $args );

}  

И таксономия:

register_taxonomy("myposttype_categories", array("myposttype"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Type", "rewrite" => true));
Author: Wordpressor, 2013-02-15

1 answers

Как насчет того, чтобы сделать tax_query?

$args = array( 
       'post_type' => 'myposttype', 
       'tax_query'=> array(
            'taxonomy' => 'myposttype_categories',
            'terms' => array('foo'),
            'field' => 'slug',
        )
);
$loop = new WP_Query( $args );
var_dump($loop);

Вопрос на лице, вы уверены, что эти таксономии/типы сообщений существуют и что под ними есть сообщения?

Обновление

Запрос, похоже, работает для меня нормально, и я могу показать список сообщений, которые я добавил с этим термином/категорией. Я переместил ваш вызов register_taxonomy в функцию, которая запускает init. В соответствии с кодексом нецелесообразно вызывать register_taxonomy вне действия и может быть причиной ваших проблем.

add_action('init', 'myposttype_register');

function myposttype_register() {

    $labels = array(
        'name' => _x('Myposttype', 'post type general name'),
        'singular_name' => _x('Myposttype item', 'myposttype item'),
        'add_new' => _x('Add Myposttype', 'myposttype item'),
        'add_new_item' => __('Add New Item'),
        'edit_item' => __('Edit Item'),
        'new_item' => __('New Item'),
        'view_item' => __('View Item'),
        'search_items' => __('Search Items'),
        'not_found' =>  __('Nothing found'),
        'not_found_in_trash' => __('Nothing found in Trash'),
        'parent_item_colon' => ''
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'menu_icon' => get_stylesheet_directory_uri() . '/article16.png',
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array('title','editor','thumbnail','page-attributes','comments','trackbacks'),
        'show_in_nav_menus' => true,
      );

    register_post_type( 'myposttype' , $args );

    register_taxonomy("myposttype_categories", array("myposttype"), array("hierarchical" => true, "label" => "Categories", "singular_label" => "Type", "rewrite" => true));

}

И запрос:

$args = array(
'post_type' => 'myposttype',
'myposttype_categories'=> 'foo');

$my_query = new WP_Query( $args );

if( $my_query->have_posts() ) {
    while ($my_query->have_posts()) : $my_query->the_post(); ?>
        <p><a href="<?php the_permalink() ?>" rel="bookmark" title="Permanent Link to <?php the_title_attribute(); ?>"><?php the_title(); ?></a></p><?php
    endwhile;
}

wp_reset_query();

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

$args = array( 'myposttype_categories'=> 'foo' );

И

$args = array(
    'post_type' => 'myposttype',
    'tax_query' => array(
        array(
        'taxonomy' => 'myposttype_categories',
        'terms' => array('foo'),
        'field' => 'slug'
        )
    )
);
 6
Author: helgatheviking, 2013-02-16 17:34:57