Obtener el slug de un término individual

4 abr 2011, 15:17:37
Vistas: 16.2K
Votos: 3

Estoy creando una "Página de Etiqueta Única" común para diferentes tipos de entradas.
Estoy usando el siguiente 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; // Fin del loop. ?> 

Funciona bien hasta que no hay conflictos entre términos de taxonomías.
Por ejemplo:
Si tengo nombres de Categoría y Etiqueta - "Videos", la Categoría tendrá el slug - "/videos" y la Etiqueta "/videos-2".

Cuando el slug no coincide con el nombre de la taxonomía, el código anterior no funciona.
Necesito una función alternativa a single_term_title(), algo como "single_term_slug()".

¿Alguna idea?

P.D.: Pensé en usar la función "get_term_by()", pero no tuve éxito para adaptarla al código anterior.

Actualización: He publicado mi código a continuación.

0
Todas las respuestas a la pregunta 3
3

Muchas gracias a todos por su rápida respuesta. ¡Se los agradezco mucho!

Aquí está el código para la página de Etiquetas "global" (mostrando términos de la taxonomía predeterminada '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; // Fin del loop. ?>  

Y el siguiente ejemplo de código es para una consulta de taxonomía personalizada (mostrando términos de una taxonomía 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; // Fin del loop. ?> 
4 abr 2011 21:01:07
Comentarios

¿Es esta tu respuesta a tu propia pregunta, o una parte de seguimiento de tu pregunta?

MikeSchinkel MikeSchinkel
5 abr 2011 08:27:51

Esto me parece una respuesta en el contexto de la pregunta original, descartando la bandera sobre ella.

Rarst Rarst
5 abr 2011 18:10:26

@MikeSchinkel - Esta es mi respuesta. He publicado el código completo de la solución.

1 es para mostrar términos de la taxonomía predeterminada 'post_tag', que se usa en tipos de contenido personalizados.

2 es para mostrar términos de taxonomía personalizada.

Andrew Andrew
6 abr 2011 14:01:37
0

Hay una referencia al término objeto en $wp_query, y una función abreviada para obtenerlo (siempre que estés ejecutando WordPress 3.1 o superior): get_queried_object().

Por lo tanto, para obtener el slug harías echo get_queried_object()->slug;

Si no estás ejecutando WordPress 3.1, tendrás que llamar a get_queried_object() en el global $wp_query:

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

4 abr 2011 15:55:13
0

Aquí está una función bifurcada single_term_slug() extraída de 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 abr 2011 16:00:42