'beetle-magazine-columns-widget',
'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.
);
}
/**
* 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,
);
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 ),
'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 );
?>