meta_key y meta_value no funcionan juntos

26 jul 2016, 23:32:53
Vistas: 15.4K
Votos: 2

Estoy intentando filtrar el loop para encontrar posts que tengan un meta_key con un meta_value específico. He revisado el Codex y probé lo siguiente sin éxito:

// Sin resultados
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* También probé esto
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

// Sin resultados
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_key' => 'priority',
    'meta_value' => 80
);

// Esto me lista todos los cqpp_interventions y puedo confirmar que hay algunos con meta_value establecido en 80
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_key' => 'priority'
);

$cqpp_posts = get_posts( $args );

Así es como verifico dentro del loop:

$priority = get_post_meta( get_the_ID(), 'priority');
echo '<pre>';
var_dump($priority);
echo '</pre>';

lo cual resulta en:

search.php:16:
array (size=1)
    0 => 
        array (size=1)
            0 => string '80' (length=2)

search.php:16:
array (size=1)
    0 => 
        array (size=2)
        0 => string '80' (length=2)
        1 => string '91' (length=2)

¿Qué puedo hacer para solucionar esto?

0
Todas las respuestas a la pregunta 2
0

Podrías probar esto:

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
        array(
            'key' => 'priority',
            'value' => '80'
        )
    )
);

El problema real con tu consulta es porque estás pasando meta_key y meta_value. Sin embargo, los arrays en tu argumento meta_query deberían tener las claves key y value en su lugar.

Esto también funcionaría:

'key' => 'priority',
'value' => array('80')
18 jul 2017 21:16:14
1

Desde la referencia de tu primer array $args

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* También probé esto
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

Has añadido 'relation' => 'OR', lo cual no es necesario. El parámetro relation solo se necesita si tienes múltiples meta-valores para consultar. Además, el parámetro compare no es necesario si quieres un valor específico, ya que por defecto usa =.

El array $args actualizado sería

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            array(
                'meta_key' => 'priority',
                'meta_value' => '80', // ya que 80 es un string
             )
    )
);

// prueba cualquiera de las siguientes opciones.
$myPost = new WP_Query( $args ); // obtiene posts y los gestiona como objetos
$myPost = get_posts( $args ); // obtiene posts y los almacena en un array

Espero que esto te ayude.

Gracias

26 jul 2016 23:41:57
Comentarios

En meta_query usas 'key' => y 'value' =>, no usas 'meta_key' => ni 'meta_value' => como en la respuesta de Chin Leung

Jignesh Patel Jignesh Patel
4 dic 2017 05:59:32