Задача. Необходимо на страницах рубрик и меток вывести метки постов в виде плитки тегов (Изображение №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
64
65
|
## Вывод меток на странице текущей таксономии (рубрики/метки)
## в виде плитки тегов.
## 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>