Ottenere lo slug del termine del post corrente

23 gen 2014, 18:17:42
Visualizzazioni: 66.9K
Voti: 7

Sto lavorando su un template per un tipo di post personalizzato dove mostro un menu di navigazione con link a tutti i post dello stesso termine.

Ora voglio utilizzare questo template per tutti i diversi termini quindi $term_slug deve contenere lo slug del termine del post corrente in modo che possano corrispondere agli altri post.

Ho trovato molte volte su internet questo codice per svolgere il lavoro ma non funziona per me:

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

Questo articolo dice che questo dovrebbe funzionare: http://www.wpbeginner.com/wp-themes/how-to-show-the-current-taxonomy-title-url-and-more-in-wordpress/

Cosa sto facendo di sbagliato?

$args = array(
    'post_type'     => 'myposttype', // tipo di post personalizzato
    'mytaxonomy'    => $term_slug,   // tassonomia
    'order'         => 'ASC'         // ordinamento ascendente
);              

$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
Tutte le risposte alla domanda 3
3
21

Il tuo codice funziona su una pagina dove viene interrogato un termine (un archivio di termini di tassonomia), non su un singolo articolo.

Per un singolo articolo, devi recuperare i termini appartenenti a quell'articolo.

$terms = get_the_terms( $post->ID, 'your-taxonomy' );
if ( !empty( $terms ) ){
    // ottieni il primo termine
    $term = array_shift( $terms );
    echo $term->slug;
}
23 gen 2014 18:28:53
Commenti

Grazie! Non capisco esattamente cosa stai facendo ma funziona.

Robbert Robbert
24 gen 2014 11:35:27

Soluzione fantastica! Ho provato a usare la documentazione per ottenere tutti i termini ma niente da fare. Conosci un modo per farlo? http://codex.wordpress.org/Function_Reference/get_term

GuiHarrison GuiHarrison
2 mar 2015 05:31:55

@GuiHarrison Secondo me allora dovresti evitare array_shift() e fare un loop attraverso l'array $term.

Robbert Robbert
6 mag 2015 13:24:31
0

Il codice seguente funziona bene se ci sono più termini da mostrare.:-

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

Non hai bisogno di un ciclo for.

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

$slugs sarà un array di slug di your-taxonomy assegnati al post con $post_id

Fonti:

25 nov 2020 19:14:36