'beetle-magazine-columns-widget', 'description' => esc_html__( 'Displays your posts from two selected categories.', 'beetle' ), 'customize_selective_refresh' => true, ) // Args. ); } /** * Set default settings of the widget */ private function default_settings() { $defaults = array( 'category_one' => 0, 'category_two' => 0, 'category_one_title' => esc_html__( 'Left Category', 'beetle' ), 'category_two_title' => esc_html__( 'Right Category', 'beetle' ), 'number' => 4, 'highlight_post' => true, ); return $defaults; } /** * Main Function to display the widget * * @uses this->render() * * @param array $args / Parameters from widget area created with register_sidebar(). * @param array $instance / Settings for this widget instance. */ function widget( $args, $instance ) { // Start Output Buffering. ob_start(); // Get Widget Settings. $settings = wp_parse_args( $instance, $this->default_settings() ); // Output. echo $args['before_widget']; ?>
render( $args, $settings ); ?>
magazine_posts() * @used-by this->widget() * * @param array $args / Parameters from widget area created with register_sidebar(). * @param array $settings / Settings for this widget instance. */ function render( $args, $settings ) { // Get cached post ids. $post_ids_category_one = beetle_get_magazine_post_ids( $this->id . '-left-category', $settings['category_one'], $settings['number'] ); $post_ids_category_two = beetle_get_magazine_post_ids( $this->id . '-right-category', $settings['category_two'], $settings['number'] ); ?>
category_title( $args, $settings, $settings['category_one'], $settings['category_one_title'] ); ?>
magazine_posts( $settings, $post_ids_category_one, $settings['number'] ); ?>
category_title( $args, $settings, $settings['category_two'], $settings['category_two_title'] ); ?>
magazine_posts( $settings, $post_ids_category_two, $settings['number'] ); ?>
render() * * @param array $settings / Settings for this widget instance. * @param array $post_ids / Array with post ids. */ function magazine_posts( $settings, $post_ids, $number_of_posts ) { // Fetch posts from database. $query_arguments = array( 'post__in' => $post_ids, 'posts_per_page' => absint( $number_of_posts ), 'ignore_sticky_posts' => true, 'no_found_rows' => true, ); $posts_query = new WP_Query( $query_arguments ); // Check if there are posts. if ( $posts_query->have_posts() ) : // Limit the number of words for the excerpt. add_filter( 'excerpt_length', 'beetle_magazine_posts_excerpt_length' ); // Display Posts. while ( $posts_query->have_posts() ) : $posts_query->the_post(); // Display first post differently. if ( true === $settings['highlight_post'] and 0 === $posts_query->current_post ) : get_template_part( 'template-parts/widgets/magazine-large-post', 'columns' ); else : get_template_part( 'template-parts/widgets/magazine-small-post', 'columns' ); endif; endwhile; // Remove excerpt filter. remove_filter( 'excerpt_length', 'beetle_magazine_posts_excerpt_length' ); endif; // Reset Postdata. wp_reset_postdata(); } /** * Displays Category Widget Title * * @param array $args / Parameters from widget area created with register_sidebar(). * @param array $settings / Settings for this widget instance. * @param int $category_id / ID of the selected category. * @param String $category_title / Category Title. */ function category_title( $args, $settings, $category_id, $category_title ) { // Add Widget Title Filter. $widget_title = apply_filters( 'widget_title', $category_title, $settings, $this->id_base ); if ( ! empty( $widget_title ) ) : // Link Widget Title to category archive when possible. $widget_title = beetle_magazine_widget_title( $widget_title, $category_id ); // Display Widget Title. echo $args['before_title'] . $widget_title . $args['after_title']; endif; } /** * Update Widget Settings * * @param array $new_instance / New Settings for this widget instance. * @param array $old_instance / Old Settings for this widget instance. * @return array $instance */ function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['category_one_title'] = sanitize_text_field( $new_instance['category_one_title'] ); $instance['category_one'] = (int) $new_instance['category_one']; $instance['category_two_title'] = sanitize_text_field( $new_instance['category_two_title'] ); $instance['category_two'] = (int) $new_instance['category_two']; $instance['number'] = (int) $new_instance['number']; $instance['highlight_post'] = ! empty( $new_instance['highlight_post'] ); beetle_flush_magazine_post_ids(); return $instance; } /** * Displays Widget Settings Form in the Backend * * @param array $instance / Settings for this widget instance. */ function form( $instance ) { // Get Widget Settings. $settings = wp_parse_args( $instance, $this->default_settings() ); ?>


esc_html__( 'All Categories', 'beetle' ), 'show_count' => true, 'hide_empty' => false, 'selected' => $settings['category_one'], 'name' => $this->get_field_name( 'category_one' ), 'id' => $this->get_field_id( 'category_one' ), ); wp_dropdown_categories( $args ); ?>


esc_html__( 'All Categories', 'beetle' ), 'show_count' => true, 'hide_empty' => false, 'selected' => $settings['category_two'], 'name' => $this->get_field_name( 'category_two' ), 'id' => $this->get_field_id( 'category_two' ), ); wp_dropdown_categories( $args ); ?>