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' ),
'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(
'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 ); ?>
' . $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( $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 '';
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 );
?>