我有一个CPT,我要在其中添加post meta,并将unique标志设置为false。因此,在postmeta表中,我将3条记录分配给同一条帖子,具有相同的meta_key但具有不同的meta_value,如下所示:
| post_id | meta_key | meta_value |
|:-----------|---------------:|:------------:|
| 1 |exclude_user_id | 1 |
| 1 |exclude_user_id | 2 |
| 1 |exclude_user_id | 3 |
我想进行WP_Query以确保仅获取current_user_id()
不在meta_value之一中的帖子。因此,ID为3的用户将看不到ID为1的帖子。
我知道我可以使用自定义MySQL语句来执行此操作,或者获取所有帖子,并在循环时为每个帖子获取postmeta。但是我想知道是否可以直接使用WP_Query
来做到这一点。目前,我的WP_Query
如下,即使我以ID 3的用户身份登录,它也会返回ID 1的帖子。
$posts = new WP_Query([
'post_type' => 'post',
'post_status' => 'publish',
'order' => 'DESC',
'orderby' => 'DATE',
'meta_query' => [
[
'key' => 'exclude_user_id',
'compare' => 'NOT IN',
'value' => get_current_user_id()
]
]
]);
在compare属性设置为NOT IN
的情况下,它仍在获取meta_value为1或2的postmeta表中的其他行,因此仍会获取所有帖子。