Получение slug одиночного термина

4 апр. 2011 г., 15:17:37
Просмотры: 16.2K
Голосов: 3

Я создаю общую "Страницу одиночного тега" для разных типов записей.
Использую следующий код:

$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; // Завершение цикла ?> 

Код работает корректно, пока нет конфликтов терминов таксономий.
Например:
Если у меня есть Категория и Тег с названием - "Videos", то категория получит slug - "/videos", а тег - "/videos-2".

Когда slug не совпадает с названием таксономии, приведённый код не работает.
Мне нужна альтернативная функция для single_term_title(), что-то вроде "single_term_slug()".

Есть идеи?

P.S. Я думал о функции "get_term_by()", но мне не удалось адаптировать её для этого кода.

Обновлено: Я разместил свой код ниже.

0
Все ответы на вопрос 3
3

Спасибо, ребята, за такой быстрый ответ. Очень ценно!

Вот код для "глобальной" страницы Тегов (отображение терминов таксономии '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. ?>  

А следующий пример кода для запроса пользовательской таксономии (отображение терминов пользовательской таксономии):

<?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. ?> 
4 апр. 2011 г. 21:01:07
Комментарии

Это ваш ответ на собственный вопрос или дополнительная часть вопроса?

MikeSchinkel MikeSchinkel
5 апр. 2011 г. 08:27:51

Мне кажется, это ответ в контексте исходного вопроса, отклоняю жалобу на него.

Rarst Rarst
5 апр. 2011 г. 18:10:26

@MikeSchinkel - Это мой ответ. Я опубликовал полный код решения.

1 - для отображения терминов таксономии по умолчанию 'post_tag', которая используется в пользовательских типах записей.

2 - для отображения терминов пользовательской таксономии.

Andrew Andrew
6 апр. 2011 г. 14:01:37
0

Существует ссылка на объект термина в $wp_query, а также сокращенная функция для его получения (при условии, что вы используете WordPress 3.1 или выше): get_queried_object().

Таким образом, чтобы получить slug (ярлык), вы можете использовать: echo get_queried_object()->slug;

Если вы не используете WordPress 3.1, вам придется вызвать get_queried_object() через global $wp_query:

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

4 апр. 2011 г. 15:55:13
0

Вот форкнутая функция single_term_slug(), взятая из 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 апр. 2011 г. 16:00:42