WP_Query с мета-запросом, где значение meta_value не является уникальным - PullRequest
0 голосов
/ 06 ноября 2018

У меня есть 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, поэтому все еще выбирает все сообщения.

...