web-dev-qa-db-fra.com

Répertoriez toutes les publications de type publications personnalisées d'une catégorie donnée?

J'ai un type de message personnalisé myposttype et sa taxonomie s'appelle myposttype_categories.

myposttype_categories contient plusieurs termes, tels que foo et bar.

La question délicate est la suivante: comment répertorier tous les messages de type mypost appartenant à foo (ou bar)?

Je pensais que cela devrait marcher, mais ça ne marche pas:

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

Et la boucle est toujours vide.

J'ai éventuellement essayé chaque paramètre de taxonomie pour WP_Query () également vérifié Paramètres de catégorie .

Il y a de très vieux articles traitant de la question, mais il semble que cela ne fonctionne toujours pas après 3 ans ...? Ou est-ce que je manque quelque chose?

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

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

[modifier]

C'est comme ça que j'enregistre mon type de message:

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 );

}  

Et taxonomie:

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

Qu'en est-il de faire un 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);

Facepalm, vous êtes sûr que ces taxonomies/types de publications existent et qu’il existe des publications sous celles-ci?

Mise à jour

La requête semble bien fonctionner pour moi et je peux afficher une liste des messages que j'ai ajoutés avec ce terme/cette catégorie. J'ai déplacé votre appel register_taxonomy dans la fonction qui se déclenche le init. Selon le codex, il est déconseillé d'appeler register_taxonomy en dehors d'une action et pourrait être la cause de vos problèmes.

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));

}

Et la requête:

$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();

Pour ce qui en vaut la peine, les deux éléments suivants fonctionnent également en tant qu'arguments, bien que, comme vous interrogez une seule taxonomie, vous n'avez probablement pas besoin d'utiliser le tax_query. Je l'ai utilisé au départ parce que je pensais que vous deviez trouver des messages dans les deux termes.

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

et

$args = array(
    'post_type' => 'myposttype',
    'tax_query' => array(
        array(
        'taxonomy' => 'myposttype_categories',
        'terms' => array('foo'),
        'field' => 'slug'
        )
    )
);
5
helgatheviking