web-dev-qa-db-de.com

Wenn tax_query verwendet wird, verschwinden die Ergebnisse (0 = 1 produziert)

Ich versuche, eine dynamische Abfrage durchzuführen, die eine dynamisch übergebene Taxonomie und post_type verwendet und die Ergebnisse entsprechend anzeigt.

Ein Benutzer trifft eine Auswahl aus 3 Dropdown-Listen in einem Formular, die jeweils einen Wert haben. Dies wird von der URL-Abfragezeichenfolge übergeben. Die Abfrage auf der Seite übernimmt die Parameter aus der URL unter Verwendung von $_GET.

Wenn ich nur den post_type und ein paar andere Teile ziehe, funktioniert dieser Code einwandfrei.

global $query
$dat_argument = array ( 'post_type' => $type,
                        'orderby' => 'Rand',
                        'showposts' => $posts,
                        );

$query = new WP_Query($dat_argument);   

Wenn ich jedoch die tax_query wie folgt einfüge ...

global $query;

$tax_queries[] = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

$dat_argument = array ( 'post_type' => $type,
                        'orderby' => 'Rand',
                        'showposts' => $posts,
                        'tax_query' => $tax_queries
                        );

$query = new WP_Query($dat_argument);   

Ich erhalte 0 Beiträge und eine Ausgabe von 0 = 1, wenn ich print_r($query) ausführe.

Unten ist der var_dump der Abfrage:

object(WP_Query)#203 (44) { 
["query_vars"]=> array(61) { 
["post_type"]=> string(11) "bw-exercise" 
["orderby"]=> string(4) "Rand"
["showposts"]=> int(5)
["tax_query"]=> array(1) {
[0]=> array(3) {
["taxonomy"]=> string(15) "difficulty_mode"
["terms"]=> array(1) {
[0]=> string(1) "1" }
["field"]=> string(4) "slug" } }
["error"]=> string(0) ""
["m"]=> int(0)
["p"]=> int(0)
["post_parent"]=> string(0) ""
["subpost"]=> string(0) ""
["subpost_id"]=> string(0) ""
["attachment"]=> string(0) ""
["attachment_id"]=> int(0)
["name"]=> string(0) ""
["static"]=> string(0) ""
["pagename"]=> string(0) ""
["page_id"]=> int(0)
["second"]=> string(0) ""
["minute"]=> string(0) ""
["hour"]=> string(0) ""
["day"]=> int(0)
["monthnum"]=> int(0)
["year"]=> int(0)
["w"]=> int(0)
["category_name"]=> string(0) ""
["tag"]=> string(0) ""
["cat"]=> string(0) ""
["tag_id"]=> string(0) ""
["author_name"]=> string(0) ""
["feed"]=> string(0) ""
["tb"]=> string(0) ""
["paged"]=> int(0)
["comments_popup"]=> string(0) ""
["meta_key"]=> string(0) ""
["meta_value"]=> string(0) ""
["preview"]=> string(0) ""
["s"]=> string(0) ""
["sentence"]=> string(0) ""
["fields"]=> string(0) ""
["menu_order"]=> string(0) ""
["category__in"]=> array(0) { }
["category__not_in"]=> array(0) { }
["category__and"]=> array(0) { }
["post__in"]=> array(0) { }
["post__not_in"]=> array(0) { }
["tag__in"]=> array(0) { }
["tag__not_in"]=> array(0) { }
["tag__and"]=> array(0) { }
["tag_slug__in"]=> array(0) { }
["tag_slug__and"]=> array(0) { }
["ignore_sticky_posts"]=> bool(false)
["suppress_filters"]=> bool(false)
["cache_results"]=> bool(true)
["update_post_term_cache"]=> bool(true)
["update_post_meta_cache"]=> bool(true)
["posts_per_page"]=> int(5)
["nopaging"]=> bool(false)
["comments_per_page"]=> string(2) "50"
["no_found_rows"]=> bool(false)
["taxonomy"]=> string(15) "difficulty_mode"
["term"]=> string(1) "1"
["order"]=> string(4) "DESC" }
["tax_query"]=> object(WP_Tax_Query)#200 (2) {
["queries"]=> array(1) {
[0]=> array(5) {
["taxonomy"]=> string(15) "difficulty_mode"
["terms"]=> array(1) {
[0]=> string(1) "1" }
["include_children"]=> bool(true)
["field"]=> string(4) "slug"
["operator"]=> string(2) "IN" } }
["relation"]=> string(3) "AND" }
["meta_query"]=> object(WP_Meta_Query)#201 (2) {
["queries"]=> array(0) { }
["relation"]=> NULL }
["post_count"]=> int(0)
["current_post"]=> int(-1)
["in_the_loop"]=> bool(false)
["comment_count"]=> int(0)
["current_comment"]=> int(-1)
["found_posts"]=> int(0)
["max_num_pages"]=> int(0)
["max_num_comment_pages"]=> int(0)
["is_single"]=> bool(false)
["is_preview"]=> bool(false)
["is_page"]=> bool(false)
["is_archive"]=> bool(true)
["is_date"]=> bool(false)
["is_year"]=> bool(false)
["is_month"]=> bool(false)
["is_day"]=> bool(false)
["is_time"]=> bool(false)
["is_author"]=> bool(false)
["is_category"]=> bool(false)
["is_tag"]=> bool(false)
["is_tax"]=> bool(true)
["is_search"]=> bool(false)
["is_feed"]=> bool(false)
["is_comment_feed"]=> bool(false)
["is_trackback"]=> bool(false)
["is_home"]=> bool(false)
["is_404"]=> bool(false)
["is_comments_popup"]=> bool(false)
["is_paged"]=> bool(false)
["is_admin"]=> bool(false)
["is_attachment"]=> bool(false)
["is_singular"]=> bool(false)
["is_robots"]=> bool(false)
["is_posts_page"]=> bool(false)
["is_post_type_archive"]=> bool(false)
["query_vars_hash"]=> string(32) "d289f5774bbde27aa3902982141a66ab"
["query_vars_changed"]=> bool(false)
["thumbnails_cached"]=> bool(false)
["query"]=> array(4) {
["post_type"]=> string(11) "bw-exercise"
["orderby"]=> string(4) "Rand"
["showposts"]=> string(1) "5"
["tax_query"]=> array(1) {
[0]=> array(3) {
["taxonomy"]=> string(15) "difficulty_mode"
["terms"]=> array(1) {
[0]=> string(1) "1" }
["field"]=> string(4) "slug" } } }
["request"]=> string(278) "SELECT SQL_CALC_FOUND_ROWS wrd_posts.ID FROM wrd_posts WHERE 1=1 AND 0 = 1 AND wrd_posts.post_type = 'bw-exercise' AND (wrd_posts.post_status = 'publish' OR wrd_posts.post_author = 1 AND wrd_posts.post_status = 'private') GROUP BY wrd_posts.ID ORDER BY Rand() DESC LIMIT 0, 5"
["posts"]=> array(0) { } }

