Die Verwendung von tax_query erzeugt eine 0 = 1 in $wp_query->request

Lesezeit: 3 Minuten

Dies ist mein erster Versuch, die Hauptabfrage mithilfe von zu ändern pre_get_posts Aktion/Filter

Dies ist die Funktion, die derzeit daran angeschlossen ist:

function advanced_product_search_filter($query)
{
  if(!is_admin() &&
     is_main_query() && 
     is_search() && $query->query_vars['post_type'] == 'product')
  {
    $keyword = $_GET['s'];

    if($_GET['exactly'])
      $keyword = $_GET['s'] . ' "'. $_GET['exactly'] . '"';

    if($_GET['without'])
    {
      $excluded = exclude_product_keyword_search($_GET['without'], 
                    $_GET['pname'],
                    $_GET['pcode']
                  );
      $query->set('post__not_in', $excluded);
    }

    if($_GET['pname'])
      $query->set('s', $keyword);
    else
      $query->set('s', '');

    if($_GET['pcode'])
    {
      $tax_queries = $query->get('tax_query');
      $tax_queries[] = array(
        array(
          'taxonomy' => 'pa_ordering-code',
          'field' => 'name',
          'terms' => array($keyword),
          'operator' => 'LIKE'
        )
      );
      $query->set('tax_query', $tax_queries);
    }
  }
}

Dies ist ein Plugin, das auf einem WooCommerce Installation. Also im Grunde diese Funktion versucht Suche unterstützen a WooCommerce Produkt entweder über die Standardsuche (Titel und Inhalt) oder eine Attributsuche nach einem benutzerdefinierten Attribut namens Ordering Code welches ist pa_ordering-code in dem term_taxonomy Tisch

Andere Teile des Codes funktionieren gut, ich kann die ändern s und post__not_in vars ohne Probleme, aber wenn ich versuche, die zu verwenden tax_query es scheint die Abfrage zusammenzubrechen.

Um Ihnen eine Vorstellung zu geben, wenn ich das versuche:

?s=foo&post_type=product&pname=1&pcode=1&without=non&exactly=foo+bar

Abladen der WHERE Klausel sehe ich folgendes:

AND wp_posts.ID NOT IN (219) 
AND 0 = 1 
AND 
(
  (
    (wp_posts.post_title LIKE '%foo%') OR 
    (wp_posts.post_content LIKE '%foo%')
  ) AND (
    (wp_posts.post_title LIKE '%foo bar%') OR 
    (wp_posts.post_content LIKE '%foo bar%')
  )
) 
AND wp_posts.post_type="product" 
AND (wp_posts.post_status="publish" OR wp_posts.post_status="private") 
AND
( 
  (
    wp_postmeta.meta_key = '_visibility' AND
    CAST(wp_postmeta.meta_value AS CHAR) IN ('visible','search')
  ) 
)

Beachten Sie die AND 0 = 1? Wenn ich die entleere JOIN Klausel, ich werde sicher, dass die tax_query Parameter wird nicht richtig interpretiert, da ich nur die sehe postmeta Tisch drin. Nein terms, term_relationshipsoder term_taxonomy Tisch.

Und ich habe auch versucht, die vorhandenen einfach zu überschreiben tax_query (falls vorhanden) indem Sie Folgendes tun:

$args = array(
  array(
    'taxonomy' => 'pa_ordering-code',
    'field' => 'name',
    'terms' => array($keyword),
    'operator' => 'LIKE'
  )
);
$query->set('tax_query', $args);

Aber ich konnte es immer noch nicht zum Laufen bringen. Irgendwelche Ideen, was ich falsch machen könnte?

Benutzeravatar von Karel Škopek
Karel Skopek

Einstellung include_children Parameter zu FALSCH mein Problem gelöst:

$args = array(
  array(
    'taxonomy' => 'taxonomy-name',
    'field' => 'id',
    'terms' => array(1, 2, 3, 4),
    'include_children' => false,
    'operator' => 'AND'
  )
);

Der Fehler scheint aufzutreten, wenn die tax_query verschachtelte Begriffe enthält (z. B. 2 ist ein Kind von 1).

Dies geschieht normalerweise, wenn eine solche Taxonomie oder ein Taxonomieparameter, nach dem Sie suchen, nicht vorhanden ist. Zum Beispiel hat der Taxonomiename einen Rechtschreibfehler oder der Slug-Name, wenn Sie nach Slug suchen. In diesem Fall ist es schwer zu sagen, da Sie die Taxonomieabfrage umgeschrieben haben.

1426630cookie-checkDie Verwendung von tax_query erzeugt eine 0 = 1 in $wp_query->request

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy