query_posts() en el valor de una clave, o en la existencia de la clave
Recientemente comencé a usar campos simples en un proyecto para diferenciar entre tipos de posts. Todos los posts a partir de ahora tendrán uno de cuatro posibles valores meta asociados con esto (Historia, Artículo, Video o Caricatura). Ninguno de estos tipos de posts tiene atributos o valores únicos, así que he decidido no usar tipos de posts personalizados esta vez.
Sé cómo consultar posts con un cierto valor meta, pero esto solo funciona en posts que ya tienen esa meta clave asociada con ellos - no para posts que fueron creados antes de que el plugin de campos simples fuera instalado y puesto en uso. Me pregunto cómo consultaría todos los posts que carecen de la meta clave "fizzbuzz" o tienen la clave pero está asociada con un valor de "foobar".
¿Hay alguna manera de consultar todos los posts que carecen de una clave por completo?

Esto te dará todo lo que no tenga la meta clave fizzbizz. La parte del bucle personalizado la tomé directamente del codex.
$pageposts = $wpdb->get_results("
SELECT * FROM wp_posts p
LEFT JOIN wp_postmeta m
ON p.ID = m.post_id
WHERE m.meta_key <> 'fizzbizz'
OR m.metakey IS NULL
ORDER BY p.post_date DESC;
");
if ($pageposts):
global $post;
foreach ($pageposts as $post):
setup_postdata($post);
// ahora estás en el bucle, usa the_title() o lo que necesites
Esto obtendrá todo donde exista la clave, pero el valor sea 'foobar'
$pageposts = $wpdb->get_results("
SELECT * FROM wp_posts p
JOIN wp_postmeta m
ON p.ID = m.post_id
WHERE m.meta_key = 'fizzbizz'
AND m.meta_value = 'foobar'
ORDER BY p.post_date DESC;
");
Y ese último es complicado, no estoy muy seguro de ese...
Edición
Corregida la primera consulta gracias a esta pregunta.

La segunda consulta debería funcionar, pero puedes hacer lo mismo mejor usando las funciones de la API de WP. La primera consulta no me parece que funcione. Parece que solo obtendrá publicaciones que tengan claves meta establecidas (porque de lo contrario, no estarían incluidas en el JOIN).

@golden Buen punto sobre la primera. Supongo que para escribir esa correctamente, primero necesitaría haber una forma de consultar publicaciones que carezcan de cualquier clave. ¿Tienes alguna idea sobre esa?

¡Genial! Nunca entendí el LEFT JOIN
, así que no tenía idea de cómo hacer eso (y créeme, ¡lo he necesitado!) Ahora lo único que queda es averiguar cómo usar esa sintaxis dentro de los métodos de la API de WP. Es decir, la segunda consulta podría escribirse simplemente como get_posts('meta_key=fizzbizz&meta_value=foobar');
Creo que consultar por la ausencia de una meta clave requiere filtros especiales en 'posts_join' y 'posts_where'... ¿alguien tiene una solución simple?
