Obține termen după meta personalizat și taxonomie
Cum să obții un termen după meta personalizat și taxonomie sau cum să filtrezi tax_query
după term meta în loc de slug
/id
?
function custom_pre_get_posts($query)
{
global $wp_query;
// Verifică dacă nu suntem în admin, suntem pe pagina shop și este query-ul principal pentru arhiva de produse
if ( !is_admin() && is_shop() && $query->is_main_query() && is_post_type_archive( "product" ))
{
$term = ???get_term_by_meta_and_taxonomy???('custom_meta_term','my_taxonomy');
$t_id = $term['term_id'];
$tax_query = array
(
array
(
'taxonomy' => 'my_taxoomy',
'field' => 'id',
'terms' => $t_id
)
);
$query->set( 'tax_query', $tax_query );
}
}
add_action( 'pre_get_posts', 'custom_pre_get_posts' );

Încearcă asta:
$args = array(
'hide_empty' => false, // preia și termenii care nu sunt încă folosiți
'meta_query' => array(
array(
'key' => 'feature-group',
'value' => 'kitchen',
'compare' => 'LIKE'
)
),
'taxonomy' => 'category',
);
$terms = get_terms( $args );

Acesta ar trebui să fie răspunsul acceptat, deoarece reprezintă cea mai bună practică pentru acest caz.

De acord, am confirmat și acest lucru permite obținerea unui termen folosind o cheie și o valoare de meta termen. Asigurați-vă că hide_empty este setat pe false dacă termenul vostru nu are încă articole asociate.

Bazându-ne pe răspunsul de la ilgıt-yıldırım de mai sus, atât instrucțiunea get_term_meta
cât și $key == 'meta_value'
trebuie să conțină $term>term_id
.
Iată un exemplu complet care include cererea personalizată $wp_query
:
$term_args = array( 'taxonomy' => 'taxonomia-ta' );
$terms = get_terms( $term_args );
$term_ids = array();
foreach( $terms as $term ) {
$key = get_term_meta( $term->term_id, 'cheie-meta-term', true );
if( $key == 'valoare-meta-term' ) {
// adaugă ID-ul în array
$term_ids[] = $term->term_id;
}
}
// Argumente pentru buclă
$args = array(
'post_type' => 'postări',
'tax_query' => array(
array(
'taxonomy' => 'taxonomia-ta',
'terms' => $term_ids,
),
),
);
// Interogarea
$featured = new WP_Query( $args );

Va trebui să parcurgeți fiecare dintre termenii din condiționalul principal al interogării. Având în vedere că probabil vor exista mai mulți termeni cu date personalizate, va trebui să transmiteți un array de ID-uri în interogarea taxonomiei.
De exemplu, parcurgerea fiecărui termen pentru a verifica meta datele personalizate:
$term_args = array(
'taxonomy' => $taxonomy_name,
);
$terms = get_terms( $term_args );
$term_ids = array();
foreach( $terms as $term ) {
$key = get_term_meta( $term->ID, 'meta_key', true );
if( $key == 'meta_value' ) {
// adaugă ID-ul în array
$term_ids[] = $term->ID;
}
}
La final veți avea variabila $term_ids care conține un array cu ID-urile termenilor căutate. Puteți transmite acest array către interogarea taxonomiei.

get_term_meta( $term->ID, 'meta_key', true );
ar trebui să fie get_term_meta( $term->term_id, 'meta_key', true );
deoarece $term
este un obiect WP_Term
.
