andrew
  • 0
Учитель

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

  • 0

Я создаю общую «Страницу с одним тегом» для разных типов сообщений.

Я использую следующий код:

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

Он работает нормально, пока нет конфликта терминов таксономии.

Например:

если у меня есть имена категорий и тегов — «Видео», у категории будет слаг — «/videos» и тег «/videos-2».

В случае, когда slug не совпадает с именем таксономии выше, код не работает.

Мне нужна альтернативная функция для single_term_title(), что-то вроде «single_term_slug()».

Есть идеи?

PS Я думал о функции » get_term_by() «, но мне не повезло адаптировать ее к приведенному выше коду.

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

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

    Вот код для «глобальной» страницы тегов (отображает условия таксономии по умолчанию «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. ?> 
    
    • 0
  2. Существует ссылка на термин объект в $wp_query, и функция быстрого доступа, чтобы получить это (при условии, что вы используете WordPress 3.1): get_queried_object() .

    Итак, чтобы получить пулю, вы бы сделалиecho get_queried_object()->slug;

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

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

    • 0
  3. Вот разветвленная 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;
    }
    
    • 0

Оставить ответ

You must login to add an answer.