Latest Events Widget
Latest Events Widget
class Events_Widget extends WP_Widget {
public function __construct() {
parent::__construct(
'events_widget',
__( 'Latest Events Widget', 'text_domain' ),
array(
'description' => __( 'Show the latest events.', 'text_domain' ),
'classname' => 'widget_events',
)
);
}
public function widget( $args, $instance ) {
$title = ( ! empty( $instance['events_title'] ) ) ? $instance['events_title'] : __( 'Recent Events' );
$number = ( ! empty( $instance['events_number'] ) ) ? absint( $instance['events_number'] ) : 5;
if ( ! $number )
$number = 5;
// Before widget tag
echo $args['before_widget'];
// Title
if ( ! empty( $title ) ) {
echo $args['before_title'] . $title . $args['after_title'];
}
// Recent Posts
$query = new WP_Query( array (
'post_type' => 'events',
'posts_per_page' => $number,
'ignore_sticky_posts' => true
) );
if ( $query->have_posts() ) :
echo '<ul>';
while ( $query->have_posts() ) : $query->the_post();
$post_title = ( get_the_title() ? get_the_title() : get_the_ID() );
echo '<li>';
echo '<strong><a href="' . get_permalink() . '">' . $post_title . '</a></strong><br>' . get_the_date() . '</span>';
echo '</li>';
endwhile;
echo '</ul>';
endif;
wp_reset_postdata();
// After widget tag
echo $args['after_widget'];
}
public function form( $instance ) {
// Set default values
$instance = wp_parse_args( (array) $instance, array(
'events_title' => '',
'events_number' => '',
) );
// Retrieve an existing value from the database
$events_title = !empty( $instance['events_title'] ) ? $instance['events_title'] : '';
$events_number = !empty( $instance['events_number'] ) ? $instance['events_number'] : '';
// Form fields
echo '<p>';
echo ' <label for="' . $this->get_field_id( 'events_title' ) . '" class="events_title_label">' . __( 'Title', 'text_domain' ) . '</label>';
echo ' <input type="text" id="' . $this->get_field_id( 'events_title' ) . '" name="' . $this->get_field_name( 'events_title' ) . '" class="widefat" placeholder="' . esc_attr__( '', 'text_domain' ) . '" value="' . esc_attr( $events_title ) . '">';
echo ' <span class="description">' . __( 'The widget title.', 'text_domain' ) . '</span>';
echo '</p>';
echo '<p>';
echo ' <label for="' . $this->get_field_id( 'events_number' ) . '" class="events_number_label">' . __( 'Events to show', 'text_domain' ) . '</label>';
echo ' <input type="number" id="' . $this->get_field_id( 'events_number' ) . '" name="' . $this->get_field_name( 'events_number' ) . '" class="widefat" placeholder="' . esc_attr__( '', 'text_domain' ) . '" value="' . esc_attr( $events_number ) . '">';
echo ' <span class="description">' . __( 'The number of events to show.', 'text_domain' ) . '</span>';
echo '</p>';
}
public function update( $new_instance, $old_instance ) {
$instance = $old_instance;
$instance['events_title'] = !empty( $new_instance['events_title'] ) ? strip_tags( $new_instance['events_title'] ) : '';
$instance['events_number'] = !empty( $new_instance['events_number'] ) ? strip_tags( $new_instance['events_number'] ) : '';
return $instance;
}
}
function events_register_widgets() {
register_widget( 'Events_Widget' );
}
add_action( 'widgets_init', 'events_register_widgets' );