将两个WP_查询合并为一个(或关系)

时间:2021-03-16 作者:Rob Beirens

我有2个WP\\u查询,我想将它们合并为1个查询。以下是我最初的两个查询:

$childlist = new WP_Query( array (
    \'numberposts\'   => -1,
    \'post_type\'     => \'page\',
    \'post_parent\'   => $post->ID,
    \'fields\'        => \'ids\'
));
$childlist2 = new WP_Query( array (
    \'numberposts\'   => -1,
    \'post_type\'     => \'page\',
    \'meta_key\'      => \'extra_menu\',
    \'meta_value\'    => $post->ID,
    \'meta_compare\'  => \'LIKE\',
    \'fields\'        => \'ids\'
));
我试着用几种不同的方法将它们结合起来,但似乎找不到有效的解决方案。一旦我尝试这个或关系,它只会给出;或";。

$childlist = new WP_Query(array(
    \'numberposts\'   => -1,
    \'post_type\'     => \'page\',
    \'meta_query\'    =>  array(
        \'relation\'      => \'OR\',
            array(
                \'key\' => \'post_parent\',
                \'value\' => $post->ID,
                \'compare\' => \'=\',
            ),
            array(
                \'key\'       => \'extra_menu\',
                \'value\'     => $post->ID,
                \'compare\'   => \'LIKE\',
            ),
        ),
));
我该怎么解决这个问题呢?

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

meta_query 只能用于元查询,不能用于非元参数。即使可以,也不会给性能带来好处。

您想要的东西无法完成,第二个示例是搜索具有名为post_parent.

规范的答案是使用2个查询对象和2个循环,或者使用指示父/子关系的常用方法,以便只需要1个查询。

此外:

使用-1 获取所有帖子是危险的,千万不要这样做。这是一个很好的方法,可以在站点变大时引入内存耗尽问题;但我只有50篇帖子,它不应该走那么远。”

  • 只要求ID,你可能会认为你在提高性能,但实际上你在损害它。WP将在一个查询中获取所有post数据以加快速度,但现在它必须每隔一段时间进行一次查询以获取单个post对象。因此,您现在有300个查询来获取单个帖子,而不是一次查询来获取300篇帖子。无论何时,只要你要求标题或帖子元,就可以通过permalink等获取帖子,通过帖子元值来查询帖子是非常昂贵的,而且随着网站规模的扩大,成本会越来越高。这就是分类法的目的,使用分类法。想想看,为什么他们要在分类表中存储post标记和类别,而不是使用post meta?因为它很慢!Post meta表可以在您已经知道Post ID的情况下优化查找值。分类表可以在您知道值的情况下优化查找Post ID
  • 相关推荐

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

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