/**
 * Limit the list of tickets to open.
 *
 * When tickets are filtered by post status it makes no sense
 * to display tickets that are already closed. We hereby limit
 * the list to open tickets.
 *
 * @since  3.1.3
 *
 * @param object $query WordPress main query
 *
 * @return boolean True if the tickets were filtered, false otherwise
 */
function wpas_limit_open($query)
{
    /* Make sure this is the main query */
    if (!$query->is_main_query()) {
        return false;
    }
    /* Make sure this is the admin screen */
    if (!is_admin()) {
        return false;
    }
    /* Make sure we only alter our post type */
    if (!isset($_GET['post_type']) || 'ticket' !== $_GET['post_type']) {
        return false;
    }
    if (isset($_GET['post_status']) && array_key_exists($_GET['post_status'], wpas_get_post_status()) || !isset($_GET['post_status']) && true === (bool) wpas_get_option('hide_closed', false)) {
        // We need to update the original meta_query and not replace it to avoid filtering issues
        $meta_query = $query->get('meta_query');
        if (!is_array($meta_query)) {
            $meta_query = array_filter((array) $meta_query);
        }
        $meta_query[] = array('key' => '_wpas_status', 'value' => 'open', 'compare' => '=', 'type' => 'CHAR');
        $query->set('meta_query', $meta_query);
        return true;
    } else {
        return false;
    }
}
 /**
  * Add sort to admin table list.
  *
  * Add sort by custom field to admin table with list of entries
  *
  * @since 1.7
  *
  * @param object $query QP Query object
  *
  */
 public function pre_get_posts($query)
 {
     /**
      * do not run in admin
      */
     if (!is_admin()) {
         return;
     }
     /**
      * check is main query and is set orderby and post_type
      */
     if ($query->is_main_query() && ($orderby = $query->get('orderby')) && ($post_type = $query->get('post_type'))) {
         $custom_post_types = wpcf_get_active_custom_types();
         /**
          * this CPT exists as a Types CPT?
          */
         if (!isset($custom_post_types[$post_type])) {
             return;
         }
         /**
          * set up meta_key if this CPT has this field to sort
          */
         if ($this->check_has_custom_fields($custom_post_types[$post_type], $orderby)) {
             $query->set('meta_key', $orderby);
         }
     }
 }
Example #3
0
/**
 * Filter AudioTheme archive requests.
 *
 * Set the number of posts per archive page.
 *
 * @since 1.4.2
 * @todo Refactor to make it easier to retrieve settings and to define defaults in a single location.
 * @todo Implement a "rows" setting for calculating "posts_per_archive_page".
 *
 * @param object $query The main WP_Query object. Passed by reference.
 */
function audiotheme_archive_query($query)
{
    if (is_admin() || !$query->is_main_query() || !(is_post_type_archive() || is_tax())) {
        return;
    }
    $post_type = get_audiotheme_current_archive_post_type();
    if (empty($post_type)) {
        return;
    }
    // Determine if the 'posts_per_archive_page' setting is active for the current post type.
    $fields = apply_filters('audiotheme_archive_settings_fields', array(), $post_type);
    $columns = 1;
    if (!empty($fields['columns']) && $fields['columns']) {
        $default = empty($fields['columns']['default']) ? 4 : absint($fields['columns']['default']);
        $columns = get_audiotheme_archive_meta('columns', true, $default, $post_type);
    }
    if (!empty($fields['posts_per_archive_page']) && $fields['posts_per_archive_page']) {
        // Get the number of posts to display for this post type.
        $posts_per_archive_page = get_audiotheme_archive_meta('posts_per_archive_page', true, '', $post_type);
        if (!empty($posts_per_archive_page)) {
            $query->set('posts_per_archive_page', intval($posts_per_archive_page));
        }
    }
    if (empty($posts_per_archive_page) && $columns > 1) {
        // Default to three even rows.
        $query->set('posts_per_archive_page', intval($columns * 3));
    }
}
 /**
  * Check our value
  * 
  * @global object $wp_query
  * @param object $query
  */
 public function check_qv($query)
 {
     if ($query->is_main_query() && $query->is_archive() && isset($query->query_vars['az'])) {
         // if we are on the main query and the query var 'a2z' exists, modify the where/orderby statements
         add_filter('posts_where', array($this, 'modify_query_where'));
         add_filter('posts_orderby', array($this, 'modify_query_orderby'));
     }
 }
