Consultar todos los posts donde el valor meta esté vacío

5 oct 2016, 12:02:11
Vistas: 14.2K
Votos: 5

Quiero consultar posts donde el valor meta esté vacío. Por ejemplo, quiero obtener estos tres posts, sin valores meta: ejemplo de posts con meta vacío

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

0
Todas las respuestas a la pregunta 2
2

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.

5 oct 2016 12:17:35
Comentarios

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.

Avishay Avishay
5 oct 2016 13:00:32

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

birgire birgire
5 oct 2016 13:14:25
1
-1
'meta_query' => array(
    array(
     'key' => '_wp_attachment_image_alt',
     'compare' => 'NOT EXISTS' // esto debería funcionar...
    ),
)
5 oct 2016 12:20:21
Comentarios

No funciona, ya que la clave existe..

Avishay Avishay
5 oct 2016 12:56:46