Retrieve single term slug

I’m creating common “Single Tag Page” for different Post Types.
I’m using next code:

$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. ?> 

It works fine until there is no taxonomy terms conflict.
For example:
If I have Category & Tag names – “Videos”, Category will have slug – “/videos” & Tag “/videos-2”.

Read More

In case when slug isn’t the same as taxonomy name above code does not working.
I need an alternative function for single_term_title(), something like “single_term_slug()”.

Any ideas?

P.S. I was thinking about “get_term_by()” function, but I didn’t had luck to adopt it to the code above.

Updated: I’ve posted my code below.

Related posts

Leave a Reply

3 comments

  1. Thank you guys for such quick response. Much appreciated!

    Here is code for “global” Tags page (displaying terms of default ‘post_tag’ taxonomy):

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

    And the next code example is for custom taxonomy query (displaying terms of custom taxonomy):

    <?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. ?> 
    
  2. There is a reference to the term object in $wp_query, and a shortcut function to grab this (providing you are running WordPress 3.1): get_queried_object().

    So, to get the slug you would do echo get_queried_object()->slug;

    If you are not running WordPress 3.1, you will have to call the get_queried_object() on the global $wp_query:

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

  3. Here is a forked single_term_slug() function out of 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;
    }