Здравствуйте. Я использую код ниже для того, чтобы выводить в виджете теги только, которые принадлежат к категории, которая открыта.
// 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 и выводить только те, которые есть в текущей категории.