我想使用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关系时,就会打开对该帖子类型中所有帖子的查询(不够具体)。
我如何按国家/地区值(如果帖子没有国家/地区值)或按国家/地区值(如果帖子总是有国家/地区值)查询帖子?
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\'
)
)
)
这将查询具有国家/地区值但不存在国家/地区值的帖子,或查询具有国家/地区值和国家/地区值的帖子。