Example #5
0
 /**
  * Attaches the `tax_query` query var to the $wp_query object.
  * The "original" $tax_query property inside the $wp_query object
  * is a reference to the `WP_Tax_Query` class and can not be used
  * to set arguments for a tax query. Therefore the sub object has
  * to be taken, transformed and then attached to the `query_vars`
  * part of the $wp_query object. Else the `relation` argument
  * gets unset, will not be used and the default is `AND`.
  * @param  object $query References to the current `$wp_query` object
  * @return object $query
  */
 public function tax_filter(&$query)
 {
     if (!isset($_GET[$this->get_param]) or !$query->is_main_query()) {
         return;
     }
     property_exists($query->tax_query, 'queries') and !empty($query->tax_query->queries) and $query->set('tax_query', array_merge($query->tax_query->queries, array('relation' => 'OR')));
     return $query;
 }
Example #6
0
 /**
  * Set default query parameters
  * @param  object $query
  * @return null
  */
 public function setDefaultQuery($query)
 {
     if ($this->queries && $query->is_main_query() && !is_admin() && is_post_type_archive()) {
         if (in_array($query->query['post_type'], array_keys($this->queries))) {
             foreach ($this->queries[$query->query['post_type']] as $argument => $value) {
                 $query->set($argument, $value);
             }
         }
     }
 }
Example #7
0
/**
 * Filter on `the_posts` for the theme archive. Moves sticky posts to the top of
 * the theme archive list.
 *
 * @since  1.0.0
 * @access public
 * @param  array  $posts
 * @param  object $query
 * @return array
 */
function thds_posts_sticky_filter($posts, $query)
{
    // Allow devs to filter when to show sticky themes.
    $show_stickies = apply_filters('thds_show_stickies', $query->is_main_query() && !is_admin() && thds_is_theme_archive() && !is_paged());
    // If we should show stickies, let's get them.
    if ($show_stickies) {
        remove_filter('the_posts', 'thds_posts_sticky_filter');
        $posts = thds_add_stickies($posts, thds_get_sticky_themes());
    }
    return $posts;
}
 /**
  * Prevent the archive page of site.com?post_type=sa_invoice/estimate
  * @param  object $query
  * @return object $query
  * @since 8.0
  */
 public static function filter_post_type_query($query)
 {
     if (is_admin()) {
         return $query;
     }
     if (is_single()) {
         return $query;
     }
     if ($query->is_main_query()) {
         $type = $query->get('post_type');
         if (in_array($type, array(SI_Invoice::POST_TYPE, SI_Estimate::POST_TYPE))) {
             $query->set('post_type', 'post');
         }
     }
     return $query;
 }
/**
 * This function modifies the main WordPress query to include an array of 
 * post types instead of the default 'post' post type.
 *
 * @param object $query  The original query.
 * @return object $query The amended query.
 */
function ex_cpt_search($query)
{
    if (is_admin() || !$query->is_main_query()) {
        return;
    }
    if ($query->is_search) {
        if (isset($_GET['cpt']) && !empty($_GET['cpt'])) {
            $query->set('post_type', array($_GET['cpt']));
        } else {
            $query->set('post_type', array('post', 'page', 'projets'));
        }
        if (isset($_GET['cat']) && !empty($_GET['cat'])) {
            $query->set('cat', $_GET['cat']);
        }
        return $query;
    }
}
 /**
  * Modify the archive query.
  *
  * @param  object  $query  The main page query
  * @return object  The modified main page query
  */
 public function modify_archive_query($query)
 {
     if ('' != get_query_var($this->get_option('permalink-archive')) && $query->is_main_query() && !is_admin() && (is_post_type_archive('event') || is_tax('event-category'))) {
         $meta_query = array(array('key' => '_event_end', 'value' => (int) current_time('timestamp'), 'compare' => '<'));
         if ('1' != get_query_var($this->get_option('permalink-archive'))) {
             $paged = get_query_var($this->get_option('permalink-archive'));
         } else {
             $paged = 1;
         }
         $query->set('offset', ($paged - 1) * get_option('posts_per_page'));
         $query->set('paged', $paged);
         $query->set('orderby', 'meta_value_num');
         $query->set('order', 'ASC');
         $query->set('meta_query', $meta_query);
         $query->set('meta_key', '_event_start');
     }
     return $query;
 }
Example #11
0
/**
 * Modify search results page with results from Better Search. Filters posts_orderby.
 *
 * @since	1.3.3
 *
 * @param	string $orderby    ORDERBY clause of main query
 * @param	object $query      WordPress query
 * @return	Formatted ORDERBY clause
 */
