我有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\',
),
),
));
我该怎么解决这个问题呢?
最合适的回答,由SO网友:Tom J Nowell 整理而成
meta_query
只能用于元查询,不能用于非元参数。即使可以,也不会给性能带来好处。
您想要的东西无法完成,第二个示例是搜索具有名为post_parent
.
规范的答案是使用2个查询对象和2个循环,或者使用指示父/子关系的常用方法,以便只需要1个查询。
此外:
使用-1
获取所有帖子是危险的,千万不要这样做。这是一个很好的方法,可以在站点变大时引入内存耗尽问题;但我只有50篇帖子,它不应该走那么远。”然后要求发60个帖子,并保证永远不会。高值总是优于无限制值。如果需要全部显示,那么无限滚动和分页是更好的选择
只要求ID,你可能会认为你在提高性能,但实际上你在损害它。WP将在一个查询中获取所有post数据以加快速度,但现在它必须每隔一段时间进行一次查询以获取单个post对象。因此,您现在有300个查询来获取单个帖子,而不是一次查询来获取300篇帖子。无论何时,只要你要求标题或帖子元,就可以通过permalink等获取帖子,通过帖子元值来查询帖子是非常昂贵的,而且随着网站规模的扩大,成本会越来越高。这就是分类法的目的,使用分类法。想想看,为什么他们要在分类表中存储post标记和类别,而不是使用post meta?因为它很慢!Post meta表可以在您已经知道Post ID的情况下优化查找值。分类表可以在您知道值的情况下优化查找Post ID