web-dev-qa-db-fra.com

'catégorie__et' pour la taxonomie personnalisée?

J'ai un type de message personnalisé "post-type-x" et trois taxonomies personnalisées qui lui sont rattachées "taxonomy-1", "taxonomy-2" et "taxonomy-3".

Je souhaite récupérer tous les messages ayant des taxonomies personnalisées 'taxonomy-1' et 'taxonomy-2'.

Quel sera le tableau d'arguments que je passerai dans la fonction query_posts?

$args = array ( ..?.. )
2
Omar Tariq

Je pense que cette question peut causer un malentendu. Vous dites:

Je souhaite récupérer tous les messages ayant des taxonomies personnalisées 'taxonomy-1' et 'taxonomy-2'

mais

voulez-vous poster qui ont à la fois taxonomy-1 et taxonomy-2 et taxonomy-3 est irrilevant?

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'AND',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    )
  )
);

ou

Voulez-vous poster qui ont à la fois taxonomy-1 et taxonomy-2 mais non taxonomie-3?

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'AND',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-3',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-3', array('fields' => 'ids', 'hide_empty' => false) ),
      'operator' => 'NOT IN'
    )
  )
);

ou

Voulez-vous que les messages ayant taxonomy-1 ou taxonomy-2 et taxonomy-3 soient sans importance?

$args = array(
  'post_type' => 'post-type-x',
  'tax_query' => array(
    'relation' => 'OR',
    array(
      'taxonomy' => 'taxonomy-1',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-1', array('fields' => 'ids', 'hide_empty' => false) )
    ),
    array(
      'taxonomy' => 'taxonomy-2',
      'field' => 'id',
      'terms' => get_terms( 'taxonomy-2', array('fields' => 'ids', 'hide_empty' => false) )
    )
  )
);

Notez que ce type de requête sera peu performant, car get_terms exécute une requête en base de données. Ainsi, en utilisant le code ci-dessus, vous aurez plusieurs requêtes qui ralentissent l'affichage de la page.

Si dans le fichier contenant ce code, vous pouvez accéder à certaines variables contenant un tableau d'identifiants (ou slug) de termes de taxonomie, vous pouvez les utiliser et améliorer les performances.

Une alternative est de créer une requête de base de données personnalisée en utilisant $wpdb->get_results avec une requête SQL appropriée.

2
gmazzap