register();
}
/**
* Register Widget
*/
public function register() {
$widget_ops = array(
'classname' => $this->widget_cssclass,
'description' => $this->widget_description
);
parent::__construct( $this->widget_id, $this->widget_name, $widget_ops );
add_action( 'save_post', array( $this, 'flush_widget_cache' ) );
add_action( 'deleted_post', array( $this, 'flush_widget_cache' ) );
add_action( 'switch_theme', array( $this, 'flush_widget_cache' ) );
}
/**
* get_cached_widget function.
*/
function get_cached_widget( $args ) {
$cache = wp_cache_get( $this->widget_id, 'widget' );
if ( ! is_array( $cache ) )
$cache = array();
if ( isset( $cache[ $args['widget_id'] ] ) ) {
echo $cache[ $args['widget_id'] ];
return true;
}
return false;
}
/**
* Cache the widget
*/
public function cache_widget( $args, $content ) {
$cache[ $args['widget_id'] ] = $content;
wp_cache_set( $this->widget_id, $cache, 'widget' );
}
/**
* Flush the cache
* @return [type]
*/
public function flush_widget_cache() {
wp_cache_delete( $this->widget_id, 'widget' );
}
/**
* update function.
*
* @see WP_Widget->update
* @access public
* @param array $new_instance
* @param array $old_instance
* @return array
*/
function update( $new_instance, $old_instance ) {
$instance = $old_instance;
if ( ! $this->settings )
return $instance;
foreach ( $this->settings as $key => $setting ) {
$instance[ $key ] = sanitize_text_field( $new_instance[ $key ] );
}
$this->flush_widget_cache();
return $instance;
}
/**
* form function.
*
* @see WP_Widget->form
* @access public
* @param array $instance
* @return void
*/
function form( $instance ) {
if ( ! $this->settings )
return;
foreach ( $this->settings as $key => $setting ) {
$value = isset( $instance[ $key ] ) ? $instance[ $key ] : $setting['std'];
switch ( $setting['type'] ) {
case 'text' :
?>
widget_cssclass = 'event_manager widget_recent_events';
$this->widget_description = __( 'Display a list of recent listings on your site, optionally matching a keyword and location.', 'wp-event-manager' );
$this->widget_id = 'widget_recent_events';
$this->widget_name = sprintf( __( 'Recent %s', 'wp-event-manager' ), $wp_post_types['event_listing']->labels->name );
$this->settings = array(
'title' => array(
'type' => 'text',
'std' => sprintf( __( 'Recent %s', 'wp-event-manager' ), $wp_post_types['event_listing']->labels->name ),
'label' => __( 'Title', 'wp-event-manager' )
),
'keyword' => array(
'type' => 'text',
'std' => '',
'label' => __( 'Keyword', 'wp-event-manager' )
),
'location' => array(
'type' => 'text',
'std' => '',
'label' => __( 'Location', 'wp-event-manager' )
),
'number' => array(
'type' => 'number',
'step' => 1,
'min' => 1,
'max' => '',
'std' => 10,
'label' => __( 'Number of listings to show', 'wp-event-manager' )
),
'order' => array(
'type' => 'select',
'std' => 10,
'label' => __( 'Order by', 'wp-event-manager' ),
'options'=> array(
'ASC' => __( 'Ascending (ASC)', 'wp-event-manager' ),
'DESC' => __( 'Descending (DESC)', 'wp-event-manager' )
)
)
);
$this->register();
}
/**
* widget function.
*
* @see WP_Widget
* @access public
* @param array $args
* @param array $instance
* @return void
*/
public function widget( $args, $instance ) {
if ( $this->get_cached_widget( $args ) ) {
return;
}
ob_start();
extract( $args );
if (! empty( $instance['title'] ) )
$title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base ) ;
else
$title = sprintf( __( 'Recent Events', 'wp-event-manager' ));
if (! empty( $instance['number'] ) )
$number = absint( $instance['number'] );
else
$number = 4 ;
$events = get_event_listings( array(
'search_location' => isset( $instance['location'] ) ? $instance['location'] : '',
'search_keywords' => isset( $instance['keyword'] ) ? $instance['keyword'] : '',
'posts_per_page' => $number,
'orderby' => 'event_start_date',
'order' => isset( $instance['order'] ) ? $instance['order'] : 'ASC',
) );
if ( $events->have_posts() ) : ?>
have_posts() ) : $events->the_post(); ?>
cache_widget( $args, $content );
}
}
/**
* Featured Events Widget
*/
class WP_Event_Manager_Widget_Featured_Events extends WP_Event_Manager_Widget {
/**
* Constructor
*/
public function __construct() {
global $wp_post_types;
$this->widget_cssclass = 'event_manager widget_featured_events';
$this->widget_description = __( 'Display a list of featured listings on your site.', 'wp-event-manager' );
$this->widget_id = 'widget_featured_events';
$this->widget_name = sprintf( __( 'Featured %s', 'wp-event-manager' ), $wp_post_types['event_listing']->labels->name );
$this->settings = array(
'title' => array(
'type' => 'text',
'std' => sprintf( __( 'Featured %s', 'wp-event-manager' ), $wp_post_types['event_listing']->labels->name ),
'label' => __( 'Title', 'wp-event-manager' )
),
'number' => array(
'type' => 'number',
'step' => 1,
'min' => 1,
'max' => '',
'std' => 10,
'label' => __( 'Number of listings to show', 'wp-event-manager' )
),
'order' => array(
'type' => 'select',
'std' => 10,
'label' => __( 'Order by', 'wp-event-manager' ),
'options'=> array(
'ASC' => __( 'Ascending (ASC)', 'wp-event-manager' ),
'DESC' => __( 'Descending (DESC)', 'wp-event-manager' )
)
)
);
$this->register();
}
/**
* widget function.
*
* @see WP_Widget
* @access public
* @param array $args
* @param array $instance
* @return void
*/
public function widget( $args, $instance )
{
if ( $this->get_cached_widget( $args ) )
{
return;
}
ob_start();
extract( $args );
if (! empty( $instance['title'] ) )
$title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base ) ;
else
$title = sprintf( __( 'Featured Events', 'wp-event-manager' ));
if (! empty( $instance['number'] ) )
$number = absint( $instance['number'] );
else
$number = 4 ;
$featured_events = get_event_listings( array(
'posts_per_page' => $number,
'orderby' => 'event_start_date',
'order' => isset( $instance['order'] ) ? $instance['order'] : 'ASC',
'featured' => true
)
);
if ( $featured_events->have_posts() ) : ?>
have_posts() ) : $featured_events->the_post(); ?>
cache_widget( $args, $content );
}
}
/**
* This widget display Upcoming Events.
* @since : 1.0.0
*/
class WP_Event_Manager_Widget_Upcoming_Events extends WP_Event_Manager_Widget {
/**
* Sets up the widgets name etc
* Upcoming events Widget class.
* This class handles everything that needs to be handled with the widget:
* the settings, form, display, and update. Nice!
*/
public function __construct() {
global $wp_post_types;
$this->widget_cssclass = 'event_manager widget_upcoming_events';
$this->widget_description = __( 'Display a list of upcoming listings on your site.', 'wp-event-manager' );
$this->widget_id = 'widget_upcoming_events';
$this->widget_name = sprintf( __( 'Upcoming %s', 'wp-event-manager' ), $wp_post_types['event_listing']->labels->name );
$this->settings = array(
'title' => array(
'type' => 'text',
'std' => sprintf( __( 'Upcoming %s', 'wp-event-manager' ), $wp_post_types['event_listing']->labels->name ),
'label' => __( 'Title', 'wp-event-manager' )
),
'number' => array(
'type' => 'number',
'step' => 1,
'min' => 1,
'max' => '',
'std' => 10,
'label' => __( 'Number of listings to show', 'wp-event-manager' )
),
'order' => array(
'type' => 'select',
'std' => 10,
'label' => __( 'Order', 'wp-event-manager' ),
'options'=> array(
'ASC' => __( 'Ascending (ASC)', 'wp-event-manager' ),
'DESC' => __( 'Descending (DESC)', 'wp-event-manager' )
)
),
'orderby' => array(
'type' => 'select',
'std' => 1,
'label' => __( 'Order by', 'wp-event-manager' ),
'options'=> array(
'title' => __( 'Title', 'wp-event-manager' ),
'ID' => __( 'ID', 'wp-event-manager' ),
'name' => __( 'Name', 'wp-event-manager' ),
'modified' => __( 'Modified', 'wp-event-manager' ),
'parent' => __( 'Parent', 'wp-event-manager' ),
'event_start_date' => __( 'Event Start Date', 'wp-event-manager' ),
'rand' => __( 'Random', 'wp-event-manager' )
)
)
);
$this->register();
}
/**
* widget function.
*
* @see WP_Widget
* @access public
* @param array $args
* @param array $instance
* @return void
*/
public function widget( $args, $instance )
{
// if ( $this->get_cached_widget( $args ) )
// {
// return;
// }
ob_start();
extract( $args );
if (! empty( $instance['title'] ) )
$title = apply_filters('widget_title', $instance['title'], $instance, $this->id_base ) ;
else
$title = sprintf( __( 'Upcoming Events', 'wp-event-manager' ));
if (! empty( $instance['number'] ) )
$number = absint( $instance['number'] );
else
$number = 4 ;
$today_date=date('Y-m-d g:i:s');
$args = array(
'post_type' => 'event_listing',
'post_status' => 'publish',
'posts_per_page' => $number,
'orderby' => isset( $instance['orderby'] ) ? $instance['orderby'] : 'event_start_date',
'order' => isset( $instance['order'] ) ? $instance['order'] : 'ASC',
);
$args['meta_query'] = array(
array(
'key' => '_event_start_date',
'value' => $today_date,
'type' => 'DATE',
'compare' => '>'
)
);
if ( 'event_start_date' === $args['orderby'] ) {
$args['orderby'] ='meta_value';
$args['meta_key'] ='_event_start_date';
$args['meta_type'] ='DATE';
}
$events = new WP_Query( $args );
if ( $events->have_posts() ) : ?>
have_posts() ) : $events->the_post(); ?>
cache_widget( $args, $content );
}
} //end of widget class
register_widget( 'WP_Event_Manager_Widget_Recent_Events' );
register_widget( 'WP_Event_Manager_Widget_Featured_Events' );
register_widget( 'WP_Event_Manager_Widget_Upcoming_Events' );