Risolvere problemi con meta_key e meta_value in WordPress
Sto cercando di filtrare il loop per trovare i post che hanno una meta_key
con un specifico meta_value
. Ho consultato il Codex e ho provato quanto segue senza successo:
// Nessun risultato
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
'relation' => 'OR',
array(
'meta_key' => 'priority',
/* Ho provato anche questo
'meta_value' => '80',
'compare' => '='
*/
'meta_value' => array('80'),
'compare' => 'IN' )
)
);
// Nessun risultato
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_key' => 'priority',
'meta_value' => 80
);
// Questo mi elenca tutti i cqpp_interventions e posso confermare che alcuni hanno meta_value impostato a 80
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_key' => 'priority'
);
$cqpp_posts = get_posts( $args );
Ecco come verifico all'interno del loop:
$priority = get_post_meta( get_the_ID(), 'priority');
echo '<pre>';
var_dump($priority);
echo '</pre>';
che restituisce:
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)
Cosa posso fare per risolvere?

Potresti provare questo:
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
array(
'key' => 'priority',
'value' => '80'
)
)
);
Il problema reale con la tua query è che stai passando meta_key
e meta_value
. Tuttavia, gli array nell'argomento meta_query
dovrebbero avere le chiavi key
e value
invece.
Anche questo funzionerebbe:
'key' => 'priority',
'value' => array('80')

Dalla tua prima referenza di $args
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
'relation' => 'OR',
array(
'meta_key' => 'priority',
/* Ho provato anche questo
'meta_value' => '80',
'compare' => '='
*/
'meta_value' => array('80'),
'compare' => 'IN' )
)
);
Hai aggiunto 'relation' => 'OR'
, che non è necessario. Il parametro relation
va aggiunto solo se hai più meta-valori da interrogare. Inoltre, compare non è necessario se vuoi un valore specifico, poiché di default usa =
.
Gli $args aggiornati saranno
$args = array(
'post_type' => 'cqpp_interventions',
'posts_per_page' => '-1',
'meta_query' => array(
array(
'meta_key' => 'priority',
'meta_value' => '80', // dato che 80 è una stringa
)
)
);
// prova uno dei seguenti.
$myPost = new WP_Query( $args ); // recupera i post e li gestisce come oggetti
$myPost = get_posts( $args ); // recupera i post e li memorizza in un array
Spero che questo ti sia d'aiuto.
Grazie
