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ă.
Luis Martins
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