Recuperar lesma de termo único

2

Estou criando uma "Página de tag única" comum para diferentes tipos de postagem.
Estou usando o próximo código:

$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; // End the loop. ?> 

Funciona bem até que não haja conflito de termos de taxonomia.
Por exemplo:
Se eu tiver categoria & Nomes de tags - "Vídeos" , categoria terão slug - "/ videos" & Marque "/ videos-2" .

No caso de o slug não ser o mesmo que o nome de taxonomia acima do código, não funciona.
Eu preciso de uma função alternativa para single_term_title () , algo como "single_term_slug ()" .

Alguma idéia?

P.S. Eu estava pensando sobre a função " get_term_by () ", mas não tive sorte adotá-lo para o código acima.

Atualizado: publiquei meu código abaixo.

    
por Andrew 04.04.2011 / 14:17

3 respostas

6

Obrigado a vocês por essa resposta rápida. Muito apreciado!

Aqui está o código da página de tags "globais" (exibindo os termos da taxonomia padrão de "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; // End the loop. ?>  

O próximo exemplo de código é para consulta de taxonomia personalizada (exibindo termos de taxonomia personalizada):

<?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; // End the loop. ?> 
    
por Andrew 04.04.2011 / 20:01
2

Existe uma referência ao objeto term em $wp_query , e uma função de atalho para pegar isso (desde que você esteja executando o WordPress 3.1): get_queried_object() .

Então, para obter o slug, você faria echo get_queried_object()->slug;

Se você não estiver executando o WordPress 3.1, será necessário chamar o get_queried_object() no global $wp_query :

global $wp_query; echo $wp_query->get_queried_object()->slug;

    
por Joe Hoyle 04.04.2011 / 14:55
0

Aqui está uma função bifurcada single_term_slug() em 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;
}
    
por Bainternet 04.04.2011 / 15:00