Recuperare lo slug di un singolo termine

4 apr 2011, 15:17:37
Visualizzazioni: 16.2K
Voti: 3

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.

0
Tutte le risposte alla domanda 3
3

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. ?> 
4 apr 2011 21:01:07
Commenti

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

MikeSchinkel MikeSchinkel
5 apr 2011 08:27:51

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

Rarst Rarst
5 apr 2011 18:10:26

@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.

Andrew Andrew
6 apr 2011 14:01:37
0

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;

4 apr 2011 15:55:13
0

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;
}
4 apr 2011 16:00:42