@OneTwoThreeFourFive

Кастомный вывод тегов в виджете вордпресс?

Здравствуйте. Я использую код ниже для того, чтобы выводить в виджете теги только, которые принадлежат к категории, которая открыта.
// Enable display of tags for a active category only
function get_tags_in_cat($cat_id){
	
  $posts = get_posts( array('category' => $cat_id, 'numberposts' => -1) );
  $tags = array();
   foreach($posts as $post){
     $post_tags = get_the_tags($post->ID);
       if( !empty($post_tags) )
	     foreach($post_tags as $tag)
		 $tags[$tag->term_id] = $tag->name;    
  }
  asort($tags);
  return $tags;
}

// Registration of a widget for displaying tags 
function custom_tags_display() {
  register_widget( 'tags_widget' );
}
add_action( 'widgets_init', 'custom_tags_display' );
 
class tags_widget extends WP_Widget { 
  function __construct() {
    parent::__construct(
	  // widget ID
      'tags_widget',
	  // widget name
	  __('Custom tags display', 'custom_tags_display'),
	  // widget description
	  array( 'description' => __( ' widget for displaying tags', 'custom_tags_display' ), )
    );
  }
  public function widget( $args, $instance ) {
    $title = apply_filters( 'widget_title', $instance['title'] );
	echo $args['before_widget'];
	//if title is present
	if ( ! empty( $title ) )
	  echo $args['before_title'] . $title . $args['after_title'];
      $cat_id = get_query_var('cat');  
      $tags = get_tags_in_cat($cat_id);
    foreach($tags as $tag_id => $tag_name)
      $tags_print[] = '<li class="tag-item-' . $tag_id . '">' . '<a href="' . get_tag_link($tag_id) . '">' .$tag_name. '</a></li>';
	if ( ! empty( $tags_print ) ) {
      echo '<ul class="custom-tags">';
  	  echo implode($tags_print);
      echo '</ul>';
	}
	  echo $args['after_widget'];
  }
  public function form( $instance ) {
	if ( isset( $instance[ 'title' ] ) )
	  $title = $instance[ 'title' ];
	 else
	  $title = __( '', 'custom_tags_display' );
  ?>
  <p>
	<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:' ); ?></label>
	<input class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>" />
  </p>
  <?php
  }
  public function update( $new_instance, $old_instance ) {
    $instance = array();
    $instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
    return $instance;
 }
}

На сайте надо 2 таких виджета. В одном виджете теги только "бренд", а во 2 виджете все остальные, кроме брендов.
Я могу добавить в виджет поле, чтобы указать какие теги убрать (по id, например), но не могу скрыть ненужные теги в виджете (поместить их в код вывода), потому что функция у get_the_tags() нет для этого настроек, а если использовать функцию wp_tag_cloud() можно скрыть теги по id, но эта функция игнорирует правило показа тегов только для текущей категории (показывает все, кроме тегов которуе я указал ).

Подскажите пожалуйста, как скрыть теги по id и выводить только те, которые есть в текущей категории.
  • Вопрос задан
  • 340 просмотров
Решения вопроса 1
@OneTwoThreeFourFive Автор вопроса
Создал 2 кастомные таксономии и вывел их в 2 разных виджетах с тем же условием (показывать только те, которые есть в категории, в которой находишься)
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы