Поддержка Плагины Исправить виджет LatestNews от PixieHuge

  • Добрый день.
    В наличии есть виджет Latest News — отображает ВСЕ посты ВСЕХ рубрик с привязкой по дате создания поста: от самой новой и до самой старой. Количество этих тем прописано в коде виджета.
    Меню родительское — Новости (News). У него есть 3 дочерних сабменю. (Условно кат1, кат2, кат3).
    Необходимо исправить виджет таким образом, чтобы при открывании родительской ссылки по-прежнему открывались все посты всех категорий, а при открытии дочерней категории, виджет показывал бы посты только из данной категории.
    Условно:
    localhost/domen/news — родительская
    localhost/domen/categories/cat1 — дочерняя
    localhost/domen/categories/cat2 — дочерняя
    localhost/domen/categories/cat3 — дочерняя

    Код виджета:

    class PixieHugePanel_LatestNews_Widget extends WP_Widget
    {
    
    	/**
    	 * PixieHugePanel_LatestNews_Widget constructor.
    	 */
    	public function __construct()
        {
    		parent::__construct(
    			'pixiehuge_latest_news_widget',
    			// Widget name will appear in UI
    			esc_html__('PixieHuge | Latest News', 'pixiehugepanel'),
    
    			// Widget description
    			array('description' => esc_html__( 'This is your most popular news widget', 'pixiehugepanel' ), 'classname' => 'latest-article')
    		);
    	}
    
    	/**
    	 * @param $args
    	 * @param $instance
    	 */
    	public function widget( $args, $instance )
        {
    		$title = apply_filters( 'widget_title', $instance['title'] );
    
    		// before and after widget arguments are defined by themes
    		echo $args['before_widget'];
    		if(!empty($title))
    			echo $args['before_title'] . $title . $args['after_title'];
    
            $twoPosts = new WP_Query(array(
                'post_type' => 'post',
                'posts_per_page' => 3,
                'order' => 'DESC',
                'orderby' => 'date'
            ));
    
            echo '<ul class="widget">';
            if( $twoPosts->have_posts() ): // if there is posts
    
                while( $twoPosts->have_posts() ): // posts loop
                    $twoPosts->the_post();
    
                    $cat = get_the_category(); // Get categories
                    $categories = ''; // Default = '';
    
                    if(!empty($cat)) {
                        $catNum = 0;
                        foreach( $cat as $catItem ){
                            $categories .= '<a href="' . esc_url(get_category_link($catItem->term_id)) . '" class="category">' .esc_attr($catItem->name). '</a>';
                            $catNum ++;
                            if(count($cat) != $catNum) {
                                $categories .='<i class="bull">&bull;</i> ';
                            }
                        }
                    } // if is not empty
    
                    // Show Categories
                    $cats = $categories;
    
                    // Get title
                    $getTitle = get_the_title();
            ?>
                <li>
                    <div class="thumbnail" style="background-image: url('<?php the_post_thumbnail_url( get_the_ID(), 'pixiehuge-widget-thumbnail'); ?>');"></div>
                    <div class="details">
                        <span class="categories">
                            <?php echo $cats; ?>
                        </span>
                        <a href="<?php the_permalink(); ?>" class="title">
                            <?php the_title(); ?>
                        </a>
                        <span class="date"><?php echo esc_attr(get_the_date()); ?></span>
                    </div>
                </li>
            <?php
                endwhile;  // end post loop
    
            else: // if there is no posts
                esc_html_e('There is no posts, yet.', 'pixiehugepanel');
            endif;
    
            echo '</ul>';
    
    		// This is where you run the code and display the output
    		echo $args['after_widget'];
    	}
    
    	/**
    	 * @param $instance
    	 */
    	public function form( $instance )
        {
    		if (isset($instance[ 'title' ])) {
    			$title = $instance[ 'title' ];
    		}
    		else { 
    			$title = esc_html__( 'Latest News', 'pixiehugepanel' );
    		}
    		// Widget admin form
    		?>
    			<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 
    	}
    
    	/**
    	 * @param $new_instance
    	 * @param $old_instance
    	 *
    	 * @return array
    	 */
    	public function update( $new_instance, $old_instance )
        {
    		$instance = array();
    		$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? strip_tags( $new_instance['title'] ) : '';
    		return $instance;
    	}
    }

    Пробовал вручную вписывать ID категорий, но это неудобно. Таким образом мне нужно сделать 3 отдельных виджета, с указанием ID категорий. Пробовал так:

    <?php
    if ( have_posts() ) : // если имеются записи в блоге.
      query_posts('cat=55,66');   // указываем ID рубрик, которые необходимо вывести.
      while (have_posts()) : the_post();  // запускаем цикл обхода материалов блога
    ?>
    <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
    <?php the_content();
      endwhile;  // завершаем цикл.
    endif;
    /* Сбрасываем настройки цикла. По коду будет идти еще один цикл, чтобы не было сбоя. */
    wp_reset_query();                
    ?>

    Я не программист, исключительно гугл и знания математики. Извините, если спрашиваю, на ваш взгляд, очевидные вещи. Поиском не нашел похожие ответы. Буду благодарен за помощь.

Просмотр 1 ответа (всего 1)
  • Стоит вопросы с плагинами или сторонней темой задавать их первоисточнику. У вас это LatestNews от PixieHuge

    Тут конечно ребята/девчата грамотные сидят. Но первоисточник — стандарт для первой попытки найти ответ.

    И по своему опыту — бесплатно разбираться в простыне чужого кода желающих всегда мало. Но есть раздел с платной помощью тут на форуме — можете попытать счастья там

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