Estoy tratando de obtener una consulta para recuperar todas las publicaciones donde meta_key
no existe un específico y luego crearlo.
Tengo problemas para encontrar esas publicaciones ya que la consulta que estoy probando no parece funcionar.
Aquí está el código que estoy usando para intentar obtener esas publicaciones:
$args = array(
'posts_per_page' => 18,
'cat'=>1955,
'post_status'=>'publish',
'meta_query' => array(
array(
'key' => 'colors',
'compare' => 'NOT EXISTS'
),
));
query_posts($args);
Esto no devuelve nada si no hay publicaciones con la clave colors
, pero las devuelve ids
de las publicaciones con la clave colors
siempre que esa clave esté presente (lo contrario de lo que necesito). Lo intenté con, EXIST
pero no tuve suerte.
Si alguien me puede aconsejar sobre la forma correcta de crear una consulta como la que necesito, lo agradeceré.
¡Gracias!
custom-post-types
wp-query
post-meta
JordanBel
fuente
fuente
Respuestas:
Hice algunas pruebas más con esto, y honestamente no puedo encontrar una razón por la que no funcionaría (a menos que el código anterior sea solo un fragmento y el código real se ajuste a mis ejemplos a continuación). Sin embargo, descubrí un par de cosas que podrían guiarte en la dirección correcta.
1) Por sí misma, esta metaconsulta es el equivalente de "colors IS NULL", es decir, devolverá las publicaciones que no tienen esa clave establecida en la tabla postmeta. Este es el caso que se muestra arriba, y debería haber funcionado.
2) Antes de WordPress 3.9, establecer el índice de 'relación' a 'O' cambia esta condición. Devuelve lo contrario. No me preguntes por qué. Esto es especialmente importante cuando se realizan múltiples metaconsultas. Eso significa que inicialmente no es posible hacer una consulta para publicaciones que tienen la tecla 'colores' configurada en 'azul' (o lo que sea) o que no están configuradas en absoluto. La consulta a continuación ignorará la primera condición y devolverá solo las que coincidan con la segunda condición.
3) Sin embargo, podemos engañar a WordPress para que use la primera condición si establecemos el 'valor'. No necesita un valor relevante (por lo que sé, se ignora), pero debe establecerse para que la
NOT EXISTS
condición tenga algún efecto.Esto fue cierto hasta WordPress 3.9. Si todavía está utilizando una versión anterior, esta es una solución viable.
fuente
EXISTS
y elNOT EXISTS
"error" que requería que especificaras un valor, se corrigió en WP 3.9Usando una consulta personalizada, esto funcionó para mí:
fuente