Obține slug-ul termenului pentru articolul curent

23 ian. 2014, 18:17:42
Vizualizări: 66.9K
Voturi: 7

Lucrez pe un șablon pentru un tip de articol personalizat unde afișez un meniu de navigare cu legături către toate articolele din același termen.

Acum vreau să folosesc acest șablon pentru toate termenele diferite, astfel încât $term_slug trebuie să conțină slug-ul termenului articolului curent pentru a putea corespunde cu celelalte articole.

Am găsit de multe ori pe internet acest cod pentru a face treaba, dar nu funcționează pentru mine:

$terms = get_term_by( 'slug', get_query_var( 'term' ), get_query_var( 'taxonomy' ) );
$term_slug = $term->slug;

Acest articol spune că acest cod ar face treaba: http://www.wpbeginner.com/wp-themes/how-to-show-the-current-taxonomy-title-url-and-more-in-wordpress/

Ce fac greșit?

$args = array(
    'post_type'     => 'myposttype', // tipul meu de postare
    'mytaxonomy'    => $term_slug,   // taxonomia mea
    'order'         => 'ASC'         // ordinea ascendentă
);              

$current_id = get_the_ID();
$the_query = new WP_Query( $args );
if($the_query->have_posts() ) {
    while ($the_query->have_posts()) { $the_query->the_post();

        echo '<li><a' . ($current_id == $post->ID ? ' class="current"' : '') . ' href=" ' . get_permalink() . ' ">' . get_the_title() . '</a></li>'; 

    } 
}
0
Toate răspunsurile la întrebare 3
3
21

Codul tău funcționează pe o pagină unde este interogat un termen (o arhivă de termeni de taxonomie), nu pe un singur articol.

Pentru un singur articol, trebuie să preiei termenii care aparțin acelui articol.

$terms = get_the_terms( $post->ID, 'taxonomia-ta' );
if ( !empty( $terms ) ){
    // preia primul termen
    $term = array_shift( $terms );
    echo $term->slug;
}
23 ian. 2014 18:28:53
Comentarii

Mulțumesc! Nu înțeleg exact ce faci, dar funcționează.

Robbert Robbert
24 ian. 2014 11:35:27

Soluție uimitoare! Am încercat să folosesc documentația pentru a obține toți termenii, dar fără succes. Știi cumva o metodă pentru a face asta? http://codex.wordpress.org/Function_Reference/get_term

GuiHarrison GuiHarrison
2 mar. 2015 05:31:55

@GuiHarrison În opinia mea, atunci ar trebui să renunți la array_shift() și să parcurgi array-ul $term.

Robbert Robbert
6 mai 2015 13:24:31
0

Codul de mai jos funcționează bine dacă există mai mulți termeni de afișat:

echo get_the_term_list( 
    $post->ID, 
    'styles', 
    '<ul class="styles"><li>', 
    ',</li><li>', 
    '</li></ul>' 
); 
31 ian. 2016 11:57:30
0

Nu ai nevoie de o buclă for.

$slugs = wp_get_post_terms($post_id,'your-taxonomy',['fields'=>'slugs']);

$slugs va fi un array cu slug-urile din your-taxonomy care sunt atribuite postului cu $post_id

Sursa:

25 nov. 2020 19:14:36