У меня есть CPT, где я добавляю метаданные поста с уникальным флагом false. Поэтому в таблице postmeta у меня есть 3 записи, назначенные одному и тому же сообщению, с тем же ключом meta_key, но с разными значениями meta_val следующим образом:
| 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. Поэтому пользователь с идентификатором 3 не сможет видеть сообщение с идентификатором 1.
Я знаю, что могу сделать это с помощью пользовательского оператора MySQL или получить все сообщения, и при зацикливании я получаю postmeta для каждого сообщения. Но я хотел бы знать, возможно ли это сделать напрямую с WP_Query
. В настоящее время мой WP_Query
выглядит следующим образом, и он возвращает сообщение с идентификатором 1, даже когда я вошел в систему как пользователь с идентификатором 3:
$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()
]
]
]);
С атрибутом сравнения, установленным как NOT IN
, он все еще выбирает другие строки в таблице postmeta, где значение meta_value равно 1 или 2, поэтому все еще выбирает все сообщения.