Как запросить записи с пустыми мета-значениями в 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' — для строк... Спасибо.

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