フロントページのグリッドにいくつかの投稿を表示しようとしています。そのためには、2 つのクエリを組み合わせる必要があります。見せたい
a) を含むすべての投稿'post_type' => 'project'
と
b) が含まれるすべての投稿で'post_type' => 'post'
、 が'category__not_in' => array(1,4,5,6,8)
であり、 が にmeta_key 'show_in_grid'
設定されている1
まとめてランダムに並べ替えて表示しますlist
。
そのためのWordpressのドキュメントにWP_Query
は、たとえば次のことができると書かれています:
$query = new WP_Query( 'meta_value=blue&post_type=page' );
しかし、これは期待どおりに機能していないようです。
私が行った場合:
'post_type=post&meta_key=show_in_grid&meta_value=1'
キーが 1 に設定されているかどうかは無視されます。
私が行った場合:
'post_type' => 'post',
'meta_query' => array(
array( 'key' => 'show_in_grid',
'value' => '1',
'compare' => '=')),
その後、すべてが期待どおりに機能します。
これはドキュメントの誤りですか? また、2 つの異なるクエリを論理 OR で組み合わせるにはどうすればよいですか? 「関係」を使用した tax_query にそのようなものがあるのを見ました。
答え
わかりました、ここのコメントのおかげで動作するようになりました: http://wordpress.org/support/topic/multiple-queries-compiling-into-one-loop?replies=5#post-1929074
最終的な解決策は次のとおりです。
<?php
// first query
$blogposts = get_posts(array(
'category' => 5,
'post_type' => 'post',
'meta_query' => array(
array('key' => 'show_in_grid',
'value' => '1',
'compare' => '=')),
'post_status' => 'publish',
'posts_per_page' => 1000
));
// second query
$projects = get_posts(array(
'post_type' => 'project',
'post_status' => 'publish',
'posts_per_page' => 1000
));
$mergedposts = array_merge( $blogposts, $projects ); //combine queries
$postids = array();
foreach( $mergedposts as $item ) {
$postids[]=$item->ID; //create a new query only of the post ids
}
$uniqueposts = array_unique($postids); //remove duplicate post ids
$args = array(
'post_type' => array('project','post'),
'post__in' => $uniqueposts,
'orderby' => 'rand'
);
$loop = new WP_Query($args);
while ( $loop->have_posts() ) : $loop->the_post();?>
奇妙な理由で、元の 2 つのクエリと最後のクエリで「post_type」を指定する必要がありました。
これが誰かに役立つことを願っています.. :)