wake-up-neo.com

WP_Query, tax_query und term_meta: How to?

Ich habe ein benutzerdefiniertes Post-Type-Produkt (Wein). Jedes der folgenden Elemente ist eine benutzerdefinierte Taxonomie:

  • Jahrgang (Erntejahr) [nur einer pro Wein]
  • Familie (Rebsorte) [kann mehr als eine sein]
  • Größe (Flaschengröße) [nur eine pro Produkt]

In der Einzelproduktansicht eines Weins möchte ich folgende Abfragen durchführen:

1) Finden Sie alle Weine, die dieselbe Familie , dieselbe Größe haben, aber aus einem anderen Jahrgang stammen

2) Finden Sie alle Weine (Posttyp: Produkt), die zur gleichen Familie gehören UND denselben Jahrgang UND unterschiedliche Größe haben.

Nun das Problem: Das numerische Jahr ist eine benutzerdefinierte Meta-Eigenschaft des Vintage-Terms . Die numerische Flaschengröße ist eine benutzerdefinierte Meta-Eigenschaft des Größenbegriffs.

Bei der ersten Abfrage habe ich Folgendes versucht:

                $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'
                    ),
                  )
                ));

Es klappt. Allerdings: Anstatt die term_id (hier: term id of vintage) zu vergleichen, möchte ich vergleichen, ob der Begriff benutzerdefinierter Metawert (year_numeric) unterschiedlich ist.

Gibt es eine Möglichkeit, eine solche Abfrage durchzuführen?

1
Blackbam

AFAIK: Es gibt keine Möglichkeit, dies in einer einzelnen WP_Query zu erreichen. Daher müssen Sie zuerst eine Liste von term_ids abrufen, die ein anderes Jahr als das fragliche Jahr haben.

Ich denke mit dem Folgenden kommen Sie ganz nah. (Sie müssen nicht sofort ein Env testen)

$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

Ich glaube, Sie überprüfen, ob ein Metaschlüssel nicht vorhanden ist.

Bitte beziehe dich auf diese ähnliche Frage: frage alle Beiträge ab, bei denen kein Metaschlüssel existiert

0
Nick M.