0

在此先感谢您的帮助。我正在尝试为 Wordpress 编写 query_posts 语句,其中:

$args = 'meta_query' => array (
    array (
        array ('key' => 'key-type-1',
               'value' => 'something'
              ),
        array ('key' => 'key-type-2',
               'value' => 'something'
              )
    )
    OR
    array (
        array ('key' => 'key-type-3',
               'value' => 'something'
              ),
        array ('key' => 'key-type-4',
               'value' => 'something'
              )
    )
);
query_posts( $args );

如您所见,我的理解存在一个漏洞:) 我正在尝试编写一个场景,其中任何一个都可能是真的:key-type-1 和 key-type-2 的值存在,或者值对于 key-type-3 AND key-type-4 存在。

我已经尝试了明显的:

$args = 'meta_query' => array (
    array (
        array ('key' => 'key-type-1',
               'value' => 'something'
              ),
        array ('key' => 'key-type-2',
               'value' => 'something'
              )
    ),
    array (
        array ('key' => 'key-type-3',
               'value' => 'something'
              ),
        array ('key' => 'key-type-4',
               'value' => 'something'
              )
    )
);
query_posts( $args );

但这只会产生: key-type-1 AND key-type-2 的值存在并且 key-type-3 AND key-type-4 的值存在......这不好。

也许每个子数组中都有一个“比较”值?或者,也许我不得不求助于使用多个 query_posts 并结合显示的多个输出?如果有人有任何见解,那真的会帮助我。

谢谢!

4

1 回答 1

0

首先,除非您打算修改默认的 Wordpress 循环,否则不要使用 query_posts。它修改各种Globals,很乱,而且很慢。请考虑将您的所有 query_posts 调用更改为WP Query

关于query_posts 与 WP_Query的辩论有相当多的文档,并且几乎所有人都得出结论 WP_Query 是要走的路。

至于你想做什么,有几种方法可以做到这一点。想到一个标准的 SQL 调用,但老实说,构建 SQL 可能比它的价值更麻烦。相反,运行两个单独的查询以包含来自两个元查询的帖子可能会更容易。

这在很大程度上未经测试,我不能保证它会直接工作,但这应该让你开始:

<?php
$meta_a = array(
    'meta_query' => array(
        array ('key' => 'key-type-1',
               'value' => 'something'
        ),
        array ('key' => 'key-type-2',
               'value' => 'something'
        )
    )
);
$meta_b = array(
    'meta_query' => array(
        array ('key' => 'key-type-3',
               'value' => 'something'
        ),
        array ('key' => 'key-type-4',
               'value' => 'something'
        )
    )
);
$multi_query = array();
$multi_query[] = new WP_Query($meta_a);
$multi_query[] = new WP_Query($meta_b);
foreach($multi_query as $q)
{
    if($q->have_posts()) : while($q->have_posts()) : $q->the_post();
        //YOUR POSTS HERE
    endwhile;endif;
    wp_reset_postdata();
}
?>

更新:

如果您绝对必须使用 query_posts(),您可以通过以下方式实现它:

<?php
$meta = array(
    array(
        array ('key' => 'key-type-1',
               'value' => 'something'
              ),
        array ('key' => 'key-type-2',
               'value' => 'something'
              )
    ),
    array (
        array ('key' => 'key-type-3',
               'value' => 'something'
              ),
        array ('key' => 'key-type-4',
               'value' => 'something'
              )
    )
);
foreach($meta as $args)
{
    query_posts(array('meta_query'=>$args));
    if(have_posts()) : while(have_posts()) : the_post();
        //YOUR POSTS HERE
    endwhile;endif;
    wp_reset_query();
}
?>
于 2012-09-19T00:26:53.347 回答