Absolut ratlos. Ich habe alle Threads zu tax_query durchgelesen und alles versucht, was ich kann, aber keine Würfel.

Irgendwelche Gedanken darüber, was das verursacht?

Referenzpunkte:

  • Dies alles steht oben in der Datei "custom functions.php" für die Abschlussarbeit. Es ist ein globales Objekt, auf das eine andere Funktion verweisen kann, die die Beitrags-ID der Beiträge abruft, die von der Abfrage ausgegeben werden.

  • Verwenden von "Typen - Komplettlösung für benutzerdefinierte Felder und Typen" zum Erstellen/Verwalten benutzerdefinierter Beitragstypen, Taxonomien und Felder.

  • Thema ist These 1.8.4

5
rbcpt

tax_query nimmt ein Array von Arrays. Sie haben ein Array von Arrays von Arrays. var_dump($tax_queries); und bekomme folgendes:

array(1) {
  [0]=>
  array(1) {
    [0]=>
    array(3) {
      ["taxonomy"]=>
      string(15) "difficulty_mode"
      ["terms"]=>
      NULL
      ["field"]=>
      string(4) "slug"
    }
  }
}

Versuchen Sie es ohne die eckigen Klammern. Das ist dran:

$tax_queries[] = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

das sehr gut finden

$tax_queries = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

Bearbeiten:

Ich habe einige zusätzliche Tests durchgeführt. Wenn ich diese Abfrage so bearbeite, dass sie auf meinem Testserver gute Werte aufweist, funktioniert sie. Die folgende Abfrage funktioniert genau wie erwartet:

$tax_queries = array(
    array (
    'taxonomy' => 'category',
    'terms' => array('aciform'),
    'field' => 'slug'
    )
);

$dat_argument = array ( 'post_type' => 'post',
                        'orderby' => 'Rand',
                        'showposts' => 10,
                        'tax_query' => $tax_queries
                        );

$query = new WP_Query($dat_argument);  
var_dump($query);

Wenn ich es so bearbeite, dass es einen bekanntermaßen schlechten Wert hat - zum Beispiel - 'terms' => array('nada'), oder 'taxonomy' => 'bad_category',-- erhalte ich das Segment 1=1 AND 1 = 0 der Abfrage, das dazu führte, dass die Abfrage nichts zurückgab. Das Problemist nicht die Abfrage. Das Problem ist, dass fehlerhafte Werte an die Abfrage übergeben werden.

Ich weiß nicht, welcher Ihrer Werte falsch ist, aber entweder ist Ihr Taxonomiename falsch oder Ihre Schnecke (n) sind falsch. Es gibt keine andere Möglichkeit. Wenn Sie gültige Slugs ohne verknüpfte Posts verwenden, wird nur eine leere Ergebnismenge zurückgegeben, die 0 = 1-Komponente fehlt jedoch.

5
s_ha_dum

Verwenden Sie ein eindimensionales Array.

Ändere das

$tax_queries[] = array(
    array (
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
    )
);

zu

'tax_query' => array(
    'taxonomy' => 'difficulty_mode',
    'terms' => $mode,
    'field' => 'slug'
);
0
buzibuzi