wp_get_object_terms() pentru a obține o listă cu toți termenii atașați postărilor din interogarea curentă

26 apr. 2012, 03:52:26
Vizualizări: 17.6K
Voturi: 4

Cum pot folosi wp_get_object_terms() pentru a obține o listă cu toți termenii atașați postărilor din interogarea curentă?

De exemplu, pentru interogarea curentă vreau să obțin un array cu termenii din taxonomia "Alfa" care sunt conținuți în toate postările interogate.

wp_get_object_terms($wp_query, 'alfa');

Dar funcția pare să returneze doar un singur element în array...

Fac asta pentru a construi un array pentru a verifica o taxonomie cu alta pentru un meniu de navigare și în prezent folosesc următorul cod, dar cred că există o metodă mai bună.

Vă rog ajutați-mă! Mulțumesc!

$queried_terms = array();
if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();
    $postid = $post->ID; 

    if( has_term( '', 'alfa', $postid) ) {
        $terms = get_the_terms( $postid, 'alfa' );
        foreach($terms as $term) {
            $queried_terms[] = $term->slug;
        }
    }

endwhile; endif;
rewind_posts();
wp_reset_query();

$queried_terms = array_unique($queried_terms);
5
Comentarii

Transmiți întregul obiect $wp_query către funcție? Presupun că nu este corect.

Rutwick Gangurde Rutwick Gangurde
26 apr. 2012 08:10:27

Presupun că încerc doar să văd dacă codul pe care l-am postat este cea mai rapidă metodă de a obține toate articolele din interogare

HandiworkNYC.com HandiworkNYC.com
26 apr. 2012 19:15:36

Orice mai rapid ar implica o grămadă de SQL personalizat... Ești interesat de asta sau metoda ta actuală este suficientă?

Rarst Rarst
26 apr. 2012 19:57:36

Am nevoie de viteză! Dacă știi cum să faci asta cu un SQL personalizat, aș fi recunoscător pe vecie.

HandiworkNYC.com HandiworkNYC.com
27 apr. 2012 00:57:05

Cred că asta și câteva modificări ar putea funcționa http://wordpress.stackexchange.com/a/50176/7314

Alexey Alexey
30 apr. 2012 11:53:56
Toate răspunsurile la întrebare 2
1

Cred că ești pe drumul cel bun deoarece wp_get_object_terms() poate accepta un array de ID-uri ca prim argument, doar că $wp_query nu este array-ul pe care îl cauți.

Nu pot garanta că aceasta este mai eficientă (nu e domeniul meu de expertiză), dar cred că acest [parțial-testat] fragment ar face ceea ce dorești cu cel puțin un loop mai puțin și fără array_unique():

// obține $wp_query
global $wp_query;
// obține array de obiecte post    
$my_posts = $wp_query -> posts;
// creează array pentru ID-urile postărilor
$my_post_ids = array();
// loop prin array-ul de postări pentru ID-uri
foreach( $my_posts as $my_post ) {
    $my_post_ids[] = $my_post->ID;
}
// obține termenii
$my_terms = wp_get_object_terms( $my_post_ids, 'alfa' );

wp_get_object_terms() acceptă un al 3-lea parametru $args pe care poate fi nevoie să-l setezi pentru a obține output-ul dorit, dar asta îl las pe seama ta.

ACTUALIZARE: Aceasta poate fi chiar mai scurtă folosind funcția nouă pentru mine wp_list_pluck(). Din nou, netestat dar arată corect:

// obține $wp_query
global $wp_query;
// obține array de obiecte post    
$my_posts = $wp_query -> posts;
// NOU: creează array de ID-uri ale postărilor într-un singur pas
$my_post_ids = wp_list_pluck( $my_posts, 'ID' );
// obține termenii
$my_terms = wp_get_object_terms( $my_post_ids, 'alfa' );

Poți vedea în sursă că rulează același cod cu foreach loops, dar arată puțin mai elegant.

4 mai 2012 07:05:18
Comentarii

@j-man86 dacă această soluție ți-a rezolvat problema, te rog să o marchezi ca răspuns acceptat. În caz contrar, actualizează întrebarea ta și explică de ce nu a funcționat.

mrwweb mrwweb
8 mai 2012 22:23:43
1

Această generalizare a funcționat pentru mine:

$args = array( 'cat' = -1 ); // ex: pentru a obține lista de articole din orice categorie
$postobjs = get_posts( $args );
$postids = wp_list_pluck( $postobjs, 'ID' );
$taxonomy = 'mytax' // numele taxonomiei tale
$termobjs = wp_get_object_terms( $postids, $taxonomy );
$termlist = array_unique( wp_list_pluck( $termobjs, 'name' ) ); // nume de termeni unici

Returnează o listă unică de termeni din taxonomia personalizată 'mytax'. Mulțumesc @mrwweb :-)

17 nov. 2012 03:49:10
Comentarii

ai vreo idee de ce acest lucru nu ar funcționa pentru woocommerce și pa_color?

Samyer Samyer
25 apr. 2017 18:40:54