'anderson_category_posts_grid', 'description' => esc_html__( 'Displays your posts from a selected category in a grid layout. Please use this widget ONLY in the Magazine Homepage widget area.', 'anderson-lite' ), 'customize_selective_refresh' => true, ); parent::__construct('anderson_category_posts_grid', sprintf( esc_html__( 'Category Posts: Grid (%s)', 'anderson-lite' ), 'Anderson' ), $widget_ops); // 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' ) ); } public function delete_widget_cache() { wp_cache_delete('widget_anderson_category_posts_grid', 'widget'); } private function default_settings() { $defaults = array( 'title' => '', 'category' => 0, 'number' => 6, 'thumbnails' => true, 'category_link' => false, 'postmeta' => true ); return $defaults; } // Display Widget function widget( $args, $instance ) { $cache = array(); // Get Widget Object Cache if ( ! $this->is_preview() ) { $cache = wp_cache_get( 'widget_anderson_category_posts_grid', '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() ); // Add Widget Title Filter $widget_title = apply_filters('widget_title', $settings['title'], $settings, $this->id_base); // Output echo $args['before_widget']; ?>
is_preview() ) { $cache[ $this->id ] = ob_get_flush(); wp_cache_set( 'widget_anderson_category_posts_grid', $cache, 'widget' ); } else { ob_end_flush(); } } // Render Widget Content function render( $settings ) { // Get latest posts from database $query_arguments = array( 'posts_per_page' => (int)$settings['number'], 'ignore_sticky_posts' => true, 'cat' => (int)$settings['category'] ); $posts_query = new WP_Query( $query_arguments ); $i = 0; // Select Layout of Grid Posts $settings['layout'] = ( $settings['thumbnails'] == true ? 'small-post' : 'big-post' ); $image = ( $settings['thumbnails'] == true ? 'anderson-category-posts-widget-small' : 'anderson-category-posts-widget-big' ); // Check if there are posts if( $posts_query->have_posts() ) : // Limit the number of words for the excerpt add_filter('excerpt_length', 'anderson_category_posts_widgets_excerpt_length'); // Display Posts while( $posts_query->have_posts() ) : $posts_query->the_post(); // Open new Row on the Grid if ( $i % 2 == 0) : ?> display_meta_date( $settings ); ?> id_base); if( !empty( $widget_title ) ) : echo $args['before_title']; // Link Category Title if( $settings['category_link'] == true ) : // Check if "All Categories" is selected if( $settings['category'] == 0 ) : $link_title = esc_html__( 'View all posts', 'anderson-lite' ); // Set Link URL to always point to latest posts page if ( get_option( 'show_on_front' ) == 'page' ) : $link_url = esc_url( get_permalink( get_option( 'page_for_posts' ) ) ); else : $link_url = esc_url( home_url('/') ); endif; else : // Set Link URL and Title for Category $link_title = sprintf( esc_html__( 'View all posts from category %s', 'anderson-lite' ), get_cat_name( $settings['category'] ) ); $link_url = esc_url( get_category_link( $settings['category'] ) ); endif; // Display linked Widget Title echo ''. $widget_title . ''; else: echo $widget_title; endif; echo $args['after_title']; endif; } function update( $new_instance, $old_instance ) { $instance = $old_instance; $instance['title'] = sanitize_text_field($new_instance['title'] ); $instance['category'] = (int)$new_instance['category']; $instance['number'] = (int)$new_instance['number']; $instance['thumbnails'] = !empty($new_instance['thumbnails'] ); $instance['category_link'] = !empty($new_instance['category_link'] ); $instance['postmeta'] = !empty($new_instance['postmeta'] ); $this->delete_widget_cache(); return $instance; } function form( $instance ) { // Get Widget Settings $settings = wp_parse_args( $instance, $this->default_settings() ); ?>
esc_html__( 'All Categories', 'anderson-lite' ),
'show_count' => true,
'hide_empty' => false,
'selected' => $settings['category'],
'name' => $this->get_field_name('category'),
'id' => $this->get_field_id('category')
);
wp_dropdown_categories( $args );
?>