Utilizarea get_terms() cu parametri meta_query

2 iul. 2016, 13:35:56
Vizualizări: 34.8K
Voturi: 2

Încerc să construiesc o interogare pentru taxonomie care să afișeze doar termenii ce au o anumită valoare a câmpului personalizat atribuită. Câmpul personalizat conține o valoare booleană, așa că am încercat:

$args = array(
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
        'meta_key' => 'featured',
        'meta_value' => true
    );

De asemenea:

$args = array(
        'taxonomy' => 'product_cat',
        'hide_empty' => false,
        'meta_query' => array(
             array(
                'key'       => 'featured',
                'value'     => true,
                'compare'   => '='
             )
        )
    );

Niciuna dintre aceste variante nu a returnat rezultatele așteptate. Ce îmi scapă?

0
Toate răspunsurile la întrebare 1
5
12

Inserarea valorilor booleene în meta termeni

Atunci când adăugăm meta termeni inexistenți cu, de exemplu:

add_term_meta( 123, 'test', true );

de fapt executăm următoarea inserare:

$wpdb->insert( 'wp_termmeta', array(
   'term_id' => 123,
   'meta_key' => 'test',
   'meta_value' => true
) );

în cadrul funcției generale add_metadata().

Funcția wpdb::insert() este de fapt un wrapper pentru wpdb::_insert_replace_helper() care pregătește interogarea SQL de inserare și mapează valorile de inserat la:

INSERT INTO `wp_termmeta` (`term_id`, `meta_key`, `meta_value`) VALUES (%d, %s, %s)

sau în cazul nostru de test:

INSERT INTO `wp_termmeta` (`term_id`, `meta_key`, `meta_value`) VALUES (123, 'test', '1')

De asemenea, rețineți că coloana meta_value este de tip longtext în tabelul wp_termmeta.

Astfel, valoarea booleană true este stocată ca șirul '1'.

Preluarea valorilor booleene din meta termeni

Când funcția get_terms() rulează cu un astfel de meta query:

$args = array(
    'taxonomy'   => 'product_cat',
    'hide_empty' => false,
    'meta_query' => array(
         array(
            'key'       => 'featured',
            'value'     => true,
            'compare'   => '='
         )
    )
);

atunci interogarea SQL generată conține:

wp_termmeta.meta_key = 'featured' AND wp_termmeta.meta_value = '1' 

unde true (boolean) este convertit în '1' (șir).

2 iul. 2016 18:35:41
Comentarii

Încă nu reușesc să obțin niciun rezultat din interogare, folosind un șir "1" ca valoare transmisă meta_query-ului, dar voi continua să caut. Mulțumesc mult pentru explicația detaliată.

Luis Martins Luis Martins
4 iul. 2016 22:07:12

Valoarea meta true din interogarea get_terms() este de asemenea schimbată în '1', așa că cred că trebuie să salvați valorile meta ale termenilor diferit. Cum le stocați? Ce fel de cod? Poate le stocați ca șir boolean 'true'? @LuisMartins

birgire birgire
5 iul. 2016 12:17:44

Ai făcut vreun progres în legătură cu problema? @LuisMartins

birgire birgire
23 iul. 2016 16:11:46

Îmi pare rău, am ratat complet notificările de pe SO.

Luis Martins Luis Martins
13 aug. 2016 16:04:54

Nicio problemă, eram doar curios despre asta ;-) @LuisMartins

birgire birgire
13 aug. 2016 16:07:24