Obține termen după meta personalizat și taxonomie

1 iul. 2016, 19:18:44
Vizualizări: 45K
Voturi: 8

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' );
0
Toate răspunsurile la întrebare 3
3
23

Î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 );
5 sept. 2017 13:45:47
Comentarii

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

Jeremy Jeremy
25 apr. 2019 17:39:01

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.

Chris Stage Chris Stage
29 ian. 2020 17:42:49

De asemenea, cred că acesta ar trebui să fie răspunsul acceptat pentru acest caz

Tami Tami
2 aug. 2023 01:48:04
0

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 );
26 oct. 2018 21:51:53
2

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.

2 iul. 2016 08:21:16
Comentarii

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.

Ilgıt Yıldırım Ilgıt Yıldırım
25 aug. 2017 13:11:14

Pentru cei noi veniți, această abordare este foarte ineficientă și ar trebui considerată o ultimă opțiune. Consultați răspunsul cu meta_query deoarece aceasta este soluția mai bună.

Jeremy Jeremy
25 apr. 2019 17:38:22