function bsearch_orderby_clause($orderby, $query)
{
    global $wpdb, $bsearch_settings;
    if ($query->is_search() && $bsearch_settings['seamless'] && !is_admin() && $query->is_main_query()) {
        $search_ids = bsearch_clause_prepare();
        if ('' != $search_ids) {
            $orderby = " FIELD( {$wpdb->posts}.ID, {$search_ids} ) ";
        }
    }
    /**
     * Filters Better Search ORDERBY clause
     *
     * @since	2.0.0
     *
     * @param	string	$where	ORDERBY clause of main query
     * @param	object	$query	WordPress query
     */
    return apply_filters('bsearch_orderby_clause', $orderby, $query);
}
Example #12
0
 /**
  * Display sliders above the main loop in page
  * @param object $query
  */
 public function show_on_loop_start($query)
 {
     // don't display on admin pages, previews or if it's not main query
     if (is_admin() || !$query->is_main_query()) {
         return;
     }
     /**
      * Filter to prevent dynamic areas globally from being displayed
      * @var bool
      */
     $show = apply_filters('fa_display_dynamic_areas', true, 'loop_start');
     if (!$show) {
         return;
     }
     $settings = fa_get_options('hooks');
     $sliders = (array) $settings['loop_start']['sliders'];
     if ($sliders) {
         foreach ($sliders as $slider_id) {
             fa_display_slider($slider_id, 'loop_start');
         }
     }
 }
 /**
  * Filter tickets by status.
  *
  * When filtering, WordPress uses the ID by default in the query but
  * that doesn't work. We need to convert it to the taxonomy term.
  *
  * @since  3.0.0
  * @param  object $query WordPress current main query
  */
 public function status_filter_by_status($query)
 {
     global $pagenow;
     /* Check if we are in the correct post type */
     if (is_admin() && 'edit.php' == $pagenow && isset($_GET['post_type']) && 'ticket' == $_GET['post_type'] && isset($_GET['wpas_status']) && !empty($_GET['wpas_status']) && $query->is_main_query()) {
         $query->query_vars['meta_key'] = '_wpas_status';
         $query->query_vars['meta_value'] = sanitize_text_field($_GET['wpas_status']);
         $query->query_vars['meta_compare'] = '=';
     }
 }
Example #14
0
 /**
  * Loads an inline optin form (sidebar and after post) by checking against the current query.
  *
  * @since 1.0.0
  *
  * @param object $query The current main WP query object.
  */
 public function load_optinmonster_inline($query)
 {
     // If we are not on the main query, do nothing.
     if (!$query->is_main_query()) {
         return;
     }
     $priority = apply_filters('optin_monster_post_priority', 999);
     // Deprecated.
     $priority = apply_filters('optin_monster_api_post_priority', 999);
     add_filter('the_content', array($this, 'load_optinmonster_inline_content'), $priority);
 }
Example #15
0
 /**
  * Let's overwrite the default post_per_page setting to always display a fixed amount.
  *
  * @param object $query
  * @uses is_admin, self::archive_supports_infinity, self::get_settings
  * @return null
  */
 function posts_per_page_query($query)
 {
     if (!is_admin() && self::archive_supports_infinity() && $query->is_main_query()) {
         $query->set('posts_per_page', self::get_settings()->posts_per_page);
     }
 }
 /**
  * Set a faceted search as a search (and thus force the search template). A hook for the parse_query action.
  *
  * @param object $wp_query The current WP_Query. Passed by reference and modified if necessary.
  * @return void
  * @author Matthew Boynes
  */
 public function force_search_template(&$wp_query)
 {
     if (!$wp_query->is_main_query()) {
         return;
     }
     // Load our sp query string variable
     $this->sp = get_query_var('sp');
     // If this is a search, but not a keyword search, we have to fake it
     if (!$wp_query->is_search() && !empty($this->sp) && '1' == $this->sp['force']) {
         // First, we'll set the search string to something phony
         $wp_query->set('s', '1441f19754335ca4638bfdf1aea00c6d');
         $wp_query->is_search = true;
         $wp_query->is_home = false;
     }
 }
Example #17
0
/**
 * Sets product limit on product listing pages
 * @param object $query
 */
