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

Уже пробовал:
$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
)
)
);
Но это не работает...
Есть идеи как решить эту проблему?
Спасибо
Думаю, вы забыли про статус записи inherit. По умолчанию в WP_Query используется статус publish.
Также следует использовать оператор = вместо LIKE, чтобы избежать использования LIKE '%%' в SQL-запросе.
Попробуйте добавить это:
'post_status' => 'inherit'
и
'compare' => '='
в аргументы вашего запроса, чтобы находить пустые значения метаполя _wp_attachment_image_alt.
Да, я забыл про post_status, и теперь это работает с '='. В чем разница между '=' и 'LIKE'? Я думал, что '=' используется для чисел, а 'LIKE' — для строк... Спасибо.
Avishay
Если вы используете LIKE в meta_query WP_Query для значения, например, 'test', то сгенерированный SQL-запрос будет содержать LIKE '%test%', где % — это подстановочный знак. Так что в вашем случае было LIKE '%%', что возвращает все значения. Обратите внимание, что столбец meta_value имеет тип longtext, поэтому любые числа там хранятся как строки. @Avishay
birgire