meta_key y meta_value no funcionan juntos
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?

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

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
