合并两个查询帖子时避免重复

时间:2014-11-05 作者:Rakhi

我已经合并了两个查询帖子,但当我获取它们的结果时,它会显示重复的结果。

这是代码

$arg = array(\'post_type\' => \'story\',\'post_status\' => \'publish\', \'orderby\' => \'date\', \'order\' => \'ASC\',\'posts_per_page\'  => -1,

                \'meta_query\' => array(

                    \'relation\' => \'AND\',

                    array(

                        \'key\' => \'business_name\',

                        \'value\' => $_POST[\'business_name\'],

                        \'compare\' => \'LIKE\'

                    )

                )

         $stories = new WP_Query($arg);

     $arg1 = array(\'post_type\' => \'story\',\'post_status\' => \'publish\', \'orderby\' => \'date\', \'order\' => \'ASC\',\'posts_per_page\'    => 5);
                 $stories2 = new WP_Query($arg1);
                 $query = new WP_Query();
                 $query->posts = array_merge($stories->posts, $stories2->posts);

   foreach($query->posts as $post)
            { 
            <?php echo the_field(\'author_name\'); ?>
      }

EDIT

来自评论

在第一个参数中有一个元查询,所以在第一个查询中,只有那些设置了business\\u name meta的帖子才发布,但它只显示了2个结果,所以为了填充空间,我添加了更多的帖子表单,所以有没有办法删除来自参数的帖子?

1 个回复
SO网友:Pieter Goosen

在我开始之前,你的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;
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post