web-dev-qa-db-ja.com

WP_Queryとargs配列で 'cat' =>に変数を使用する WP バグ?

この議論のために、これはcategory.php内の私の問い合わせのバージョンです:

wp_reset_query();
$category_id = get_cat_ID(single_cat_title('', false));
$my_query = new WP_Query(array(
'posts_per_page' => SOME_DEFINED_VALUE,
'cat'  => $category_id,
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
'post_type' => array('post','post_custom_1','post_custom_2','post_custom_3')
));
// print_r($my_query);

一言で言えば、それは動作しません。これが私が気づいたことです。

Print_r($ my_query)を実行すると最初の行にquery_varsがあります。それらは私の配列引数と一致しません。たとえば、posts_per_pageのデフォルトは他の値(CONSTANTではなく)になり、post_typeリストにはpostが含まれなくなりました(これは必須である必要があります)。

'cat' =>で行を削除するか、値をハードコード( 'cat' => 3)すると、すべて正常に機能します。残りのquery_varsはprint_rに表示されます。人生は素晴らしい :)

私は次のことを試しましたが成功しませんでした。

  • Posts_per_pageと同じように、varを定数にする(これは問題を引き起こさない)。
  • $ category_id番号を囲む連結引用 - 結果は、引用符がまったくないのと同じです。うまくいきません。
  • 'cat' => array($ category_id) - エラーを引き起こしました - 好きではありませんでした
    それは配列だったということです。

何か提案がありますか?

これが「うまくいった」ことです(私の$ category_idを使うことができましたが、そうすることでWP_Query()配列リストの残りの引数を消すことはできませんでした)。

'cat'  => '"-'$category_id'"',

つまり、その猫のIDはできませんでした。クレイジー、そうでしょ?

正しく解決できない限り、私のすべての猫をカンマで区切って、現在の猫を解析してから、その文字列を使用してクエリーを実行します。言い換えれば、私の猫がA、B、Cの場合は、Aに対してクエリを実行するのではなく(期待どおり)

'cat' => A

私はCではなくBではなく問い合わせます。

'cat' => -B,-C

うまくいけば、ハックの少ない解決策があると思います。私は今、この時間が長すぎたので、このハックを使ってそれを成し遂げるのに十分に必死です。とは言っても、これは確かに私にとってコアのバグのように感じます。はい、3.5.1を使用しています(または、現在は.2または.3までですか?)私の言いたいことは、私は最新版を使っているということです(そしてこれは3.2.xでも同じでした)。

ところで、私はこの問題が他の場所(例えばWPフォーラム)に掲載されているのを見ました。 1つの解決策は、args配列が配列ではなく文字列であることを示唆しました。それがWP_Queryで可能であったとしても、どのように私は文字列としてpost_typesのためのリスト/配列をするでしょうか?最後に、私が何か悪いことをしているのであれば、Codexヘルプページは更新が必要ですね。

助けて。 :)

2
Chief Alchemist

どこで/どのように$category_idを定義していますか?

WP_Query()カテゴリパラメータのためのコーデックスエントリWP_Query()は、カテゴリIDが 文字列 ではなく 整数 として渡されることを想定しています。

  • $category_idintegerの場合、それを'cat'に渡します。
  • $category_idが(カテゴリID配列の場合、これも整数として)、'category__in'に渡します。
2
Chip Bennett

私はそれがあなたがカテゴリを得る方法と関係があると思います。私が取り組んでいるブログで機能を設定しました。 $category_idは常に0です。

それで私は$category_idのためにこの行を使うことをチェックするために:

global $post;
$category_id = get_the_category($post->ID)[0]->term_id;

最初のカテゴリを投稿に割り当てる簡単な方法です。

その後、クエリは正常に実行され、クエリのcatパラメータが移入されます。

0
Simon

私はあなたの機能をテストしました、そして、それはうまく働きます、それであなたはおそらくあなたのテーマの中の他のいくつかのコードとのエラーまたはプラグインの衝突があります。または多分あなたはループが正しくありません。

参考のために、category.phpで次のコードをTwentyelevenでテストしましたが、出力はエラーなく、正しいものでした。

wp_reset_query();
define("SOME_DEFINED_VALUE", 5);

$category_id = get_cat_ID(single_cat_title('', false));

$my_query = new WP_Query(array(
'posts_per_page' => SOME_DEFINED_VALUE,
'cat'  => $category_id,
'paged' => ( get_query_var('paged') ? get_query_var('paged') : 1 ),
'post_type' => array('post','post_custom_1','post_custom_2','post_custom_3')
));

var_dump($my_query);
0
Wyck

それらを分析するために私があなたのことを扱いやすいまとまりにこぼしたとき、私は問題が配列内の "ページ区切り"行にある可能性が最も高いことがわかりました。

wp_reset_query();
$category_id = get_cat_ID(single_cat_title('', false));

$paged = ( get_query_var('paged') )? get_query_var('paged') : 1 ;

$query = array(
'posts_per_page' => 5,
'cat'  => $category_id,
'paged' => $paged ,
'post_type' => array('post','custom_1','custom_2','custom_3')
);

$loop = new WP_Query( $query);

print_r($loop);

ご覧のとおり、最初のget_query_varの周囲に余分な括弧を追加して、それが適切な3項演算子になるようにしました。私は私のテスト装置でこれを試しました、そしてそれはちょうどうまくいきました。

アンディについて

0
Andy Killen