Как запросить записи с пустыми мета-значениями в WordPress

5 окт. 2016 г., 12:02:11
Просмотры: 14.2K
Голосов: 5

Мне нужно получить записи, где мета-значение пустое. Например, я хочу получить эти три записи без мета-значений: Пример записей с пустыми мета-значениями

Уже пробовал:

$args = array(
    'post_type'   => 'attachment',
    'posts_per_page' => 10,
    'paged'          => $paged,
    'meta_query'  => array(
        array(
            'key' => '_wp_attachment_image_alt', // Ключ мета-поля
            'value' => '',
            'compare' => 'LIKE' // Сравнение с пустой строкой
        )
    )
);
$attachments = new WP_Query($args);

и:

$args = array(
    'post_type'   => 'attachment',
    'posts_per_page' => 10,
    'paged'          => $paged,
    'meta_query'  => array(
        array(
            'key' => '_wp_attachment_image_alt', // Ключ мета-поля
            'value' => null,
            'compare' => 'LIKE' // Сравнение с NULL
        )
    )
);

Но это не работает...

Есть идеи как решить эту проблему?

Спасибо

0
Все ответы на вопрос 2
2

Думаю, вы забыли про статус записи inherit. По умолчанию в WP_Query используется статус publish.

Также следует использовать оператор = вместо LIKE, чтобы избежать использования LIKE '%%' в SQL-запросе.

Попробуйте добавить это:

'post_status' => 'inherit'

и

'compare' => '='

в аргументы вашего запроса, чтобы находить пустые значения метаполя _wp_attachment_image_alt.

5 окт. 2016 г. 12:17:35
Комментарии

Да, я забыл про post_status, и теперь это работает с '='. В чем разница между '=' и 'LIKE'? Я думал, что '=' используется для чисел, а 'LIKE' — для строк... Спасибо.

Avishay Avishay
5 окт. 2016 г. 13:00:32

Если вы используете LIKE в meta_query WP_Query для значения, например, 'test', то сгенерированный SQL-запрос будет содержать LIKE '%test%', где % — это подстановочный знак. Так что в вашем случае было LIKE '%%', что возвращает все значения. Обратите внимание, что столбец meta_value имеет тип longtext, поэтому любые числа там хранятся как строки. @Avishay

birgire birgire
5 окт. 2016 г. 13:14:25
1
-1
'meta_query' => array(
    array(
     'key' => '_wp_attachment_image_alt',
     'compare' => 'NOT EXISTS' // это должно работать...
    ),
)
5 окт. 2016 г. 12:20:21
Комментарии

Это не работает, так как ключ уже существует..

Avishay Avishay
5 окт. 2016 г. 12:56:46