function set_products_limit($query)
{
    $archive_multiple_settings = get_multiple_settings();
    if (!is_admin() && $query->is_main_query() && (is_ic_product_listing($query) || is_ic_taxonomy_page() || is_home_archive($query))) {
        $query->set('posts_per_page', $archive_multiple_settings['archive_products_limit']);
        do_action('pre_get_al_products', $query);
    }
}
 /**
  * Alters the main query based on query vars
  *
  * @param  object $query the WP_Query
  * @return void
  */
 public function query_handler($query)
 {
     // important, don't make any changes unless this is the main, frontend query
     if (is_admin() || !$query->is_main_query()) {
         return;
     }
     $rule = $query->get('_rule');
     $show_slug = $query->get('btv-show');
     $season_slug = $query->get('btv-season');
     $episode_slug = $query->get('btv-episode');
     // alter the main query based on the rule
     if ('episode' === $rule) {
         $show = $this->get_post_by_slug($show_slug, 'btv-show');
         if (!empty($show)) {
             $season = $this->get_post_by_slug($season_slug, 'btv-season', $show->ID);
             if (!empty($season)) {
                 $query->set('post_parent', $season->ID);
                 return;
             }
         }
     }
     if ('season' === $rule) {
         $show = $this->get_post_by_slug($show_slug, 'btv-show');
         if (!empty($show)) {
             $query->set('post_parent', $show->ID);
             return;
         }
     }
     // check if the show slug is a genre
     // /shows/sci-fi or /shows/game-of-thrones
     if ('show-or-genre' === $rule) {
         $genre_term = get_term_by('slug', $show_slug, 'btv-genre');
         if (!empty($genre_term)) {
             // reset the query to displays shows in the genre
             $query->parse_query(array('post_type' => 'btv-show', 'tax_query' => array(array('taxonomy' => 'btv-genre', 'terms' => $genre_term->term_id))));
             return;
         }
     }
     if ('about' === $rule) {
         $show = $this->get_post_by_slug($show_slug, 'btv-show');
         // if the show's About page is set, reset the query to that page
         if (!empty($show)) {
             $about_page_id = get_post_meta($show->ID, '_about_page_id', true);
             if (!empty($about_page_id)) {
                 $query->parse_query(array('post_type' => 'page', 'p' => $about_page_id));
                 return;
             }
         }
     }
     if ('tagged' === $rule) {
         $tags = explode('_', $query->get('_tags'));
         $args = array('post_type' => 'btv-show', 'tax_query' => array('OR'));
         // build multiple tags into the OR query
         foreach ($tags as $tag) {
             $args['tax_query'][] = array('taxonomy' => 'btv-tag', 'field' => 'slug', 'terms' => $tag);
         }
         $query->parse_query($args);
         return;
     }
 }
 /**
  * Update the post date and post modified date to reflect the current entry being viewed.
  *
  * @access private
  * @since  8.1
  * @static
  *
  * @uses   is_main_query()
  * @uses   cnQuery::getVar()
  * @uses   get_gmt_from_date()
  *
  * @param  array  $posts    An array of WP_Post objects.
  * @param  object $wp_query A reference to the WP_Query object
  *
  * @return array
  */
 public static function postDates($posts, $wp_query)
 {
     // Grab an instance of the Connections object.
     $instance = Connections_Directory();
     if ($wp_query->is_main_query() && cnQuery::getVar('cn-entry-slug')) {
         $result = $instance->retrieve->entries(array('slug' => urldecode(cnQuery::getVar('cn-entry-slug'))));
         // Make sure an entry is returned and if not, return $posts unaltered.
         if (empty($result)) {
             return $posts;
         }
         $modified = $result[0]->ts;
         $created = $result[0]->date_added ? date('Y-m-d H:i:s', $result[0]->date_added) : $result[0]->ts;
         if (isset($posts[0])) {
             if (isset($posts[0]->post_date)) {
                 $posts[0]->post_date = $created;
                 $posts[0]->post_date_gmt = get_gmt_from_date($created);
             }
             if (isset($posts[0]->post_modified)) {
                 $posts[0]->post_modified = $modified;
                 $posts[0]->post_modified_gmt = get_gmt_from_date($modified);
             }
         }
     }
     return $posts;
 }
/**
 * Making the Series ASCending order for good UX.
 * 
 * @since  3.0.0
 * 
 * @param  object $query WordPress' default query object.
 * @return object        modified as per design.
 * ------------------------------------------------------------------------------
 */
function nano_progga_series_archive_order($query)
{
    if ($query->is_main_query() && !is_admin() && is_tax('series')) {
        $query->set('order', 'ASC');
    }
}
Example #21
0
/**
 * This function modifies the main WordPress query to include an array of
 * post types instead of the default 'post' post type.
 *
 * @param object $query  The original query.
 * @return object $query The amended query.
 */
