Risolvere problemi con meta_key e meta_value in WordPress

26 lug 2016, 23:32:53
Visualizzazioni: 15.4K
Voti: 2

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?

0
Tutte le risposte alla domanda 2
0

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')
18 lug 2017 21:16:14
1

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

26 lug 2016 23:41:57
Commenti

In meta_query si utilizza 'key' => e 'value' => non si usa 'meta_key' => e 'meta_value' => come nella risposta di Chin Leung

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