Поддержка Проблемы и решения Добавить категории в виджет

  • Всем привет!
    Подскажите, как можно добавить возможность добавления сразу нескольких категорий в виджет?
    В данный момент в виджет можно добавить лишь одну категорию, что очень неудобно.
    Код:

    <?php
    add_action('widgets_init', create_function('', 'return register_widget("DF_timeline");'));
    
    class DF_timeline extends WP_Widget {
    	function DF_timeline() {
    		parent::__construct (false, $name = THEME_FULL_NAME.' '.esc_html__("Timeline", THEME_NAME));	
    	}
    
    	function form($instance) {
    		/* Set up some default widget settings. */
    		$defaults = array(
    			'title' => esc_html__("Timeline", THEME_NAME),
    			'cat' => '',
    			'count' => '10',
    		);
    		
    		$instance = wp_parse_args( (array) $instance, $defaults );
    
    		$title = $instance['title'];
    		$cat = $instance['cat'];
    		$count = $instance['count'];
            ?>
             	<p><label for="<?php echo esc_attr__($this->get_field_id('title')); ?>"><?php esc_html_e( 'Title:' , THEME_NAME );?> <input class="widefat" id="<?php echo esc_attr__($this->get_field_id('title')); ?>" name="<?php echo esc_attr__($this->get_field_name('title')); ?>" type="text" value="<?php echo esc_attr__($title); ?>" /></label></p>
    			<p><label for="<?php echo esc_attr__($this->get_field_id('cat')); ?>"><?php esc_html_e( 'Category:' , THEME_NAME );?>
    			<?php
    			$args = array(
    				'type'                     => 'post',
    				'child_of'                 => 0,
    				'orderby'                  => 'name',
    				'order'                    => 'ASC',
    				'hide_empty'               => 1,
    				'hierarchical'             => 1,
    				'taxonomy'                 => 'category');
    				$args = get_categories( $args ); 
    			?> 	
    			<select name="<?php echo esc_attr__($this->get_field_name('cat')); ?>" style="width: 100%; clear: both; margin: 0;">
    				<option value=""><?php esc_html_e("Latest News", THEME_NAME);?></option>
    				<?php foreach($args as $ar) { ?>
    					<option value="<?php echo esc_attr__($ar->term_id); ?>" <?php if($ar->term_id==$cat)  {echo 'selected="selected"';} ?>><?php echo esc_html__($ar->cat_name); ?></option>
    				<?php } ?>
    			</select>
    			
    			</label></p>			
    			<p><label for="<?php echo esc_attr__($this->get_field_id('count')); ?>"><?php esc_html_e( 'Post count:' , THEME_NAME );?> <input class="widefat" id="<?php echo esc_attr__($this->get_field_id('count')); ?>" name="<?php echo esc_attr__($this->get_field_name('count')); ?>" type="text" value="<?php echo esc_attr__($count); ?>" /></label></p>
    
    			
            <?php 
    	}
    
    	function update($new_instance, $old_instance) {
    		$instance = $old_instance;
    		$instance['title'] = strip_tags($new_instance['title']);
    		$instance['cat'] = strip_tags($new_instance['cat']);
    		$instance['count'] = strip_tags($new_instance['count']);
    
    		return $instance;
    	}
    
    	function widget($args, $instance) {
    		extract( $args );
    		$title = $instance['title'];
    		$count = $instance['count'];
    		$cat = $instance['cat'];
    
    	
    	$args=array(
    		'cat'=> $cat,
    		'posts_per_page'=> $count,
    		'ignore_sticky_posts' => true
    	);
    	
    	$the_query = new WP_Query($args);
    		$counter = 1;
    
    	$blogID = get_option('page_for_posts');
    
    	if($cat) {
    		$link = get_category_link( $cat );
    		$color = df_title_color($cat, 'category', false);
    	} else {
    		$link = get_page_link($blogID);
    		$color = df_title_color($blogID, 'page', false);
    	}
    
    ?>		
    	<?php echo balanceTags($before_widget); ?>
    		<?php 
    			if($title) { 
    				echo balanceTags($before_title);
    				echo esc_html__($title);
    				echo balanceTags($after_title);
    			}
    		?>
    		<div class="tb_widget_timeline clearfix">
    			<?php if ($the_query->have_posts()) : while ($the_query->have_posts()) : $the_query->the_post(); ?>
    			<?php
    
                    //categories
                    $categories = get_the_category($the_query->post->ID);
                    $catCount = count($categories);
                    //select a random category id
                    $id = rand(0,$catCount-1);
                    if(isset($categories[$id]->term_id)) {
                        $titleColor = df_title_color($categories[$id]->term_id, "category", false); 
                    } else {
                        $titleColor = df_get_option(THEME_NAME."_pageColorScheme");
                    }
    
    			?>
                    <!-- Article -->
                    <article>
                        <span class="date"><?php
                                                echo get_post_meta($the_query->post->ID, '_custom_date_value_key', true); 
                                            ?>
                        </span>
                        <div class="timeline_content">
                            <i class="fa fa-clock-o" style="color: <?php echo esc_attr__($titleColor);?>"></i>
                            <h3><a href="<?php the_permalink();?>"><?php the_title();?></a></h3>
                        
                                     <div class="text_map_marker"><?php
                                                echo get_post_meta($the_query->post->ID, '_custom_date_value_site', true); 
                                            ?>
                                                                </div>    
                                    
    
                        </div>
                    </article><!-- End Article -->
    			<?php endwhile; else: ?>
    				<p><?php  esc_html_e( 'No posts where found' , THEME_NAME);?></p>
    			<?php endif; ?>
    		</div>
    
    	<?php echo balanceTags($after_widget); ?>
    
          <?php
    	}
    }
    ?>

    Подскажите, пожалуйста, где править?

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • <select multiple="multiple" name="<?php echo esc_attr__($this->get_field_name('cat')); ?>" style="width: 100%; clear: both; margin: 0;">
                    <option value=""><?php esc_html_e("Latest News", THEME_NAME);?></option>
    				<?php foreach($args as $ar) { ?>
    					<option value="<?php echo esc_attr__($ar->term_id); ?>" <?php if($ar->term_id==$cat)  {echo 'selected="selected"';} ?>><?php echo esc_html__($ar->cat_name); ?></option>
    				<?php } ?>
    			</select>

    Прописал так. Теперь выбрать можно несколько, но выводится в итоге всё ровно одна категория. Как это можно пофиксить?

    • Ответ изменён 4 года, 2 месяца назад пользователем Acme1994.

    что вы хотите вывести ссылки на ваши категории? содержание?
    если просто ссылки, то создайте меню из нужных категорий и выводите через виджет «произвольное меню». раз уж вас чемто не устраивает сам виджет «рубрики»

    Да, ссылки и еще мелкую информацию под ссылкой и слева от ссылки. Вот скриншот текущего вида:
    Текущий вид
    выбор категорий

    То есть, в админке выбрав две и более категории — он не отображает их в виджете. Почему?

Просмотр 3 ответов — с 1 по 3 (всего 3)
  • Тема «Добавить категории в виджет» закрыта для новых ответов.