function bavotasan_search($query)
{
    if ($query->is_search && $query->is_main_query()) {
        $query->set('post_type', array('post'));
    }
    return $query;
}
 /**
  * Modify the homepage query, if set to display blog posts, based on the theme options.
  * @since  1.0.0
  * @param  object $q The query object.
  * @return object    The modified query object.
  */
 function woo_customise_homepage_query($q)
 {
     if ($q->is_admin) {
         return $q;
     }
     // We don't want to act in the admin.
     if ($q->is_home && $q->is_main_query()) {
         $settings = woo_get_dynamic_values(array('homepage_content_type' => 'posts', 'homepage_number_of_posts' => get_option('posts_per_page'), 'homepage_posts_category' => ''));
         if ('posts' != $settings['homepage_content_type']) {
             return $q;
         }
         // If we're not displaying blog posts, don't modify the query.
         $q->set('posts_per_page', intval($settings['homepage_number_of_posts']));
         if (0 < intval($settings['homepage_posts_category'])) {
             $q->set('cat', intval($settings['homepage_posts_category']));
         }
         $q->parse_query();
     }
     return $q;
 }
Example #23
0
/**
 * Sets search page when the search term is empty.
 *
 * @param object $query
 *
 * @return object
 */
function cp_handle_empty_search_term($query)
{
    if (isset($_GET['s']) && empty($_GET['s']) && $query->is_main_query()) {
        $query->is_search = true;
        $query->is_home = false;
    }
    return $query;
}
/**
 * Sets default product order
 *
 * @param object $query
 */
function set_product_order($query)
{
    if (!is_admin() && !isset($_GET['order']) && $query->is_main_query() && (is_ic_product_listing($query) || is_ic_taxonomy_page())) {
        $archive_multiple_settings = get_multiple_settings();
        if (!isset($_GET['product_order'])) {
            if ($archive_multiple_settings['product_order'] == 'product-name') {
                $query->set('orderby', 'title');
                $query->set('order', 'ASC');
            }
            $query = apply_filters('modify_product_order', $query, $archive_multiple_settings);
        } else {
            if ($_GET['product_order'] != 'newest' && !empty($_GET['product_order'])) {
                $orderby = translate_product_order();
                $query->set('orderby', $orderby);
                $query->set('order', 'ASC');
                $query = apply_filters('modify_product_order-dropdown', $query, $archive_multiple_settings);
            }
        }
    }
}
/**
 * Product List Exclude Child Categories
 *
 * When filtering the product list by category in the admin this ensures that
 * only products in the selected category are shown, not any of it's sub-categories.
 *
 * @param object $query WP_Query
 *
 * @uses get_current_screen()
 */
function wpsc_product_list_exclude_child_categories($query)
{
    if (!is_admin() || defined('DOING_AJAX') && DOING_AJAX || !$query->is_main_query()) {
        return;
    }
    if ('edit-wpsc-product' == get_current_screen()->id) {
        $wpsc_product_category = $query->get('wpsc_product_category');
        if (!empty($wpsc_product_category)) {
            $category_query = array('taxonomy' => 'wpsc_product_category', 'field' => 'slug', 'terms' => array($wpsc_product_category), 'include_children' => false, 'operator' => 'IN');
            $query->set('tax_query', array($category_query));
            $query->tax_query->queries = $query->get('tax_query');
        }
    }
}
 /**
  * Setup posts number per archive page
  *
  * @since  1.0.0
  * @param  object $query main query object.
  * @return void|bool false
  */
 public function set_posts_per_archive_page($query)
 {
     // Must work only for public.
     if (is_admin()) {
         return $query;
     }
     // And only for main query
     if (!$query->is_main_query()) {
         return $query;
     }
     $is_archive = $query->is_post_type_archive(CHERRY_TEAM_NAME);
     if ($is_archive || $this->is_team_tax($query)) {
         $query->set('posts_per_page', self::get_posts_per_archive_page());
     }
 }
/**
 * Filter on `the_posts` for the project archive. Moves sticky posts to the top of
 * the project archive list.
 *
 * @since  1.0.0
 * @access public
 * @param  array  $posts
 * @param  object $query
 * @return array
 */
