Задача. Необходимо на страницах рубрик и меток вывести метки постов в виде плитки тегов (Изображение №1). Т.е. это будут ссылки только на те метки, которые есть в записях текущей таксономии.
Решение. В файле functions.php
добавляем функцию qfurs_the_tiles_in_tax
(Код 1), а инициализируем функцию непосредственно в шаблоне, где требуется вывести теги.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
## Вывод меток на странице текущей таксономии (рубрики/метки) ## в виде плитки тегов. ## functions.php /* Функция в functions.php */ function qfurs_the_tiles_in_tax() { $term = get_queried_object(); // Получаем текущий объект запроса $term_id = $term->term_id; // Получаем id таксономии $taxonomy_type = 'category'; if( $term->taxonomy == 'post_tag' ){ // Если тип текущей таксономии - метка, то устанвливаем 'post_tag' $taxonomy_type = 'post_tag'; } // Запрос к БД 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 = '" . $taxonomy_type . "' AND p1.post_status = 'publish' AND terms1.term_id IN (". $term_id .") AND t2.taxonomy = 'post_tag' AND p2.post_status = 'publish' AND p1.ID = p2.ID ORDER by tag_name "); /* * Перебираем результаты запроса к БД и записываем ссылки в переменную $out * Выводим ссылку, id, название, количество записей в метке */ foreach($tags as $tag) { $out .= '<a href="' . get_term_link((int) $tag->tag_id ) .'" class="tile tile-' . $tag->tag_id . ' ">' . $tag->tag_name . ' <span class="count">(' . $tag->posts_count . ')</span></a>'; } if ( $tags != '' ){ echo '<div id="tags-tiles">' . $out . '</div>'; } } ## Инициализация функции в шаблоне темы qfurs_the_tiles_in_tax(); |
Если количество постов в метках ненужно, то можно убрать <span class="count">(' . $tag->posts_count . ')</span>