Utilizarea get_terms() cu parametri meta_query
Î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ă?

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

Î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ă.

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
