Consultar todos los posts donde el valor meta esté vacío
Quiero consultar posts donde el valor meta esté vacío. Por ejemplo, quiero obtener estos tres posts, sin valores meta:
Ya intenté:
$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);
y también:
$args = array(
'post_type' => 'attachment',
'posts_per_page' => 10,
'paged' => $paged,
'meta_query' => array(
array(
'key' => '_wp_attachment_image_alt',
'value' => null,
'compare' => 'LIKE'
)
)
);
Pero no funciona...
¿Alguna idea de cómo solucionarlo?
Gracias

Creo que olvidaste el estado de publicación inherit. El predeterminado en WP_Query
es publish.
También deberías usar =
en lugar de LIKE
, para evitar usar LIKE '%%'
en la consulta SQL.
Intenta agregar esto:
'post_status' => 'inherit'
y
'compare' => '='
en los argumentos de tu consulta, para coincidir con los valores de cadena vacía de _wp_attachment_image_alt
.

Sí, me olvidé del post_status, y ahora funciona con '='. ¿Cuál es la diferencia entre '=' y 'LIKE'? Pensaba que '=' era para enteros y 'LIKE' para cadenas... Gracias.

Si usas LIKE
en la consulta meta de WP_Query
para un valor como 'test'
, entonces la consulta SQL generada contendrá LIKE '%test%'
donde %
es un comodín. Así que en tu caso era LIKE '%%'
, lo que devuelve todos los valores. Ten en cuenta que la columna meta_value es de tipo longtext
, por lo que cualquier número allí se almacena como cadena. @Avishay
