Database 如何在Wordpress中编写高级查询参数

Database 如何在Wordpress中编写高级查询参数,database,wordpress,arguments,posts,Database,Wordpress,Arguments,Posts,提前谢谢你的帮助。我正在尝试为Wordpress编写一个query\u posts语句,其中: $args = 'meta_query' => array ( array ( array ('key' => 'key-type-1', 'value' => 'something' ), array ('key' => 'key-type-2',

提前谢谢你的帮助。我正在尝试为Wordpress编写一个query\u 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和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和key-type-2的值,存在key-type-3和key-type-4的值。。。这是不好的

也许每个子数组中都有一个“比较”值?或者我不得不使用多个查询帖子,并将显示的多个输出组合起来?如果有人有什么见解的话,那真的会帮我的


谢谢

首先,除非您打算修改默认的Wordpress循环,否则不要使用查询帖子。它可以修改各种各样的Globals,很混乱,而且速度很慢。请考虑将所有QueRelsPoST调用更改为./P> 关于这场辩论,有相当多的文档,几乎所有人都得出结论,WP_查询是一条出路

至于你想做什么,有几种方法可以做到这一点。我想到了一个标准的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();
}
?>


我将测试并报告。我的网站基于MapPress Pro,作者倾向于引导人们使用查询页面,因为默认情况下,它会基于全局创建mashup地图,而不受WP页面查询的影响。这就是说,似乎有一种更具体的方法来集成maps插件以使用WP_查询,如果我能让它工作起来,我会很高兴地转向更受欢迎的方式与我的db交互。但是,如果我不能做到这一点,你知道我们在这里讨论的查询帖子有什么方法吗?或者答案是它不能用它来完成?我为你添加了一个更新,以防查询帖子不可避免。希望这有帮助,祝你好运。首先,非常感谢你的投入。很遗憾,您使用query_posts添加的更新没有产生任何结果。语法看起来很棒,所以我会继续玩下去。谢谢