'napoli_magazine_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.', 'napoli' ), 'customize_selective_refresh' => true, ) // 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( 'title' => '', 'category' => 0, 'layout' => 'three-columns', 'number' => 6, ); 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_napoli_magazine_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() ); // Set Widget class. $class = ( 'three-columns' === $settings['layout'] ) ? 'magazine-grid-three-columns' : 'magazine-grid-two-columns'; // Output. echo $args['before_widget']; ?>
widget_title( $args, $settings ); ?>
render( $settings ); ?>
is_preview() ) { $cache[ $this->id ] = ob_get_flush(); wp_cache_set( 'widget_napoli_magazine_posts_grid', $cache, 'widget' ); } else { ob_end_flush(); } } // widget() /** * Renders the Widget Content * * Switches between two or three column layout style based on widget settings * * @uses this->magazine_posts_two_column_grid() or this->magazine_posts_three_column_grid() * @used-by this->widget() * * @param array $settings / Settings for this widget instance. */ 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; // Set template. $template = ( 'three-columns' === $settings['layout'] ) ? 'medium-post' : 'large-post'; // Check if there are posts. if ( $posts_query->have_posts() ) : // Display Posts. while ( $posts_query->have_posts() ) : $posts_query->the_post(); ?>
id_base ); if ( ! empty( $widget_title ) ) : // Link Category Title. if ( $settings['category'] > 0 ) : // Set Link URL and Title for Category. $link_title = sprintf( __( 'View all posts from category %s', 'napoli' ), get_cat_name( $settings['category'] ) ); $link_url = get_category_link( $settings['category'] ); // 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; } // widget_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['title'] = sanitize_text_field( $new_instance['title'] ); $instance['category'] = (int) $new_instance['category']; $instance['layout'] = esc_attr( $new_instance['layout'] ); $instance['number'] = (int) $new_instance['number']; $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', 'napoli' ), '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 ); ?>