Категории - Отображать Самые Популярные Теги Категории?

  • Автор темы Vit91996
  • Обновлено
  • 21, Oct 2024
  • #1

Год назад я использовал этот код, чтобы показать самый популярный тег текущей категории на боковой панели:

 function my_tags_from_category( $atts, $content = null ) {
extract(shortcode_atts(array(

'type' => '',

'count' => 5,

'verbose' => '0'    // '1' outputs some debug info
), $atts));
$verbose = ( $verbose !== '0' );

$content = '';
if ( !empty( $type ) && !empty( $count ) ) {

$current_cat_ids = array();

global $post;

if ( !empty( $post ) ) {

// get all categories of current post

$terms = get_the_terms( $post->ID, 'category' );

if ( $terms && !is_wp_error( $terms ) ) {

foreach( $terms as $term ) {

$current_cat_ids[] = $term->term_id;

}

}

} else {

if ( $verbose ) $content = 'tags_from_category: нет $post...';

}

if ( !empty( $current_cat_ids ) ) {

// get all post ids of current categories ordered by date

$args = array(

'posts_per_page' => -1,

'orderby' => 'post_date',

'order' => 'DESC',

'tax_query' => array(

array(

'taxonomy' => 'category',

'field' => 'id',

'terms' => $current_cat_ids

)

),

'suppress_filters' => false,

'fields' => 'ids'

);

$my_post_ids = get_posts( $args );

if ( !empty( $my_post_ids ) ) {

switch( $type ) {

case 'popular-tags':

// get terms orderby count

// note: wp_get_object_terms for post_id array returns total count of terms on all categories!

$found_terms = array();

// get terms & count for all post ids of current categories

foreach ( $my_post_ids as $my_post_id ) {

$terms = get_the_terms( $my_post_id, 'post_tag' );

if ( !is_wp_error( $terms ) && !empty( $terms ) ) {

foreach ( $terms as $term ) {

if ( array_key_exists( 'id_' . $term->term_id, $found_terms ) ) {

$found_terms[ 'id_' . $term->term_id ]['count']++;

} else {

$found_terms[ 'id_' . $term->term_id ] = array(

'count' => 1,

'slug' => $term->slug,

'name' => $term->name

);

}

}

}

}

if ( !empty( $found_terms ) ) {

// sort terms by count

$found_terms_by_count = array();

foreach ( $found_terms as $term_id => $term ) {

$found_terms_by_count[ $term_id ] = $term['count'];

}

array_multisort( $found_terms_by_count, SORT_DESC, $found_terms );

// get $count terms order by count

// loop through ordered terms until enough tags

$content = '<ул>';

$term_count = 0;

foreach ( $found_terms as $term ) {

$content .= '<li><a href="' . esc_url( get_term_link( $term['slug'], 'post_tag' ) ) . '" title="' . esc_attr($term['name']) . '">' . $term['name'] . '</a></li>';

$term_count++;

if ( $term_count >= $count ) {

break;

}

}

$content .= '</ul>';

} else {

if ( $verbose ) $content = 'tags_from_category: к сообщениям в текущих категориях не прикреплены теги...';

}

break;

case 'last-tags':

// get $count terms orderby post_date

// loop through ordered posts until enough tags

$content = '';

$found_ids = array();

foreach ( $my_post_ids as $my_post_id ) {

$terms = get_the_terms( $my_post_id, 'post_tag' );

if ( !is_wp_error( $terms ) && !empty( $terms ) ) {

foreach ( $terms as $term ) {

if ( !in_array( $term->term_id, $found_ids ) ) {

$content .= '<li><a href="' . esc_url( get_term_link( $term->slug, 'post_tag' ) ) . '" title="Тема: ' . esc_attr($term->имя). '">' . $term->name . '</a></li>';

$found_ids[] = $term->term_id;

if ( count( $found_ids ) >= $count ) {

break 2;

}

}

}

}

}

if ( !empty( $content ) ) {

$content = '<ул>' . $content . '</ul>';

} else {

if ( $verbose ) $content = 'tags_from_category: к сообщениям в текущих категориях не прикреплены теги...';

}

break;

default:

if ( $verbose ) $content = 'tags_from_category: неизвестный "тип"...';

break;

}

} else {

if ( $verbose ) $content = 'tags_from_category: в текущих категориях нет сообщений...';

}

} else {

if ( $verbose ) $content = 'tags_from_category: текущих категорий нет...';

}
} else {

if ( $verbose ) $content = 'tags_from_category: неправильные параметры «тип» и/или «количество»…';
}
return $content;

}

add_shortcode( 'tags_from_category', 'my_tags_from_category' );
 

Но код больше не работает. Я несколько часов искал ошибки и пробовал несколько вещей, но не смог найти ошибку. Надеюсь, кто-нибудь сможет мне помочь..

С наилучшими пожеланиями

#категории #теги

Vit91996


Рег
16 Apr, 2011

Тем
88

Постов
202

Баллов
652
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно