Cómo usar meta_query para verificar si un campo meta tiene algún valor establecido

16 dic 2015, 23:12:28
Vistas: 19.4K
Votos: 3

(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)

1
Comentarios

Además, actualizar WP a la última versión siempre es una buena idea desde el punto de vista de seguridad (especialmente si otras personas lo han probado y demostrado que es seguro y no rompe los sitios o plugins de todos).

N00b N00b
17 dic 2015 01:47:35
Todas las respuestas a la pregunta 4
0

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.

17 dic 2015 02:25:08
0

Esto podría ayudar a alguien. Buscará el valor meta, si existe y no está vacío.

'meta_query' => [
    'relation' => 'AND',
    [
        'key'     => 'your_key',
        'compare' => 'EXISTS',
    ],
    // No se quieren valores vacíos
    [
        'key'     => 'your_key',
        'value'   => '',
        'compare' => '!=',
    ],
],
29 jun 2020 14:26:08
2

¿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

16 dic 2015 23:33:49
Comentarios

Correcto... me lo perdí en un intento anterior de detectar el campo de fecha. Quizás 'type' no sea necesario de todos modos... Probé EXISTS y no hubo suerte...

AJD AJD
16 dic 2015 23:58:07

Sí, puede que no sea necesario en absoluto

s_ha_dum s_ha_dum
17 dic 2015 00:02:38
0

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.

4 dic 2021 14:11:02