web-dev-qa-db-fra.com

Filtrage des taxonomies personnalisées

C’est un article croisé des forums WordPress, pour lequel je présente mes excuses, mais cela fait presque une semaine et nous n’obtenons aucune réponse, espérant que quelqu'un ici pourra vous aider. Si je reçois une réponse à l'un ou l'autre endroit, je mettrai à jour le message avec un lien.

J'essaie d'étendre les fonctionnalités au thème personnalisé de mon client et je ne parviens pas à obtenir que query_posts () extrait une liste de taxonomies personnalisées filtrées par catégorie. La création du type de message personnalisé dans functions.php est la suivante:

//Custom Post Types
add_action('init', 'create_myportfoliotype');
function create_myportfoliotype() {
    $myportfoliotype_args = array(
        'label' => __('Portfolio'),
        'singular_label' => __('Portfolio'),
        'public' => true,
        'show_ui' => true,
        'menu_position' => 5,
        'capability_type' => 'post',
        'hierarchical' => false,
        'publicly_queryable' => true,
        'query_var' => true,
        'rewrite' => array( 'slug' => 'portfolio', 'with_front' => false ),
        'can_export' => true,
        'supports' => array(
            'title', 
            'editor', 
            'post-thumbnails',
            'custom-fields',
            'page-attributes',
            'author',
            'thumbnail'
          )
       );
  register_post_type('myportfoliotype',$myportfoliotype_args);
}


//Taxonomias
register_taxonomy("categories", array("myportfoliotype"), array("hierarchical" => true, "label" => "Category", "singular_label" => "Category", "rewrite" => true));
register_taxonomy( 'tags', array("homepage"), array( 'hierarchical' => false, 'label' => 'Tags', 'query_var' => true, 'rewrite' => true ) );
register_taxonomy( 'specifics', array("myportfoliotype"), array( 'hierarchical' => false, 'label' => 'Specifics', 'query_var' => true, 'rewrite' => true ) );

Actuellement, le site contient une page qui affiche tous les articles, puis filtre ce qui est visible via jquery. La requête qui extrait les messages est la suivante:

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80))

Cela fonctionne, mais comme je l'ai dit, tout y est intégré. Ce qu’ils veulent maintenant, c’est deux modèles personnalisés qui n’entraînent que deux catégories spécifiques. Je ne peux pas faire le filtrage via jquery car cela ne fonctionne pas visuellement pour le faire dans ce cas. J'essaie d'extraire seulement les 2 catégories, mais pour une raison quelconque, aucune variation du code suivant ne semble fonctionner:

query_posts( array( 'post_type' => 'myportfoliotype', 'paged' => $paged, 'posts_per_page' => 80, 'tag_id' => '9' ))

Tout ce que j'ai essayé tire toujours de tous les messages, ou n'en tire aucun.

ps. Est-ce que quelqu'un connaît une fonction pour vider la requête brute générée par query_posts? Si je pouvais voir ce que la requête faisait avec chaque variante que j'ai essayée et la comparer à l'info de wp_postmeta, cela pourrait aider à comprendre où se situe le problème.

6
Michael VanDeMar

Ce n'est pas une quête théorique, mais vous devez lire attentivement le Codex. Part particulier tax_query de WP_Query .

Votre appel à query_posts proposé est incorrect. Cela devrait ressembler à ceci:

query_posts( array(  
    'post_type' => 'myportfoliotype', 
    'paged' => $paged, 
    'posts_per_page' => 80, 
    'tax_query' => array( 
        array( 
            'taxonomy' => 'category', //or tag or custom taxonomy
            'field' => 'id', 
            'terms' => array('9') 
        ) 
    ) 
) );

De plus, pour gagner en efficacité lors de l'utilisation de requêtes de base de données, vous devriez envisager d'utiliser pre_get_posts hook au lieu de query_posts.

12
david.binda