function ccp_posts_sticky_filter($posts, $query)
{
    // Allow devs to filter when to show sticky projects.
    $show_stickies = apply_filters('ccp_show_stickies', $query->is_main_query() && !is_admin() && ccp_is_project_archive() && !is_paged());
    // If we should show stickies, let's get them.
    if ($show_stickies) {
        remove_filter('the_posts', 'ccp_posts_sticky_filter');
        $posts = ccp_add_stickies($posts, ccp_get_sticky_projects());
    }
    return $posts;
}
 /**
  * 
  * Add filter content for event archives.
  * 
  * @since    1.0
  * @author   Jonathan Harris <*****@*****.**>
  * @param object $query
  */
 public function pre_get_posts($query)
 {
     if (($query->is_post_type_archive($this->get_plugin_slug()) || $query->is_tax('super-simply-event-type')) && $query->is_main_query() && !is_admin()) {
         $meta_query = $query->get('meta_query');
         /*
         			$this_year = get_query_var('sse_year');
         			$this_month = get_query_var('sse_month');
         			$this_day = get_query_var('sse_day');
         			
         			$start_year = $end_year = "";
         			
         			if(!empty($this_year)){
         				$start_year = $end_year = $this_year;
         				$start_month = 1;
         				$end_month = 12;
         				$start_day = 1;
         				$end_day = 31;
         			}
         			
         			if(!empty($this_month)){
         				$start_month = $end_month = $this_month;
         				$start_day = 1;
         				$end_day = date('t', mktime(0, 0, 0, $end_month, 1, $end_year));
         			}
         			
         			if(!empty($this_day)){
         				$start_day = $end_day = $this_day;		
         			}
         			
         			if(!empty($start_year)){
         				$start_date = "$start_year-$start_month-$start_day";
         				$end_date   = "$end_year-$end_month-$end_day";
         				
         				$start_date_unix = strtotime($start_date);
         				$end_date_unix   = strtotime($end_date);				
         				
         			}else{*/
         if ($this->get_option('hide_old_events') == "1") {
             $meta_query[] = array('key' => 'between_dates', 'value' => date('Y-m-d H:i:s', strtotime('+1 days', current_time('timestamp'))), 'compare' => '>=');
         }
         //}
         $query->set('meta_query', $meta_query);
         $query->set('orderby', 'meta_value');
         $query->set('order', 'ASC');
         $query->set('meta_key', 'sse_start_date_alt');
     }
     return $query;
 }
 /**
  * Is hooked by init() filter to parse the WP_Query arguments for main and alt queries.
  *
  * @param object $query WP_Query object args supplied or default
  *
  * @return object $query (modified)
  */
 public static function pre_get_posts($query)
 {
     if ($query->is_main_query() && is_home()) {
         // check option for including events in the main wordpress loop, if true, add events post type
         if (tribe_get_option('showEventsInMainLoop', false)) {
             $query->query_vars['post_type'] = isset($query->query_vars['post_type']) ? (array) $query->query_vars['post_type'] : array('post');
             $query->query_vars['post_type'][] = TribeEvents::POSTTYPE;
             $query->tribe_is_multi_posttype = true;
         }
     }
     if ($query->tribe_is_multi_posttype) {
         do_action('log', 'multi_posttype', 'default', $query->tribe_is_multi_posttype);
         add_filter('posts_fields', array(__CLASS__, 'multi_type_posts_fields'), 10, 2);
         add_filter('posts_join', array(__CLASS__, 'posts_join'), 10, 2);
         add_filter('posts_join', array(__CLASS__, 'posts_join_orderby'), 10, 2);
         add_filter('posts_distinct', array(__CLASS__, 'posts_distinct'));
         add_filter('posts_groupby', array(__CLASS__, 'posts_groupby'), 10, 2);
         add_filter('posts_orderby', array(__CLASS__, 'posts_orderby'), 10, 2);
         do_action('tribe_events_pre_get_posts', $query);
         return;
     }
     if ($query->tribe_is_event || $query->tribe_is_event_category) {
         if (!($query->is_main_query() && $query->get('eventDisplay') == 'month')) {
             add_filter('posts_fields', array(__CLASS__, 'posts_fields'), 10, 2);
             add_filter('posts_join', array(__CLASS__, 'posts_join'), 10, 2);
             add_filter('posts_join', array(__CLASS__, 'posts_join_orderby'), 10, 2);
             add_filter('posts_where', array(__CLASS__, 'posts_where'), 10, 2);
             add_filter('posts_distinct', array(__CLASS__, 'posts_distinct'));
             add_filter('posts_groupby', array(__CLASS__, 'posts_groupby'), 10, 2);
         } else {
             // reduce number of queries triggered by main WP_Query on month view
             $query->set('posts_per_page', 1);
             $query->set('no_found_rows', true);
             $query->set('cache_results', false);
             $query->set('update_post_meta_cache', false);
             $query->set('update_post_term_cache', false);
             $query->set('meta_query', array(array('key' => '_EventStartDate', 'type' => 'DATETIME')));
             do_action('tribe_events_pre_get_posts', $query);
             return $query;
         }
         // if a user selects a date in the event bar we want it to persist as long as possible
         if (!empty($_REQUEST['tribe-bar-date'])) {
             $query->set('eventDate', $_REQUEST['tribe-bar-date']);
             do_action('log', 'changed eventDate to tribe-bar-date', 'tribe-events-query', $_REQUEST['tribe-bar-date']);
         }
         // if a user provides a search term we want to use that in the search params
         if (!empty($_REQUEST['tribe-bar-search'])) {
             $query->query_vars['s'] = $_REQUEST['tribe-bar-search'];
         }
         $query->query_vars['eventDisplay'] = !empty($query->query_vars['eventDisplay']) ? $query->query_vars['eventDisplay'] : TribeEvents::instance()->displaying;
         //@todo stop calling EOD cutoff transformations all over the place
         if (!empty($query->query_vars['eventDisplay'])) {
             switch ($query->query_vars['eventDisplay']) {
                 case 'custom':
                     // if the eventDisplay is 'custom', all we're gonna do is make sure the start and end dates are formatted
                     $start_date = $query->get('start_date');
                     if ($start_date) {
                         $query->set('start_date', date_i18n(TribeDateUtils::DBDATETIMEFORMAT, strtotime($start_date)));
                     }
                     $end_date = $query->get('end_date');
                     if ($end_date) {
                         $query->set('end_date', date_i18n(TribeDateUtils::DBDATETIMEFORMAT, strtotime($end_date)));
                     }
                     break;
                 case 'month':
                     // make sure start and end date are set
                     if ($query->get('start_date') == '') {
                         $event_date = $query->get('eventDate') != '' ? $query->get('eventDate') : date_i18n(TribeDateUtils::DBDATETIMEFORMAT);
                         $query->set('start_date', tribe_event_beginning_of_day($event_date));
                     }
                     if ($query->get('end_date' == '')) {
                         $query->set('end_date', tribe_event_end_of_day($query->get('start_date')));
                     }
                     $query->set('hide_upcoming', true);
                     break;
                 case 'day':
                     $event_date = $query->get('eventDate') != '' ? $query->get('eventDate') : Date('Y-m-d', current_time('timestamp'));
                     $query->set('eventDate', $event_date);
                     $beginning_of_day = strtotime(tribe_event_beginning_of_day($event_date)) + 1;
                     $query->set('start_date', date_i18n(TribeDateUtils::DBDATETIMEFORMAT, $beginning_of_day));
                     $query->set('end_date', tribe_event_end_of_day($event_date));
                     $query->set('posts_per_page', -1);
                     // show ALL day posts
                     $query->set('hide_upcoming', false);
                     $query->set('order', self::set_order('ASC', $query));
                     break;
                 case 'all':
                     $query->set('orderby', self::set_orderby(null, $query));
                     $query->set('order', self::set_order(null, $query));
                     break;
                 case 'single-event':
                     if ($query->get('eventDate') != '') {
                         $query->set('start_date', $query->get('eventDate'));
                         $query->set('eventDate', $query->get('eventDate'));
                     }
                     break;
                 case 'list':
                 default:
                     // default display query
                     $event_date = $query->get('eventDate') != '' ? $query->get('eventDate') : date_i18n(TribeDateUtils::DBDATETIMEFORMAT);
                     if (!$query->tribe_is_past) {
                         $query->set('start_date', tribe_event_beginning_of_day($event_date));
                         $query->set('end_date', '');
                         $query->set('order', self::set_order('ASC', $query));
                     } else {
                         // on past view, set the passed date as the end date
                         $query->set('start_date', '');
                         $query->set('end_date', tribe_event_end_of_day($event_date));
                         $query->set('order', self::set_order('DESC', $query));
                     }
                     $query->set('orderby', self::set_orderby(null, $query));
                     $query->set('hide_upcoming', true);
                     break;
             }
         } else {
             $query->set('hide_upcoming', true);
             $query->set('start_date', date_i18n(TribeDateUtils::DBDATETIMEFORMAT));
             $query->set('orderby', self::set_orderby(null, $query));
             $query->set('order', self::set_order(null, $query));
         }
         // eventCat becomes a standard taxonomy query - will need to deprecate and update views eventually
         if (!in_array($query->get(TribeEvents::TAXONOMY), array('', '-1'))) {
             $tax_query[] = array('taxonomy' => TribeEvents::TAXONOMY, 'field' => is_numeric($query->get(TribeEvents::TAXONOMY)) ? 'id' : 'slug', 'terms' => $query->get(TribeEvents::TAXONOMY), 'include_children' => apply_filters('tribe_events_query_include_children', true));
         }
         // Only add the postmeta hack if it's not the main admin events list
         // Because this method filters out drafts without EventStartDate.
         // For this screen we're doing the JOIN manually in TribeEventsAdminList
         $screen = !is_admin() || defined('DOING_AJAX') && DOING_AJAX ? null : get_current_screen();
         if (empty($screen) || $screen->id != 'edit-tribe_events') {
             $meta_query[] = array('key' => '_EventStartDate', 'type' => 'DATETIME');
         }
     }
     // filter by Venue ID
     if ($query->tribe_is_event_query && $query->get('venue') != '') {
         $meta_query[] = array('key' => '_EventVenueID', 'value' => $query->get('venue'));
     }
     // filter by Organizer ID
     if ($query->tribe_is_event_query && $query->get('organizer') != '') {
         $meta_query[] = array('key' => '_EventOrganizerID', 'value' => $query->get('organizer'));
     }
     // enable pagination setup
     if ($query->tribe_is_event_query && $query->get('posts_per_page') == '') {
         $query->set('posts_per_page', (int) tribe_get_option('postsPerPage', 10));
     }
     // hide upcoming events from query (only not in admin)
     if ($query->tribe_is_event_query && $query->get('hide_upcoming')) {
         $hide_upcoming_ids = self::getHideFromUpcomingEvents();
         if (!empty($hide_upcoming_ids)) {
             $query->set('post__not_in', $hide_upcoming_ids);
         }
     }
     if ($query->tribe_is_event_query && !empty($meta_query)) {
         // setup default relation for meta queries
         $meta_query['relation'] = 'AND';
         $meta_query_combined = array_merge((array) $meta_query, (array) $query->get('meta_query'));
         $query->set('meta_query', $meta_query_combined);
     }
     if ($query->tribe_is_event_query && !empty($tax_query)) {
         // setup default relation for tax queries
         $tax_query_combined = array_merge((array) $tax_query, (array) $query->get('tax_query'));
         $query->set('tax_query', $tax_query_combined);
     }
     if ($query->tribe_is_event_query) {
         add_filter('posts_orderby', array(__CLASS__, 'posts_orderby'), 10, 2);
     }
     // if is in the admin remove the event date & upcoming filters, unless is an ajax call
     global $current_screen;
     if (is_admin() && $query->tribe_is_event_query && !empty($current_screen->id) && $current_screen->id == 'edit-' . TribeEvents::POSTTYPE) {
         if (!defined('DOING_AJAX') || defined('DOING_AJAX') && !DOING_AJAX) {
             remove_filter('posts_where', array(__CLASS__, 'posts_where'), 10, 2);
             remove_filter('posts_fields', array(__CLASS__, 'posts_fields'));
             remove_filter('posts_groupby', array(__CLASS__, 'posts_groupby'));
             remove_filter('posts_orderby', array(__CLASS__, 'posts_orderby'), 10, 2);
             $query->set('post__not_in', '');
             // set the default order for posts within admin lists
             if (!isset($query->query['order'])) {
                 $query->set('order', 'DESC');
             } else {
                 // making sure we preserve the order supplied by the query string even if it is overwritten above
                 $query->set('order', $query->query['order']);
             }
         }
     }
     if ($query->tribe_is_event_query) {
         do_action('tribe_events_pre_get_posts', $query);
     }
     return $query;
 }
 /**
  * Modify module taxonomy archive query
  *
  * @since 1.8.0
  * @param  object $query The query object passed by reference
  * @return void
  */
 public function module_archive_filter($query)
 {
     if (is_tax($this->taxonomy) && $query->is_main_query()) {
         global $woothemes_sensei;
         // Limit to lessons only
         $query->set('post_type', 'lesson');
         // Set order of lessons
         if (version_compare($woothemes_sensei->version, '1.6.0', '>=')) {
             $module_id = $query->queried_object_id;
             $query->set('meta_key', '_order_module_' . $module_id);
             $query->set('orderby', 'meta_value_num date');
         } else {
             $query->set('orderby', 'menu_order');
         }
         $query->set('order', 'ASC');
         // Limit to specific course if specified
         if (isset($_GET['course_id']) && 0 < intval($_GET['course_id'])) {
             $course_id = intval($_GET['course_id']);
             $meta_query[] = array('key' => '_lesson_course', 'value' => intval($course_id));
             $query->set('meta_query', $meta_query);
         }
     }
 }