在我开始之前,你的meta_query
. 您不应该使用relation
对于单个内部meta_query
大堆
relation (string)-当存在多个内部meta\\u查询数组时,每个内部meta\\u查询数组之间的逻辑关系。可能的值为“AND”、“OR”。不要与单个内部meta\\U查询数组一起使用。
你的第一个问题似乎是正确的,我同意。如果第一个查询的帖子数量少于一定数量,那么第二个查询基本上是用来填充帖子的。有几种方法可以实现这一点
使用@G.M.in.所述的“占位符帖子”this post
利用第二个查询填写其余帖子
我不想触及@G.m.帖子或其实现,因为他已经做了,所以请随时查看该帖子
关于使用第二个查询获取帖子的第二个想法,您需要做一些规划。
这里要记住的要点是:
统计第一次查询中的帖子数量。如果少于预设金额,则计算第二次查询将检索的帖子数
使用meta_query
检索第二个查询中没有指定meta_value
.
无需合并两个查询,只需根据需要分别处理即可。但这一切都取决于你和你想要实现的目标
以下是概念:(注意:所有未经测试)
您需要做的第一件事是获取第一次查询返回的帖子数量。这可以使用$found_posts
. 在你的情况下
$stories->found_posts
一旦有了它,就可以对照条件语句中的一个集值来检查它。假设需要显示10个帖子
$min_posts = 10;
if( $stories->found_posts < $min_posts ) {
//get posts from the second query
}
现在,您需要计算需要从第二个查询中获得的帖子数量。
$ppp = $min_posts - $stories->found_posts;
$ppp
将是将检索到并因此提供给
posts_per_page
$arg1 = array(
\'post_type\' => \'story\',
\'post_status\' => \'publish\',
\'orderby\' => \'date\',
\'order\' => \'ASC\',
\'posts_per_page\' => $ppp,
\'meta_query\' => array(
array(
\'key\' => \'business_name\',
\'value\' => $_POST[\'business_name\'],
\'compare\' => \'NOT LIKE\'
),
),
);
$stories2 = new WP_Query($arg1);
现在可以合并(如果需要)并显示结果
$posts = array_merge($stories->posts, $stories2->posts);
最终代码:(
如上所述,所有未经测试)$arg = array(
\'post_type\' => \'story\',
\'post_status\' => \'publish\',
\'orderby\' => \'date\',
\'order\' => \'ASC\',
\'posts_per_page\' => -1,
\'meta_query\' => array(
array(
\'key\' => \'business_name\',
\'value\' => $_POST[\'business_name\'],
\'compare\' => \'LIKE\'
),
),
);
$stories = new WP_Query($arg);
$min_posts = 10;
if( $stories->found_posts < $min_posts ) {
$ppp = $min_posts - $stories->found_posts;
$arg1 = array(
\'post_type\' => \'story\',
\'post_status\' => \'publish\',
\'orderby\' => \'date\',
\'order\' => \'ASC\',
\'posts_per_page\' => $ppp,
\'meta_query\' => array(
array(
\'key\' => \'business_name\',
\'value\' => $_POST[\'business_name\'],
\'compare\' => \'NOT LIKE\'
),
),
);
$stories2 = new WP_Query($arg1);
$posts = array_merge($stories->posts, $stories2->posts);
}else{
$posts = $stories->posts;
}
foreach ( $posts as $post ) {
echo $post->ID;
}