web-dev-qa-db-ja.com

Tax_queryを使用すると、結果が消えます(0 = 1が生成されます)

私は動的に渡された分類法とpost_typeを使い、それに応じて結果を表示する動的なクエリを実行しようとしています -

ユーザーはフォーム上の3つのドロップダウンから選択を行い、それぞれに値があります。これはURL Query文字列によって渡されます。ページ上のクエリは$_GETを利用してURLからパラメータを取得します。

Post_typeと他のいくつかの部分を引っ張っただけでは、このコードは問題なく動作します。

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

$query = new WP_Query($dat_argument);   

しかし、以下のようにtax_queryを含めると...

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);   

print_r($query)を実行すると、投稿数が0、出力が0 = 1となります。

以下はクエリのvar_dumpです。

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) { } }

絶対に困惑しました。私はtax_queryを処理するためにすべてのスレッドを読み、私ができることは何でも試しましたが、サイコロは使いませんでした。

これが何を引き起こしているのかについて何か考えがありますか?

参照ポイント

  • これはすべてThesis用のカスタムfunctions.phpファイルの一番上にあります。グローバルなので、クエリから出力された投稿の投稿IDを取得する別の関数で参照できます。

  • カスタム投稿タイプ、分類法、およびフィールドを作成/管理するには、[タイプ - カスタムフィールドとタイプの完全な解決策]を使用します。

  • テーマは論文1.8.4です。

5
rbcpt

tax_queryは配列の配列を取ります。 あなたは配列の配列の配列を持っています。 var_dump($tax_queries);とこれを取得します:

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

角括弧なしで試してください。それはこれです。

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

これに

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

編集する

私はいくつか追加のテストをしました。このクエリを編集してテストサーバーで正しい値がわかるようにしても、うまくいきます。次のクエリは予想通りに機能します。

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

たとえば、'terms' => array('nada'),'taxonomy' => 'bad_category',など、既知の不正な値を持つように編集した場合、クエリの1=1 AND 1 = 0セグメントが取得され、クエリから何も返されません。問題クエリではありません。問題は、間違った値がクエリに渡されていることです。

どの値が間違っているのかわかりませんが、分類名が間違っているか、スラッグが間違っています。他に選択肢はありません。投稿が関連付けられていない有効なスラッグを使用すると、空の結果セットが返されるだけですが、0 = 1コンポーネントは含まれません。

5
s_ha_dum

1次元配列を使用してください。

これを変更

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

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