Recuperare lo slug di un singolo termine
Sto creando una "Pagina Tag Singolo" comune per diversi Tipi di Post.
Sto utilizzando questo codice:
$loop = new WP_Query( array( 'post_type' => 'any', 'tag' => single_term_title( '', false ), 'posts_per_page' => 10 ) );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="entry-content">
<?php the_excerpt(); ?>
</div><!-- .entry-content -->
<?php endwhile; // Fine del loop. ?>
Funziona bene finché non ci sono conflitti tra i termini della tassonomia.
Ad esempio:
Se ho una Categoria e un Tag con lo stesso nome - "Video", la Categoria avrà lo slug - "/video" e il Tag "/video-2".
Quando lo slug non corrisponde al nome della tassonomia, il codice sopra non funziona.
Ho bisogno di una funzione alternativa a single_term_title(), qualcosa come "single_term_slug()".
Qualche idea?
P.S. Ho pensato alla funzione "get_term_by()", ma non sono riuscito ad adattarla al codice sopra.
Aggiornamento: Ho pubblicato il mio codice qui sotto.
Grazie ragazzi per una risposta così rapida. Molto apprezzato!
Ecco il codice per la pagina "globale" dei Tag (che mostra i termini della tassonomia predefinita 'post_tag'):
<?php
$term_slug = get_queried_object()->slug;
if ( !$term_slug )
return;
else
$loop = new WP_Query( array( 'post_type' => 'any', 'tag' => $term_slug, 'posts_per_page' => 10 ) );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="entry-content">
<?php the_excerpt(); ?>
</div><!-- .entry-content -->
<?php endwhile; // Fine del loop. ?>
E il prossimo esempio di codice è per una query di tassonomia personalizzata (che mostra i termini di una tassonomia personalizzata):
<?php
//http://codex.wordpress.org/Function_Reference/WP_Query#Taxonomy_Parameters
$term_slug = get_queried_object()->slug;
if ( !$term_slug )
return;
else
$args = array(
'tax_query' => array(
array(
'taxonomy' => 'gallery_category',
'field' => 'slug',
'terms' => $term_slug,
'posts_per_page' => 10
)
)
);
$loop = new WP_Query( $args );
while ( $loop->have_posts() ) : $loop->the_post(); ?>
<div class="entry-content">
<?php the_excerpt(); ?>
</div><!-- .entry-content -->
<?php endwhile; // Fine del loop. ?>

È questa la tua risposta alla tua domanda, o una parte successiva della tua domanda?

Questo mi sembra una risposta nel contesto della domanda originale, quindi respingo il flag su di essa.

@MikeSchinkel - Questa è la mia risposta. Ho pubblicato l'intero codice della soluzione.
1 è per visualizzare i termini della tassonomia predefinita 'post_tag', che viene utilizzata nei tipi di post personalizzati.
2 è per visualizzare i termini della tassonomia personalizzata.

C'è un riferimento al termine oggetto in $wp_query
, e una funzione abbreviata per ottenerlo (a condizione che tu stia utilizzando WordPress 3.1 o successivo): get_queried_object()
.
Quindi, per ottenere lo slug dovresti fare echo get_queried_object()->slug;
Se non stai utilizzando WordPress 3.1, dovrai chiamare la funzione get_queried_object()
sul global $wp_query
:
global $wp_query;
echo $wp_query->get_queried_object()->slug;

Ecco una funzione derivata single_term_slug()
da single_term_title()
function single_term_slug( $prefix = '', $display = true ) {
$term = get_queried_object();
if ( !$term )
return;
if ( is_category() )
$term_slug = apply_filters( 'single_cat_slug', $term->slug );
elseif ( is_tag() )
$term_slug = apply_filters( 'single_tag_slug', $term->slug );
elseif ( is_tax() )
$term_slug = apply_filters( 'single_term_slug', $term->slug );
else
return;
if ( empty( $term_slug ) )
return;
if ( $display )
echo $prefix . $term_slug;
else
return $term_slug;
}
