web-dev-qa-db-fra.com

WP_Query, tax_query et term_meta: Comment faire?

J'ai un produit de type post personnalisé (vin). Chacun des éléments suivants est une taxonomie personnalisée:

  • Millésime (Année de récolte) [un seul par vin]
  • Famille (Cépage) [peut être plus d'une]
  • Taille (taille de la bouteille) [une seule par produit]

Dans la vue produit unique d'un vin, je souhaite effectuer les requêtes suivantes:

1) Trouvez tous les vins qui ont le même famille, même taille mais qui proviennent d'un millésime différent

2) Trouvez tous les vins (type de poste: produit) qui appartiennent à la même famille ET ont le même millésime ET ont un taille différente.

Maintenant le problème: année numérique est une propriété méta de terme personnalisé du terme vintage. La taille numérique de la bouteille est une propriété méta de terme personnalisé du terme de taille.

Pour la première requête, j'ai essayé ce qui suit:

                $other_years = get_posts(array(
                  'post_type' => 'product',
                  'numberposts' => -1,
                  'tax_query' => array(
                    array(
                      'taxonomy' => 'family',
                      'field' => 'id',
                      'terms' => $family->term_id, // Where term_id of Term 1 is "1".
                      'include_children' => false
                    ),
                    array(
                      'taxonomy' => 'size',
                      'field' => 'id',
                      'terms' => $size->term_id, // Where term_id of Term 1 is "1".
                      'include_children' => false
                    ),
                    array(
                      'taxonomy' => 'vintage',
                      'field' => 'id',
                      'terms' => array($vintage->term_id), // Where term_id of Term 1 is "1".
                      'include_children' => false,
                      'operator' => 'NOT IN'
                    ),
                  )
                ));

Cela fonctionne. Cependant: Au lieu de comparer le term_id (ici: terme id du millésime), j'aimerais comparer si le terme méta valeur personnalisée (year_numeric) est différent.

Y a-t-il une possibilité de faire une telle requête?

1
Blackbam

Comme je l’aime bien, il n’ya aucun moyen d’obtenir cela dans un seul WP_Query. Vous devez d’abord obtenir une liste des term_ids qui ont une {différente année celle de celui en question.

Je pense qu'avec ce qui suit, tu viendras assez près. (ne pas avoir un env pour tester tout de suite)

$other_years_terms = get_terms(
     'taxonomy'     =>  'vintage',
     'meta_key'     =>  'year_numeric',
     'meta_value'   =>  $the_current_wine_year,   // You'll have to figure that out
     'meta_compare' =>  '!=',
     'fields'       =>  'ids'
);

$other_years_posts = get_posts(array(
              'post_type' => 'product',
              'numberposts' => -1,
              'tax_query' => array(
                array(
                  'taxonomy' => 'family',
                  'field' => 'id',
                  'terms' => $family->term_id, // Where term_id of Term 1 is "1".
                  'include_children' => false
                ),
                array(
                  'taxonomy' => 'size',
                  'field' => 'id',
                  'terms' => $size->term_id, // Where term_id of Term 1 is "1".
                  'include_children' => false
                ),
                array(
                  'taxonomy' => 'vintage',
                  'field' => 'term_id',
                  'terms' => $other_years_terms,
                ),
              )
            ));
4
jgangso

Je crois que vous vérifiez quand une méta clé n'existe pas.

Veuillez vous référer à cette question similaire: interroger tous les messages où une clé méta n'existe pas

0
Nick M.