/ Wordpress / Список меток текущей категории

Список меток текущей категории

HIT

17.06.2015

4441

2

Формируем и выводим список меток текущей категории.

Вариант в файл funсtion.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 href="'. get_tag_link($tag->tag_id) .'">'. $tag->tag_name .'<sub>'. $tag->posts_count .'</sub></a>, '; 
    return rtrim($out, ', ');
}

В шаблон вывода категории

<?php echo get_category_tags($id); ?>

ID — либо переменная ID текущей категории, либо прописать конкретную категорию

 

С кнопкой «All» (для сортировки по меткам) и проверкой — выводить только при наличии меток

<?php if ( get_category_tags($category_id) ):  ?><div id="tag-list"><div id="all" class="activ">All</div><?php echo get_category_tags($category_id); ?></div><?php endif; ?>
Выдает ошибку в error.log если выводить в других шаблонах помимо category.php

Вариант прямо в верстку

Первоначальный вариант

<?php
$getcat = get_the_category();
if($getcat[0]){
$cat_id=$getcat[0]->term_id;
}
    query_posts('cat='.$cat_id.'&posts_per_page=-1');
   if(have_posts()): while (have_posts()) : the_post();
        $all_tag_objects = get_the_tags();
        if($all_tag_objects){
            foreach($all_tag_objects as $tag) {
                if($tag->count > 0) {$all_tag_ids[] = $tag -> term_id;}
            }
        }
    endwhile;endif;
    $tag_ids_unique = array_unique($all_tag_ids);
	
foreach($tag_ids_unique as $tag_id) {
    $post_tag = get_term( $tag_id, 'post_tag' );

   //Вывод тегов
 echo '<a href="'.get_tag_link($tag_id).'">'.$post_tag->name.' ( '.$post_tag->count.' )</a>';

}
?>

Сортировка для категорий
Дополненный вариант с проверкой на наличие тегов и модулем сортировки. Не нарушает пэйджинацию (за счет вставки wp_reset_query();). Можно делать миниатюры меток и ссылку на метку.

<div id="sorting">
<div id="tag-list">

<?php
$getcat = get_the_category();
if($getcat[0]){
$cat_id=$getcat[0]->term_id;
}
query_posts('cat='.$cat_id.''); //&posts_per_page=-1 убрал из конца скобок

if(have_posts()): while (have_posts()) : the_post();

$all_tag_objects = get_the_tags();
if($all_tag_objects){
foreach($all_tag_objects as $tag) {
if($tag->count > 0) {$all_tag_ids[] = $tag -> term_id;}
}
}

endwhile;endif; wp_reset_query();


if ( $tag->count > 0 ) {
 
$tag_ids_unique = array_unique($all_tag_ids); 

echo '<div id="all" class="activ">All</div>';

foreach($tag_ids_unique as $tag_id) {
$post_tag = get_term( $tag_id, 'post_tag' );
 
$imgcat1 = get_field("mini-thumb",$post_tag); //Для миниатюры
$tag_link = get_tag_link($post_tag->term_id); //Если нужна ссылка на метку

//Вывод тегов

 echo '<a href="'.$tag_link.'"><div id="' .$post_tag->slug. '">' .$post_tag->name. '<img class="cat-image" alt="'.$post_tag->name.'" src="'.$imgcat1['sizes']['medium'].'"></div></a>'; 

}
}

?> 

</div>

<div id="style-list">
<span id="btn-block"><i class="fa fa-th-large"></i></span>
<span id="btn-line"><i class="fa fa-bars"></i></span>
<span id="btn-photo"><i class="fa fa-picture-o"></i></span>
</div>

</div>

Сортировка для таксономий
Немного изменен изначальный цикл. Работает в шаблоне таксономий.

<div id="sorting">
<div id="tag-list">

<?php
query_posts(array( 'posts_per_page' => -1,
'post_type' => array( 'post', 'page', 'track' ),
'tax_query' => array(
array( 'include_children' => false,
'taxonomy' => $tax,
'field' => 'term_id',
'terms' => $term->term_id
)
)
));
if(have_posts()): while (have_posts()) : the_post();

$all_tag_objects = get_the_tags();
if($all_tag_objects){
foreach($all_tag_objects as $tag) {
if($tag->count > 0) {$all_tag_ids[] = $tag -> term_id;}
}
}

