Ejemplo n.º 1
0
 /**
  * Echo the widget content.
  *
  * @since 0.1.8
  *
  * @param array $args Display arguments including before_title, after_title, before_widget, and after_widget.
  * @param array $instance The settings for the particular instance of the widget.
  */
 public function widget($args, $instance)
 {
     ThemeMix_Featured_Content::$widget_instance = array_merge($instance, array('widget_args' => $args));
     global $wp_query, $_genesis_displayed_ids, $gs_counter;
     extract($args);
     $instance['widget_args'] = $args;
     //* Add current page ID
     $_genesis_displayed_ids[] = get_the_ID();
     //* Merge with defaults
     $instance = wp_parse_args((array) $instance, $this->defaults);
     do_action('thememix_featured_content_before_widget', $instance);
     ThemeMix_Featured_Content::before_widget($before_widget, $instance['custom_field']);
     add_filter('post_class', array('ThemeMix_Featured_Content', 'post_class'));
     if (!empty($instance['posts_offset']) && !empty($instance['paged'])) {
         add_filter('post_limits', array('ThemeMix_Featured_Content', 'post_limit'));
     } else {
         remove_filter('post_limits', array('ThemeMix_Featured_Content', 'post_limit'));
     }
     //* Set up the author bio
     if (!empty($instance['title'])) {
         do_action('thememix_featured_content_before_widget_title', $instance);
         echo $before_title . apply_filters('thememix_featured_content_widget_title', apply_filters('widget_title', $instance['title'], $instance, $this->id_base), $instance, $this->id_base) . $after_title;
         do_action('thememix_featured_content_after_widget_title', $instance);
     }
     $q_args = array();
     //* Page ID
     if (!empty($instance['page_id'])) {
         $q_args['page_id'] = $instance['page_id'];
     }
     //* Term Args
     $posts_term = array();
     if (!empty($instance['posts_term'])) {
         $posts_term = explode(',', $instance['posts_term']);
         if ($posts_term['0'] == 'category') {
             $posts_term['0'] = 'category_name';
         }
         if ($posts_term['0'] == 'post_tag') {
             $posts_term['0'] = 'tag';
         }
         if (isset($posts_term['1'])) {
             $q_args[$posts_term['0']] = $posts_term['1'];
         }
     }
     if (!empty($posts_term['0'])) {
         if ($posts_term['0'] == 'category_name') {
             $taxonomy = 'category';
         } elseif ($posts_term['0'] == 'tag') {
             $taxonomy = 'post_tag';
         } else {
             $taxonomy = $posts_term['0'];
         }
     } else {
         $taxonomy = 'category';
     }
     $instance['posts_term'] = $posts_term;
     $instance['taxonomy'] = $taxonomy;
     ThemeMix_Featured_Content::$widget_instance = $instance;
     if (!empty($instance['exclude_terms'])) {
         $exclude_terms = explode(',', str_replace(' ', '', $instance['exclude_terms']));
         $q_args[$taxonomy . '__not_in'] = $exclude_terms;
     }
     //* Paged arg
     $page = '';
     if (!empty($instance['paged'])) {
         $page = get_query_var('paged');
     }
     //* Offset
     if (!empty($instance['posts_offset'])) {
         global $gs_offset;
         $gs_offset = $instance['posts_offset'];
         $q_args['offset'] = $gs_offset;
     }
     //* Post IDs
     if (!empty($instance['post_id'])) {
         $IDs = explode(',', str_replace(' ', '', $instance['post_id']));
         if ($instance['include_exclude'] == 'include') {
             $q_args['post__in'] = $IDs;
         } else {
             $q_args['post__not_in'] = $IDs;
         }
     }
     //* Exclude displayed IDs from this loop?
     if (!empty($instance['exclude_displayed'])) {
         if (isset($q_args['post__not_in']) && is_array($q_args['post__not_in'])) {
             $q_args['post__not_in'] = array_unique(array_merge($q_args['post__not_in'], (array) $_genesis_displayed_ids));
         } else {
             $q_args['post__not_in'] = (array) $_genesis_displayed_ids;
         }
     }
     //* Before Loop Action
     if (has_filter('gs_before_loop')) {
         ThemeMix_Featured_Content::action('gs_before_loop', $instance);
     }
     ThemeMix_Featured_Content::action('thememix_featured_content_before_loop', $instance);
     if (0 === $instance['posts_num']) {
         return;
     }
     //* Optimize Query
     if (!empty($instance['optimize'])) {
         $q_args['cache_results'] = false;
         if (empty($instance['paged']) && empty($instance['show_paged'])) {
             $q_args['no_found_rows'] = true;
         }
     }
     $instance['q_args'] = $q_args;
     ThemeMix_Featured_Content::$widget_instance = $instance;
     $pt = 'any' == $instance['post_type'] ? ThemeMix_Featured_Content::get_post_types() : $instance['post_type'];
     // Get number of items to display
     $key = str_replace('featured-content-', '', $instance['widget_args']['widget_id']);
     $settings = get_option('widget_featured-content');
     if (isset($settings[$key]['buddypress-group']) && 1 == $settings[$key]['buddypress-group']) {
         $number_of_items = $settings[$key]['buddypress-group-count'];
     } else {
         $number_of_items = $instance['posts_num'];
     }
     $query_args = array_merge($q_args, array('post_type' => $pt, 'posts_per_page' => $number_of_items, 'orderby' => $instance['orderby'], 'order' => $instance['order'], 'meta_key' => $instance['meta_key'], 'paged' => $page));
     $instance['query_args'] = $query_args;
     ThemeMix_Featured_Content::$widget_instance = $instance;
     $query_args = apply_filters('thememix_featured_content_query_args', $query_args, $instance);
     // get transient
     if (!empty($instance['optimize']) && !empty($instance['custom_field'])) {
         if (!empty($instance['delete_transients'])) {
             ThemeMix_Featured_Content::delete_transient('thememix_featured_content_main_' . $instance['custom_field']);
         }
         // Get transient, set transient if transient does not exist
         if (false === ($thememix_featured_content_query = ThemeMix_Featured_Content::get_transient('thememix_featured_content_main_' . $instance['custom_field']))) {
             $thememix_featured_content_query = new WP_Query($query_args);
             $time = !empty($instance['transients_time']) ? $instance['transients_time'] : 60 * 60 * 24;
             ThemeMix_Featured_Content::set_transient('thememix_featured_content_main_' . $instance['custom_field'], $thememix_featured_content_query, $time);
         } else {
             $thememix_featured_content_query = apply_filters('thememix_featured_content_query_results', $thememix_featured_content_query, $instance);
         }
     } else {
         $thememix_featured_content_query = apply_filters('thememix_featured_content_query_results', new WP_Query($query_args));
     }
     if ($thememix_featured_content_query->have_posts()) {
         while ($thememix_featured_content_query->have_posts()) {
             $thememix_featured_content_query->the_post();
             $_genesis_displayed_ids[] = get_the_ID();
             ThemeMix_Featured_Content::framework($instance);
         }
         ThemeMix_Featured_Content::action('thememix_featured_content_endwhile', $instance);
     }
     $gs_counter = 0;
     ThemeMix_Featured_Content::action('thememix_featured_content_after_loop', $instance);
     //* Restore original query
     wp_reset_query();
     ThemeMix_Featured_Content::action('thememix_featured_content_after_loop_reset', $instance);
     echo $after_widget;
     remove_filter('post_class', array('ThemeMix_Featured_Content', 'post_class'));
     remove_filter('post_limits', array('ThemeMix_Featured_Content', 'post_limit'));
 }