Probleme cu meta_key și meta_value în WordPress

26 iul. 2016, 23:32:53
Vizualizări: 15.4K
Voturi: 2

Încerc să filtrez loop-ul pentru a găsi postări care au un meta_key cu o anumită valoare meta_value. Am verificat Codex-ul și am încercat următoarele fără succes:

// Nu returnează rezultate
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* Am încercat și așa
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

// Nu returnează rezultate
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_key' => 'priority',
    'meta_value' => 80
);

// Afișează toate cqpp_interventions și confirm că unele au meta_value setat la 80
$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_key' => 'priority'
);

$cqpp_posts = get_posts( $args );

Iată cum verific în interiorul loop-ului:

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

care returnează:

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)

Ce pot face pentru a rezolva această problemă?

0
Toate răspunsurile la întrebare 2
0

Ai putea încerca acest lucru:

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

Problema reală cu interogarea ta este pentru că folosești meta_key și meta_value. Totuși, array-urile din argumentul meta_query ar trebui să aibă cheile key și value în schimb.

Acest lucru ar funcționa de asemenea:

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

Din referința primului tău $args

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            'relation' => 'OR',
            array(
                'meta_key' => 'priority',
                /* Am încercat și asta
                'meta_value' => '80',
                'compare' => '='
                */
                'meta_value' => array('80'),
                'compare' => 'IN' )
    )
);

Ai adăugat 'relation' => 'OR', care nu este necesar. Parametrul relation trebuie adăugat doar dacă ai mai multe meta-valori de interogat. De asemenea, compare nu este necesar dacă vrei o valoare specifică, deoarece implicit folosește =.

Variabila $args actualizată va fi

$args = array(
    'post_type' => 'cqpp_interventions',
    'posts_per_page' => '-1',
    'meta_query' => array(
            array(
                'meta_key' => 'priority',
                'meta_value' => '80', // deoarece 80 este string
             )
    )
);

// încearcă oricare dintre următoarele.
$myPost = new WP_Query( $args ); // preia postările și le gestionează ca obiecte
$myPost = get_posts( $args ); // preia postările și le stochează într-un array

Sper că acest lucru te va ajuta.

Mulțumesc

26 iul. 2016 23:41:57
Comentarii

În meta_query folosești 'key' => și 'value' =>, nu folosi 'meta_key' => și 'meta_value' => cum a răspuns Chin Leung

Jignesh Patel Jignesh Patel
4 dec. 2017 05:59:32