Obtener el slug de un término individual
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.
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. ?>

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

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

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;

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;
}
