从自定义元查询获取帖子

时间:2017-10-19 作者:katart

我想使用get_posts() 函数,使查询正常工作时遇到问题。这个$country, $us_state, $ca_state, $mx_state 将从重力表单条目中提取值。

以下是查询:

$post_type = \'reps\';
$state_meta_key = \'rep_state\';
$country_meta_key = \'rep_country\';

$country = \'Mexico\';
$us_state = \'\';
$ca_state = \'\';
$mx_state = \'\';

$reps = get_posts( 
    array(
        \'posts_per_page\' => -1,
        \'post_type\' => $post_type,
        \'meta_query\' => array(

            array(
                \'key\' => $country_meta_key,
                \'value\' => $country,
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\' => $state_meta_key,
                \'value\' => $us_state,
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\' => $state_meta_key,
                \'value\' => $ca_state,
                \'compare\' => \'LIKE\'
            ),
            array(
                \'key\' => $state_meta_key,
                \'value\' => $mx_state,
                \'compare\' => \'LIKE\'
            )

        )
    )
);
通过这个查询,我将得到一个积极的结果,因为有一篇文章包含$country_meta_key$state_meta_key, 但如果我改变$country 对爱尔兰来说,我不会有结果。

这是因为该职位的爱尔兰价值$country_meta_key 没有的值$state_meta_key.

所有带有$state_meta_key 值将自动具有$country_meta_key 值,因为在选择状态值之前必须存在国家值。但并非所有帖子都会有$state_meta_key 值(帖子可以有国家/地区值,并将状态值保留为空)。

以下是两篇文章的示例:

Post 1
rep\\u country=墨西哥
rep\\u state=墨西哥-Estado de

Post 2
rep\\u country=爱尔兰
rep\\u state=

更新1当状态值为空时,以下代码可以给出一个结果,但(显然)此代码不允许按状态值查询任何帖子:

array(
        \'key\' => $country_meta_key,
        \'value\' => $country,
        \'compare\' => \'LIKE\'
    ),
    array(
        \'key\' => $state_meta_key,
        \'compare\' => \'NOT EXISTS\'
    )
每当我使用OR关系时,就会打开对该帖子类型中所有帖子的查询(不够具体)。

我如何按国家/地区值(如果帖子没有国家/地区值)或按国家/地区值(如果帖子总是有国家/地区值)查询帖子?

2 个回复
SO网友:Bridget Arrington

在元查询中添加“relation”=>“或”,我想应该是这样的。。。

\'meta_query\' =>  array(
   \'relation\' => \'AND\', // Optional, defaults to "AND"
   array(
        \'key\' => $country_meta_key,
        \'value\' => $country,
        \'compare\' => \'LIKE\'
   ),
array(
    \'relation\' => \'OR\',
     array(
            \'key\' => $state_meta_key,
            \'value\' => $us_state,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\' => $state_meta_key,
            \'value\' => $ca_state,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\' => $state_meta_key,
            \'value\' => $mx_state,
            \'compare\' => \'LIKE\'
        )
)
); 

https://codex.wordpress.org/Class_Reference/WP_Meta_Query

SO网友:katart

我想出了解决办法。代码如下:

\'meta_query\' => array(

    \'relation\' => \'OR\',
    array(
        array(
            \'key\' => $country_meta_key,
            \'value\' => $country,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\' => $state_meta_key,
            \'compare\' => \'NOT EXISTS\'
        )
    ),
    array(
        array(
            \'key\' => $state_meta_key,
            \'value\' => $us_state,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\' => $state_meta_key,
            \'value\' => $ca_state,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\' => $state_meta_key,
            \'value\' => $mx_state,
            \'compare\' => \'LIKE\'
        ),
        array(
            \'key\' => $country_meta_key,
            \'value\' => $country,
            \'compare\' => \'LIKE\'
        )
    )

)
这将查询具有国家/地区值但不存在国家/地区值的帖子,或查询具有国家/地区值和国家/地区值的帖子。

结束

相关推荐