endwhile;endif; wp_reset_query();
if ( $tag->count > 0 ) {

$tag_ids_unique = array_unique($all_tag_ids);

echo '<div id="all" class="activ">All</div>';

foreach($tag_ids_unique as $tag_id) {
$post_tag = get_term( $tag_id, 'post_tag' );

$imgcat1 = get_field("mini-thumb",$post_tag);
$tag_link = get_tag_link($post_tag->term_id); //Если нужна ссылка на метку
//Вывод тегов

echo '<div id="' .$post_tag->slug. '">' .$post_tag->name. '<img class="cat-image" alt="'.$post_tag->name.'" src="'.$imgcat1['sizes']['medium'].'"></div>';

}
}

?>

</div>

<div id="style-list">
<span id="btn-block"><i class="fa fa-th-large"></i></span>
<span id="btn-line"><i class="fa fa-bars"></i></span>
<span id="btn-photo"><i class="fa fa-picture-o"></i></span>
</div>

</div>

Данный функционал можно использовать для сортировки записей по меткам.

Сортировка по терминам пользовательской таксономии

Если нам надо делать сортировку по терминам пользовательской таксономии, например label, в коде для шаблона таксономий делаем небольшие изменения.

<div id="sorting">
<div id="tag-list">

<?php
query_posts(array( 'posts_per_page' => -1,
'post_type' => array( 'post', 'page', 'track' ),
'tax_query' => array(
array( 'include_children' => false,
'taxonomy' => $tax,
'field' => 'term_id',
'terms' => $term->term_id
)
)
));
if(have_posts()): while (have_posts()) : the_post();

$all_tag_objects = get_the_terms ( $post->ID, 'label' ); //get_the_tags();
if($all_tag_objects){
foreach($all_tag_objects as $tag) {
if($tag->count > 0) {$all_tag_ids[] = $tag -> term_id;}
}
}

endwhile;endif; wp_reset_query();
if ( $tag->count > 0 ) {

$tag_ids_unique = array_unique($all_tag_ids);

echo '<div id="all" class="activ">All</div>';

foreach($tag_ids_unique as $tag_id) {
$post_tag = get_term( $tag_id, 'post_tag' );

$imgcat1 = get_field("mini-thumb",$post_tag);
$tag_link = get_tag_link($post_tag->term_id); //Если нужна ссылка на метку
//Вывод тегов

echo '<div id="' .$post_tag->slug. '">' .$post_tag->name. '<img class="cat-image" alt="'.$post_tag->name.'" src="'.$imgcat1['sizes']['medium'].'"></div>';

}
}

?>

</div>

<div id="style-list">
<span id="btn-block"><i class="fa fa-th-large"></i></span>
<span id="btn-line"><i class="fa fa-bars"></i></span>
<span id="btn-photo"><i class="fa fa-picture-o"></i></span>
</div>

</div>

И в коде для jquery тоже

<script type="text/javascript">
$(document).ready(function() {

$('#tag-list div').click(function() {

$('#tag-list div').removeClass(' activ ');
$('#tag-list div').addClass(' passiv ');
$(this).removeClass(' passiv ');
$(this).addClass(' activ ');

});


$('#tag-list div').click(function() { $('.hentry').parent('div').show(); });

<?php

foreach($tag_ids_unique as $tag_id) {
$post_tag = get_term( $tag_id, 'post_tag' );

echo '$("#'.$post_tag->slug.'").click(function() { $(".hentry").not(".label-'.$post_tag->slug.'").parent("div").hide(); });';

}

?>
$("#hit").click(function() { $(".hentry").not(".label-hit").parent("div").hide(); });
});
</script>

Поделиться в соц. сетях:

  • Похожие записи
  • Комментарии
  • Вложения
Практикум по функциям

Практикум по функциям

В процессе штудирования книги «Изучаем PHP 7» (Дэвид Скляр) появилась мысль помечать некоторые моменты, касающиеся как функций, так и php в целом. Краткий обзор функций Если задать простую функцию function Читать далее »

Манипуляции с датами

Манипуляции с датами

Русскоязычный формат дней недели и месяцев Добавляем на сайт функцию, которая приводит вывод даты (месяцы, дни недели) в человеческий вид.Помещаем в файл functions вывод: если нужна дата поста, то: Вывод Читать далее »

Расширение функционала WP

Расширение функционала WP

Разгрузка functions.php Для разгрузки основного файла functions.php нужно в папке темы создать папку (например inc) и в нее помещать файлы функций (желательно по назначению: хлебные крошки, шорткоды, редактирование, связанные с Читать далее »

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

2 комментария

  1. Serg

    А возможно так же сделать для меток?Вывод список меток текущей категории

    1. Alexandr

      Не понял вопрос. Мы и получаем список меток из записей текущей категории.

Список меток текущей категории
Кнопки построить маршрут
Рекомендации для васКнопки построить маршрутOpttour.ru
Спасибо! Наш менеджер свяжется с Вами в течении 5 минут.