Name ), // Name array( 'classname' => 'beetle_magazine_posts_columns', 'description' => esc_html__( 'Displays your posts from two selected categories. Please use this widget ONLY in the Magazine Homepage widget area.', 'beetle' ) ) // Args ); // Delete Widget Cache on certain actions add_action( 'save_post', array( $this, 'delete_widget_cache' ) ); add_action( 'deleted_post', array( $this, 'delete_widget_cache' ) ); add_action( 'switch_theme', array( $this, 'delete_widget_cache' ) ); } /** * Set default settings of the widget */ private function default_settings() { $defaults = array( 'category_one' => 0, 'category_two' => 0, 'category_one_title' => '', 'category_two_title' => '', 'number' => 4, 'highlight_post' => true, 'meta_date' => true, 'meta_author' => false, ); 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 ) { $cache = array(); // Get Widget Object Cache if ( ! $this->is_preview() ) { $cache = wp_cache_get( 'widget_beetle_magazine_posts_columns', 'widget' ); } if ( ! is_array( $cache ) ) { $cache = array(); } // Display Widget from Cache if exists if ( isset( $cache[ $this->id ] ) ) { echo $cache[ $this->id ]; return; } // Start Output Buffering ob_start(); // Get Widget Settings $settings = wp_parse_args( $instance, $this->default_settings() ); // Output echo $args['before_widget']; ?>
render( $args, $settings ); ?>
is_preview() ) { $cache[ $this->id ] = ob_get_flush(); wp_cache_set( 'widget_beetle_magazine_posts_columns', $cache, 'widget' ); } else { ob_end_flush(); } } // widget() /** * Renders the Widget Content * * Displays left and right column with posts * * @uses this->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 ) { ?>
category_title( $args, $settings, $settings['category_one'], $settings['category_one_title'] ); ?>
magazine_posts( $settings, $settings['category_one'] ); ?>
category_title( $args, $settings, $settings['category_two'], $settings['category_two_title'] ); ?>
magazine_posts( $settings, $settings['category_two'] ); ?>
render() * * @param array $settings / Settings for this widget instance * @param int $category_id / ID of the selected category */ function magazine_posts( $settings, $category_id ) { // Get latest posts from database $query_arguments = array( 'posts_per_page' => (int)$settings['number'], 'ignore_sticky_posts' => true, 'cat' => (int)$category_id ); $posts_query = new WP_Query( $query_arguments ); $i = 0; // 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(); if( true == $settings['highlight_post'] and ( isset($i) and $i == 0 ) ) : ?>
>
', esc_url( get_permalink() ) ), '' ); ?> entry_meta( $settings ); ?>
>
', esc_url( get_permalink() ) ), '' ); ?> entry_meta( $settings ); ?>
' . $postmeta . ''; } } // entry_meta() /** * Displays Category Widget 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 Category Title if( true == $settings['category_link'] and $category_id > 0 ) : // Set Link URL and Title for Category $link_title = sprintf( esc_html__( 'View all posts from category %s', 'beetle' ), get_cat_name( $category_id ) ); $link_url = esc_url( get_category_link( $category_id ) ); // Display Widget Title with link to category archive echo '
'; echo '

'. $widget_title . '

'; echo '
'; else: // Display default Widget Title without link echo $args['before_title'] . $widget_title . $args['after_title']; endif; endif; } // category_title() /** * 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']); $instance['meta_date'] = !empty($new_instance['meta_date']); $instance['meta_author'] = !empty($new_instance['meta_author']); $this->delete_widget_cache(); 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 ); ?>