Cómo usar meta_query para verificar si un campo meta tiene algún valor establecido
(WordPress 4.3.1)
Estoy ejecutando un loop personalizado y solo quiero incluir posts que tengan un archivo subido en un campo personalizado: audio_file.
He probado muchas soluciones en la web y hasta ahora nada funciona.
¿Puedo usar meta_query para verificar si una clave tiene un valor?
Aquí está mi intento actual:
global $post;
$args = array(
'post_type' => array (
'podcast',
'event',
),
'posts_per_page' => 10,
'post_status' => 'publish',
'paged' => get_query_var( 'paged' ),
'meta_query' => array (
'key' => 'audio_file',
'value' => '' ,
'compare' => '!=',
//'type' => 'date',
),
);
global $wp_query;
$wp_query = new WP_Query( $args );
if ( have_posts() ) { while ( have_posts() ) { the_post();
El resultado esperado aquí es mostrar posts donde 'audio_file' no esté vacío.
Gracias. (WordPress 4.3.1)

Lo resolví, meta_query debe ser un array dentro de otro array ya que está diseñado para consultas avanzadas usando 'relation'.
meta_query => array (
array (
//'relation' => 'OR',
'key' => 'audio_file', // El campo a verificar.
'value' => '', // El valor del campo.
'compare' => '!=', // Condicional utilizado en el valor.
),
),
El condicional '!=' (no igual a) '' (vacío) devuelve verdadero si se ha subido un archivo.

¿Puedo usar meta_query para verificar si una clave tiene un valor?
¿Cualquier valor? Usa EXISTS
'meta_query' => array (
'key' => 'audio_file',
'value' => '' ,
'compare' => 'EXISTS',
'type' => 'date',
),
);
No sé por qué tu archivo subido sería de tipo date
. Esperaría que fuera binary
o tal vez char

Parece que el tipo de valor es esencial ahora. No pude hacer que la consulta de metadatos funcionara correctamente sin usar el tipo. Especialmente al verificar la existencia del valor.
Este código ya no funciona.
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'meta_key',
'value' => '',
'compare' => '!=',
),
),
Este sí funciona.
'meta_query' => array(
'relation' => 'AND',
array(
'key' => 'meta_key',
'value' => '',
'compare' => '!=',
'type' => 'NUMERIC'
),
),
La única diferencia es el tipo.
