Поддержка Проблемы и решения Отобразить материалы рубрики в соответствии с меткой

  • Здравствуйте! На сайте множество рубрик и подрубрик. Пользователь заходит в определенную подрубрику. В ней большое количество постов. Сверху появляется список всех меток, которые содержаться в постах этой подрубрики. Как сделать так, чтобы при нажатии на любую из меток появлялись те посты подрубрики, которые имеют эту метку? Сейчас выводятся посты всех рубрик и подрубрик, содержащих эту метку.

    Метки вывожу вот так:

    function get_tags_in_cat($cat_id)
    {
        $posts = get_posts( array('category' => $cat_id, 'numberposts' => -1) );
        $tags = array();
      
        foreach($posts as $post)
        {
            $post_tags = get_the_tags($post->ID);
            if( !empty($post_tags) )
                foreach($post_tags as $tag)
                    $tags[$tag->term_id] = $tag->name;
          
        }
        asort($tags);
        return $tags;
    }
    
    <?php
        $cat_id = get_query_var('cat'); // получаем ID текущей категории   
        $tags = get_tags_in_cat($cat_id);
        foreach($tags as $tag_id => $tag_name)
            $tags_print[] = '<a href="' .get_tag_link($tag_id). '">' .$tag_name. '</a>';
        echo implode(', ', $tags_print);
    ?>
Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Это невозможно?

    Фильтрация должна вроде работать по ссылке http://site.ru/?tag=slug&category_name=slug, соответственно вам нужно ссылку сформировать в таком виде вместо get_tag_link($tag_id)

    Спасибо! Ссылка работает. Но как правильно её сформировать? Пробовал добавить get_cat_name($cat_id) Так не получается

    вручную.

    
    echo 'http://site.ru/?tag=' . ярлык_метки . '&category_name=' . ярлык_рубрики;
    

    у вас есть данные и метки и рубрики, поэтому получить их ярлыки и сформировать урл должно быть легко.

    Делаю вот так:

    <a href="' .get_tag_link($tag_id). '&category_name=' . get_cat_name( $cat_id ).'">' .$tag_name. '</a>';
        echo implode(', ', $tags_print);

    Для подрубрик, в названии которых нет пробелов, все отлично работает. Но там, где пробелы есть, они заменяются знаками %20 и соответственно, ничего не выводится

    • Ответ изменён 6 лет, 9 месяцев назад пользователем antisept.

    не имя рубрики вам надо, а ее ярлык — в ярлыках не может быть пробелов.

    <a href="'http://сайт/?tag=' .get_queried_object($tag_id)->slug. '&category_name='. get_queried_object($cat_id)->slug.">' .$tag_name. '</a>';
        echo implode(', ', $tags_print);

    Так?

    • Ответ изменён 6 лет, 9 месяцев назад пользователем antisept.

    Немного изменил ваш код

    function get_tags_in_cat($cat_id)
    {
        $posts = get_posts( array('category' => $cat_id, 'numberposts' => -1) );
        $tags = array();
      
        foreach($posts as $post)
        {
            $post_tags = get_the_tags($post->ID);
            if( !empty($post_tags) )
                foreach($post_tags as $tag)
                    $tags[$tag->term_id][name] = $tag->name;
                    $tags[$tag->term_id][slug] = $tag->slug;
        }
        asort($tags);
        return $tags;
    }
    
    и
    
     $cat_id = get_query_var('cat'); // получаем ID текущей категории   
        $tags = get_tags_in_cat($cat_id);
        foreach($tags as $tagss)
    $tags_print[] = '<a href="http://сайт/?tag=' .$tagss[slug]. '&category_name='. get_queried_object($cat_id)->slug.'">' .$tagss[name]. '</a>';
        echo implode(', ', $tags_print);
    • Ответ изменён 6 лет, 9 месяцев назад пользователем qwert555.
    • Ответ изменён 6 лет, 9 месяцев назад пользователем qwert555.

    Огромное спасибо! Всё работает

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «Отобразить материалы рубрики в соответствии с меткой» закрыта для новых ответов.