Исправить виджет 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">•</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(); ?>
Я не программист, исключительно гугл и знания математики. Извините, если спрашиваю, на ваш взгляд, очевидные вещи. Поиском не нашел похожие ответы. Буду благодарен за помощь.
- Тема «Исправить виджет LatestNews от PixieHuge» закрыта для новых ответов.