Как вывести теги только из определенной категории

При просмотре постов определенной категории интересно так же вывести и те теги, которые встречаются в этих постах. Например, если вы открыли категорию «Программы», то в ней будет выводится список тегов, которые присутствуют в постах только этой категории. Таким образом можно достигнуть большей детализации выборки, облегчить пользователям поиск нужной информации, сделать хорошую внутреннюю перелинковку.

Для формирования списка тегов, используемых в постах определенной категории, вставьте в файл functions.php код:

function get_category_tags($cats) {
    global $wpdb;
    $tags = $wpdb->get_results
    ("
        SELECT DISTINCT terms2.term_id as tag_id, terms2.name as tag_name, t2.count as posts_count, null as tag_link
        FROM
            wp_posts as p1
            LEFT JOIN wp_term_relationships as r1 ON p1.ID = r1.object_ID
            LEFT JOIN wp_term_taxonomy as t1 ON r1.term_taxonomy_id = t1.term_taxonomy_id
            LEFT JOIN wp_terms as terms1 ON t1.term_id = terms1.term_id, 
            wp_posts as p2
            LEFT JOIN wp_term_relationships as r2 ON p2.ID = r2.object_ID
            LEFT JOIN wp_term_taxonomy as t2 ON r2.term_taxonomy_id = t2.term_taxonomy_id
            LEFT JOIN wp_terms as terms2 ON t2.term_id = terms2.term_id
        WHERE
            t1.taxonomy = 'category' AND p1.post_status = 'publish' AND terms1.term_id IN (". $cats .") AND
            t2.taxonomy = 'post_tag' AND p2.post_status = 'publish'
            AND p1.ID = p2.ID
        ORDER by tag_name
    "); 
    foreach($tags as $tag)
        $out .= '<a>tag_id) .'">'. $tag->tag_name .'<sub>'. $tag->posts_count .'</sub></a>, '; 
    return rtrim($out, ', ');
}

Эта функция проверяет посты определенной категории, и составляет список тегов, используемых в них. Теперь осталось только вывести этот список, задав ID категории:

</pre>
<p>Этот код нужно вставить в шаблон. 14 — это ID категории. Если нужно вываести список тегов из постов, принадлежащих нескольким категориям, то ID этих категорий нужно перечислить через запятую:</p>
<pre>

Вывод тегов постов определенной категории — отличная возможность сделать ваш блог интереснее и добавить в него хорошую внутреннюю перелинковку, способствующую лучшей индексации.

tiaurus

Автор n-wp.ru — блога о WordPress для новичков.

Оцените автора
Добавить комментарий

  1. Полезные советы

    Нужная штука. Только подскажи пожалуйста в каком месте задавать список категорий? Я в этом не особо понимаю еще.

    Ответить
    1. Приведенный код выводит теги, используемые в постах определенной категории. То есть вставлять его нужно в шаблон, отвечающий за вывод постов определенной категории — index.php, archive.php и др.

      Ответить
  2. Полезные советы

    Посмотрите пожалуйста мой сайт, я не пойму никак, два часа ковырял код, и не получилось, выводит, но не там. В functions.php вставил код, а дальше не врублюсь куда правильно влепить код:

    Поразмышляв , подумал, что нужно в коде вывода тегов, прописать отдельно, чтоб определенная категория, брала определенные для неё теги, ток как это правильно написать не знаю,вот весь код, что выводит теги:

    Популярные темы

    Дайте пожалуйста пример написания на 1 категорию. К примеру рубрика «Своими руками» — айди 23.

    Вот я пробовал так-

    Популярные темы

    Выводит в правильном месте, только во всех разделах ( и вместе со старыми, но то не проблема)

    Ответить
  3. Sonax

    Автору 1000 поклонов. Нужно было как раз это, но пришлось малость попотеть, что бы запихать этот код в плагин WP-columns. Если кому нужно, то написал статью как это сделать http://sonax.name/?p=979

    P.S. Зарегистрировался на сайте, увидел, что Вы отключили в админке регистрирующимся слева все пункты, в том числе и пункт-раздел консоль. Написали бы статью как это сделать :)

    Ответить
  4. salexys

    Может поможете или направите по нужному урлу. Пытаюсь сделать то же самое но для вывода меток товаров плагина Woocommerce. Задача та же вывести метки всех товаров определенной категории.

    Ответить
  5. zezya

    К сожалению, приведенный пример в новой версии WP 3.9.1 не работает. Могли бы вы подсказать как правильно адаптировать его?

    Ответить