/**
  * Converts the WP_Query to a Cloud_Search_Query
  * @return Cloud_Search_Query
  */
 public function get_cs_query()
 {
     $cs_query = new Cloud_Search_Query();
     $cs_query->add_facet(apply_filters('lift_search_facets', array()));
     $parameters = apply_filters('list_search_bq_parameters', array(sprintf("(label '%s')", $this->wp_query->get('s'))), $this);
     //filter to the current blog/site
     $parameters[] = new Lift_Expression_Set('and', array(new Lift_Expression_Field('site_id', lift_get_current_site_id(), false), new Lift_Expression_Field('blog_id', get_current_blog_id(), false)));
     $boolean_query = sprintf('(and %s)', trim(implode(' ', $parameters)));
     $cs_query->set_boolean_query($boolean_query);
     // size
     $posts_per_page = $this->wp_query->get('posts_per_page');
     if ($posts_per_page < 0) {
         $posts_per_page = 9999999;
     }
     $cs_query->set_size($posts_per_page);
     // start
     $paged = $this->wp_query->get('paged');
     $start = 0;
     if ($paged > 1) {
         $start = $posts_per_page * ($paged - 1);
     }
     $cs_query->set_start($start);
     $orderby_values = array('date' => 'post_date_gmt', 'relevancy' => 'text_relevance');
     // rank
     $order = $this->wp_query->get('order');
     $orderby = isset($orderby_values[$this->wp_query->get('orderby')]) ? $orderby_values[$this->wp_query->get('orderby')] : $orderby_values['relevancy'];
     if ($orderby) {
         $cs_query->add_rank($orderby, $order);
     }
     // return fields
     $cs_query->add_return_field('id');
     do_action_ref_array('get_cs_query', array($cs_query));
     return $cs_query;
 }
Ejemplo n.º 2
0
 /**
  * @ticket 16471
  */
 function test_default_query_var()
 {
     $query = new WP_Query();
     $this->assertEquals('', $query->get('nonexistent'));
     $this->assertFalse($query->get('nonexistent', false));
     $this->assertTrue($query->get('nonexistent', true));
 }
 /**
  * Hook into the query parsing to detect oEmbed requests.
  *
  * If an oEmbed request is made, trigger the output.
  *
  * @since 4.4.0
  *
  * @param WP_Query $wp_query The WP_Query instance (passed by reference).
  */
 public function parse_query($wp_query)
 {
     if (false === $wp_query->get('oembed', false)) {
         return;
     }
     if (false === $wp_query->get('url', false)) {
         status_header(400);
         echo 'URL parameter missing';
         exit;
     }
     $url = esc_url_raw(get_query_var('url'));
     $format = wp_oembed_ensure_format(get_query_var('format'));
     /**
      * Filter the maxwidth oEmbed parameter.
      *
      * @since 4.4.0
      *
      * @param int $maxwidth Maximum allowed width. Default 600.
      */
     $maxwidth = apply_filters('oembed_default_width', 600);
     $maxwidth = absint(get_query_var('maxwidth', $maxwidth));
     $callback = get_query_var('_jsonp', false);
     $request = array('url' => $url, 'format' => $format, 'maxwidth' => $maxwidth, 'callback' => $callback);
     echo $this->dispatch($request);
     exit;
 }
 /**
  * Hook into the query parsing to detect oEmbed requests.
  *
  * If an oEmbed request is made, trigger the output.
  *
  * @codeCoverageIgnore
  *
  * @param WP_Query $wp_query The WP_Query instance (passed by reference).
  */
 public function parse_query($wp_query)
 {
     // Check for required params.
     if (false === $wp_query->get('oembed', false)) {
         return;
     }
     if (false === $wp_query->get('url', false)) {
         status_header(400);
         echo 'URL parameter missing';
         exit;
     }
     /**
      * Check for the allowed query vars and set defaults.
      *
      * @see WP_REST_oEmbed_Controller::register_routes()
      */
     $url = esc_url_raw(get_query_var('url'));
     $format = sanitize_text_field(get_query_var('format', 'json'));
     /**
      * Filter the maxwidth oEmbed parameter.
      *
      * @param int $maxwidth Maximum allowed width. Defaults to 600.
      *
      * @return int
      */
     $maxwidth = apply_filters('oembed_default_width', 600);
     $maxwidth = get_query_var('maxwidth', $maxwidth);
     $callback = get_query_var('_jsonp', false);
     $request = array('url' => $url, 'format' => $format, 'maxwidth' => $maxwidth, 'callback' => $callback);
     echo $this->dispatch($request);
     exit;
 }
 /**
  * Set any query flags
  *
  * @param WP_Query $query
  *
  * @return void
  **/
 public static function parse_query($query)
 {
     // set paged
     if ($query->is_main_query() && isset($_GET['tribe_paged'])) {
         $query->set('paged', $_REQUEST['tribe_paged']);
     }
     // Add tribe events post type to tag queries
     if ($query->is_tag && (array) $query->get('post_type') != array(TribeEvents::POSTTYPE)) {
         $types = $query->get('post_type');
         if (empty($types)) {
             $types = array('post');
         }
         if (is_array($types)) {
             $types[] = TribeEvents::POSTTYPE;
         } else {
             if (is_string($types)) {
                 $types = array($types, TribeEvents::POSTTYPE);
             } else {
                 if ($types != 'any') {
                     $types = array('post', TribeEvents::POSTTYPE);
                 }
             }
         }
         $query->set('post_type', $types);
     }
     $types = !empty($query->query_vars['post_type']) ? (array) $query->query_vars['post_type'] : array();
     // check if any possiblity of this being an event query
     $query->tribe_is_event = in_array(TribeEvents::POSTTYPE, $types) && count($types) < 2 ? true : false;
     $query->tribe_is_multi_posttype = in_array(TribeEvents::POSTTYPE, $types) && count($types) >= 2 || in_array('any', $types) ? true : false;
     if ('default' === $query->get('eventDisplay')) {
         $query->set('eventDisplay', TribeEvents::instance()->default_view());
     }
     // check if any possiblity of this being an event category
     $query->tribe_is_event_category = !empty($query->query_vars[TribeEvents::TAXONOMY]) ? true : false;
     $query->tribe_is_event_venue = in_array(TribeEvents::VENUE_POST_TYPE, $types) ? true : false;
     $query->tribe_is_event_organizer = in_array(TribeEvents::ORGANIZER_POST_TYPE, $types) ? true : false;
     $query->tribe_is_event_query = $query->tribe_is_event || $query->tribe_is_event_category || $query->tribe_is_event_venue || $query->tribe_is_event_organizer ? true : false;
     // move along, this is not the query you are looking for
     // is the query pulling posts from the past
     if ($query->is_main_query() && !empty($_REQUEST['tribe_event_display']) && $_REQUEST['tribe_event_display'] == 'past') {
         $query->tribe_is_past = true;
     } elseif (tribe_is_ajax_view_request() && $query->get('eventDisplay') == 'past') {
         $query->tribe_is_past = true;
     } else {
         $query->tribe_is_past = isset($query->tribe_is_past) ? $query->tribe_is_past : false;
     }
     // never allow 404 on month view
     if ($query->is_main_query() && $query->get('eventDisplay') == 'month' && !$query->is_tax && !$query->tribe_is_event_category) {
         $query->is_post_type_archive = true;
         $query->queried_object = get_post_type_object(TribeEvents::POSTTYPE);
         $query->queried_object_id = 0;
     }
     // check if is_event_query === true and hook filter
     if ($query->tribe_is_event_query) {
         // fixing is_home param
         $query->is_home = !empty($query->query_vars['is_home']) ? $query->query_vars['is_home'] : false;
         do_action('tribe_events_parse_query', $query);
     }
 }
Ejemplo n.º 6
0
	function test_filter_stopwords() {
		$terms = 'This is a search term';
		add_filter( 'wp_search_stopwords', array( $this, 'filter_wp_search_stopwords' ) );
		$query = new WP_Query( array( 's' => $terms ) );
		remove_filter( 'wp_search_stopwords', array( $this, 'filter_wp_search_stopwords' ) );

		$this->assertNotEquals( array( 'search', 'term' ), $query->get( 'search_terms' ) );
		$this->assertEquals( array( 'This', 'is', 'search', 'term' ), $query->get( 'search_terms' ) );
	}
Ejemplo n.º 7
0
 public function pre_get_posts(\WP_Query $q)
 {
     if ($q->get('combined_query')) {
         $defaults = ['union' => 'UNION', 'args' => []];
         $this->combined_query = wp_parse_args($q->get('combined_query'), $defaults);
         // Setup SQL generation:
         add_filter('posts_request', [$this, 'posts_request'], PHP_INT_MAX, 2);
         // Get the orderby part:
         add_filter('posts_orderby', [$this, 'posts_orderby'], PHP_INT_MAX);
     }
 }
Ejemplo n.º 8
0
 /**
  * pre_get_posts callback
  *
  * @since  1.0.0
  * @param  \WP_Query $q
  * @return void
  */
 public function cq_pre_get_posts(\WP_Query $q)
 {
     // If posts_per_page is -1, then there's no limit set,
     // but we do need a limit to be able to keep the order of UNION sub-queries:
     // @see http://stackoverflow.com/a/7587423/2078474
     if ($q->get('posts_per_page') && '-1' == $q->get('posts_per_page')) {
         $q->set('posts_per_page', 999999);
     }
     // Remove SQL_CALC_FOUND_ROWS from the SQL query:
     $q->set('no_found_rows', 1);
 }
 public static function showPageContent($content)
 {
     foreach (self::$_pages as $page) {
         if (self::$query->get($page['query_var']) == 1) {
             if (!empty(self::$_errors)) {
                 $viewParams = call_user_func(array('CMA_ErrorController', 'errorAction'));
                 ob_start();
                 echo self::_loadView('error', $viewParams);
                 $content = ob_get_clean();
             } else {
                 $viewParams = array();
                 if (!empty($page['contentCallback'])) {
                     $viewParams = call_user_func($page['contentCallback']);
                 }
                 ob_start();
                 do_action('cma_flash_messages');
                 $viewParams['checkPermissions'] = true;
                 echo self::_loadView($page['viewPath'], $viewParams);
                 $content = ob_get_clean();
             }
             break;
         }
     }
     return $content;
 }
function w4dev_custom_loop_shortcode($atts)
{
    static $w4dev_custom_loop;
    if (!isset($w4dev_custom_loop)) {
        $w4dev_custom_loop = 1;
    } else {
        $w4dev_custom_loop++;
    }
    $atts = shortcode_atts(array('paging' => 'pg' . $w4dev_custom_loop, 'post_type' => 'post', 'posts_per_page' => '5', 'post_status' => 'publish'), $atts);
    $paging = $atts['paging'];
    unset($atts['paging']);
    if (isset($_GET[$paging])) {
        $atts['paged'] = $_GET[$paging];
    } else {
        $atts['paged'] = 1;
    }
    $html = '';
    $custom_query = new WP_Query($atts);
    if ($custom_query->have_posts()) {
        $html .= '<ul>';
        while ($custom_query->have_posts()) {
            $custom_query->the_post();
            $html .= sprintf('<li><a href="%1$s">%2$s</a></li>', get_permalink(), get_the_title());
        }
        $html .= '</ul>';
    }
    $pagination_base = add_query_arg($paging, '%#%');
    $html .= paginate_links(array('type' => '', 'base' => $pagination_base, 'format' => '?' . $paging . '=%#%', 'current' => max(1, $custom_query->get('paged')), 'total' => $custom_query->max_num_pages));
    return $html;
}
 /**
  * Media List:
  * Do the same as ^^ but for the list view.
  *
  * @param WP_Query $query
  *
  * @return array
  */
 public function media_list_table_query($query)
 {
     if (is_admin() && $query->is_main_query() && 'upload' === get_current_screen()->id) {
         $meta_query = $this->add_status_check_to_meta_query($query->get('meta_query'));
         $query->set('meta_query', $meta_query);
     }
 }
Ejemplo n.º 12
0
 public function get_posts()
 {
     $query = $_POST['query'];
     $hash = $this->get_query_hash($query);
     check_ajax_referer($hash);
     // $query is signed by nonce
     $wp_query = new \WP_Query($query);
     $posts = $wp_query->posts;
     if (!$posts) {
         exit('-1');
     }
     $posted_opts = $_POST['opts'];
     $opts = array('hide_title' => $this->_bool($posted_opts['hide_title']), 'link' => in_array($posted_opts['link'], array('post', 'file', 'thickbox', 'none')) ? $posted_opts['link'] : wp_tiles()->options->get_option('link'), 'byline_template' => wp_kses_post($posted_opts['byline_template']), 'byline_template_textonly' => $this->_bool($posted_opts['byline_template_textonly']), 'images_only' => $this->_bool($posted_opts['images_only']), 'image_size' => $posted_opts['image_size'], 'text_only' => $this->_bool($posted_opts['text_only']), 'link_new_window' => $this->_bool($posted_opts['link_new_window']));
     ob_start();
     wp_tiles()->render_tile_html($posts, $opts);
     $html = ob_get_contents();
     ob_end_clean();
     $ret = array('tiles' => $html);
     $max_page = $wp_query->max_num_pages;
     $next_page = intval($wp_query->get('paged')) + 1;
     // Is there another page?
     if ($next_page <= $max_page) {
         $ret['has_more'] = true;
         $query['paged'] = $next_page;
         $ret['_ajax_nonce'] = $this->get_query_nonce($query);
     } else {
         $ret['has_more'] = false;
     }
     $this->_return($ret);
 }
Ejemplo n.º 13
0
/**
 * Integrate EP into proper queries
 * 
 * @param  WP_Query $query
 * @since  2.1
 */
function ep_admin_integrate($query)
{
    // Lets make sure this doesn't interfere with the CLI
    if (defined('WP_CLI') && WP_CLI) {
        return;
    }
    if (!$query->is_main_query()) {
        return;
    }
    /**
     * We limit to these post types to not conflict with other modules like WooCommerce
     *
     * @since  2.1
     * @var array
     */
    $post_types = array('post' => 'post', 'page' => 'page');
    $supported_post_types = apply_filters('ep_admin_supported_post_types', $post_types);
    $post_type = $query->get('post_type');
    if (empty($post_type)) {
        $post_type = 'post';
    }
    if (is_array($post_type)) {
        foreach ($post_type as $pt) {
            if (empty($supported_post_types[$pt])) {
                return;
            }
        }
        $query->set('ep_integrate', true);
    } else {
        if (!empty($supported_post_types[$post_type])) {
            $query->set('ep_integrate', true);
        }
    }
}
 /**
  * @param WP_Query $query
  */
 function _order_posts($query)
 {
     if ($query->get('post_type') == 'jcaca-course' && is_admin()) {
         $query->set('orderby', 'meta_value');
         $query->set('order', 'ASC');
         $query->set('meta_key', '_rbm_course_code');
     }
 }
Ejemplo n.º 15
0
 /**
  * This is expected to be called in the context of the tribe_events_pre_get_posts
  * action and only when it has already been determined that the request is to see
  * all events making up a recurring sequence.
  *
  * @see Tribe__Events__Pro__Main::pre_get_posts()
  *
  * @param WP_Query $query
  */
 public function __construct(WP_Query $query)
 {
     $this->query = $query;
     $this->slug = $query->get('name');
     if (!empty($this->slug)) {
         $this->setup();
     }
 }
 public function prepare_items()
 {
     $paged = $this->get_pagenum();
     $args = array('post_type' => 'json_consumer', 'post_status' => 'any', 'meta_query' => array(array('key' => 'type', 'value' => 'oauth1')), 'paged' => $paged);
     $query = new WP_Query($args);
     $this->items = $query->posts;
     $pagination_args = array('total_items' => $query->found_posts, 'total_pages' => $query->max_num_pages, 'per_page' => $query->get('posts_per_page'));
     $this->set_pagination_args($pagination_args);
 }
Ejemplo n.º 17
0
 /**
  * This filter is needed to display correctly the posts with the '--- MORE ---' separator
  * in archives.
  * Without it, the post content is truncated at the beginning of <!--more-->, thus keeping
  * only the first language.
  * *
  * 'the_posts' filter is used by @see get_posts(), which is commonly used in all sorts of places,
  * including, for instance, @see wp_get_associated_nav_menu_items while deleting a post.
  * So, to minimize potential side effects, we limit the scope to main queries, or
  * when the 'wpglobus_force_filter__the_posts' is set
  * (@see WPGlobus_QA::_test_get_posts for example).
  *
  * @param array    $posts
  * @param WP_Query $query
  *
  * @return array
  * @since 1.0.14
  */
 public static function filter__the_posts($posts, &$query)
 {
     if ($query->is_main_query() || $query->get('wpglobus_force_filter__the_posts')) {
         foreach ($posts as $post) {
             WPGlobus_Core::translate_wp_post($post, WPGlobus::Config()->language, WPGlobus::RETURN_IN_DEFAULT_LANGUAGE);
         }
     }
     return $posts;
 }
Ejemplo n.º 18
0
 /**
  * Retrieves year, month and day parameters from the query if they are set and builds the appropriate sql
  * snippet to filter for them.
  *
  * @param WP_Query $query
  *
  * @return string
  */
 private function by_date_snippet($query)
 {
     $snippet = '';
     foreach (array('year' => 'YEAR', 'monthnum' => 'MONTH', 'day' => 'DAY') as $index => $time_unit) {
         if ((bool) ($value = $query->get($index)) === true) {
             $snippet .= $this->wpdb->prepare(" AND {$time_unit}(post_date) = %d ", $value);
         }
     }
     return $snippet;
 }
Ejemplo n.º 19
0
 function get_connectable($item_id, $page, $search, $to_exclude, $directed)
 {
     $qv = array_merge($this->get_base_qv(), self::$admin_box_qv, array('posts_per_page' => ADMIN_BOX_PER_PAGE, 'paged' => $page));
     if ($search) {
         $qv['s'] = $search;
     }
     $qv['post__not_in'] = $to_exclude;
     $qv = apply_filters('p2p_connectable_args', $qv, $directed, $item_id);
     $query = new WP_Query($qv);
     return (object) array('items' => $query->posts, 'current_page' => max(1, $query->get('paged')), 'total_pages' => $query->max_num_pages);
 }
Ejemplo n.º 20
0
 /**
  * フックで表示するレコードに変更があれば変更
  *
  * @param WP_Query $wp_query
  */
 public function pre_get_posts($wp_query)
 {
     if ($wp_query->is_main_query()) {
         $post_type = $wp_query->get('post_type');
         $args = apply_filters('mwform_get_inquiry_data_args-' . $post_type, array());
         if (!empty($args) && is_array($args)) {
             foreach ($args as $key => $value) {
                 $wp_query->set($key, $value);
             }
         }
     }
 }
Ejemplo n.º 21
0
 public function where_organizer($where, WP_Query $query)
 {
     // bail if this is not a query for event post type
     if ($query->get('post_type') !== Tribe__Events__Main::POSTTYPE) {
         return $where;
     }
     $organizers = array_filter(array_map('absint', $this->active[$this->key]));
     if (empty($organizers)) {
         return $where;
     }
     $where .= ' AND organizer_meta.meta_value in ( ' . implode(',', $organizers) . ' ) ';
     return $where;
 }
Ejemplo n.º 22
0
function tst_main_query_mods(WP_Query $query)
{
    // exclude account_deleted's tasks:
    if (!is_admin() && $query->is_main_query()) {
        if (is_tag() && !$query->get('post_type')) {
            $query->set('post_type', 'tasks');
        }
        $query->set('author', '-' . ACCOUNT_DELETED_ID);
    }
    if ($query->is_main_query() && $query->is_archive() || $query->get('post_type') == 'tasks') {
        if (!empty($_GET['st'])) {
            $query->set('post_status', $_GET['st'] == '-' ? array('publish', 'in_work', 'closed') : $_GET['st']);
        }
        if (!empty($_GET['dl'])) {
            $metas = (array) $query->get('meta_query');
            switch ($_GET['dl']) {
                case '10':
                    $metas[] = array('key' => 'deadline', 'value' => array(date('Ymd'), date('Ymd', strtotime('+10 days'))), 'compare' => 'BETWEEN', 'type' => 'DATE');
                    break;
                case 'lm':
                    $metas[] = array('key' => 'deadline', 'value' => array(date('Ymd'), date('Ymd', strtotime('+1 month'))), 'compare' => 'BETWEEN', 'type' => 'DATE');
                    break;
                case 'mm':
                    $metas[] = array('key' => 'deadline', 'value' => array(date('Ymd', strtotime('+1 month')), date('Ymd', strtotime('+6 months'))), 'compare' => 'BETWEEN', 'type' => 'DATE');
                    break;
            }
            $query->set('meta_query', $metas);
        }
        if (!empty($_GET['rw'])) {
            $metas = (array) $query->get('meta_query');
            $metas[] = array('key' => 'reward', 'value' => $_GET['rw'], 'compare' => '=');
            $query->set('meta_query', $metas);
        }
        if (!empty($_GET['tt'])) {
            $query->set('tag_slug__in', (array) $_GET['tt']);
        }
    }
}
Ejemplo n.º 23
0
 /**
  * Fires after the query variable object is created, but before the actual query is run.
  *
  * @since 2.0.0
  *
  * @param WP_Query $query The WP_Query instance (passed by reference).
  */
 function pre_get_posts($query)
 {
     $liking = false;
     $liking_user = $query->get('liking_user');
     if (is_int($liking_user) && $liking_user >= 0) {
         $liking_type = $query->get('liking_type');
         if (empty($liking_type)) {
             $query->set('liking_type', 'like');
         }
         $liking = true;
     }
     $orderby = $query->get('orderby');
     if (strpos($orderby, 'like_count') !== false) {
         $meta_query = array_filter((array) $query->get('meta_query'));
         $query->set('meta_query', array_merge($meta_query, array('relation' => 'OR', array('key' => 'dp_like_count', 'compare' => 'NOT EXISTS'), array('key' => 'dp_like_count', 'compare' => 'EXISTS'))));
         $query->set('orderby', str_replace('like_count', 'meta_value_num', $orderby));
         $query->set('meta_key', '');
         //add_filter( 'posts_join', array( $this, 'posts_join' ), 10, 2 );
         //add_filter( 'posts_groupby', array( $this, 'posts_groupby' ), 10, 2 );
         //add_filter( 'posts_orderby', array( $this, 'posts_orderby' ), 10, 2 );
     } else {
         //remove_filter( 'posts_orderby', array( $this, 'posts_orderby' ) );
     }
     //		if ( $query ) {
     //			add_filter( 'posts_join', array( $this, 'posts_join' ), 10, 2 );
     //			add_filter( 'posts_where', array( $this, 'posts_where' ), 10, 2 );
     //			add_filter( 'posts_orderby', array( $this, 'posts_orderby' ), 10, 2 );
     //
     //		} else {
     //			remove_filter( 'posts_join', array( $this, 'posts_join' ) );
     //			remove_filter( 'posts_where', array( $this, 'posts_where' ) );
     //			remove_filter( 'posts_orderby', array( $this, 'posts_orderby' ), 10, 2 );
     //
     //
     //		}
 }
/**
 * Posts clauses
 *
 * http://codex.wordpress.org/WordPress_Query_Vars
 * http://codex.wordpress.org/Custom_Queries
 *
 * @param array $pieces
 * @param WP_Query $query
 * @return string
 */
function orbis_subscriptions_posts_clauses($pieces, $query)
{
    global $wpdb;
    $post_type = $query->get('post_type');
    if ($post_type == 'orbis_subscription') {
        // Fields
        $fields = ",\n\t\t\tsubscription.activation_date AS subscription_activation_date,\n\t\t\tsubscription.expiration_date AS subscription_expiration_date,\n\t\t\tsubscription.cancel_date AS subscription_cancel_date,\n\t\t\tsubscription.update_date AS subscription_update_date,\n\t\t\tsubscription_type.name AS subscription_type_name,\n\t\t\tsubscription_type.price AS subscription_type_price\n\t\t";
        // Join
        $join = "\n\t\t\tLEFT JOIN\n\t\t\t\t{$wpdb->orbis_subscriptions} AS subscription\n\t\t\t\t\tON {$wpdb->posts}.ID = subscription.post_id\n\t\t\tLEFT JOIN\n\t\t\t\t{$wpdb->orbis_subscription_products} AS subscription_type\n\t\t\t\t\tON subscription.type_id = subscription_type.id\n\t\t";
        // Where
        $where = '';
        $pieces['join'] .= $join;
        $pieces['fields'] .= $fields;
        $pieces['where'] .= $where;
    }
    return $pieces;
}
function make_sortable_by_term_name($clauses = array(), WP_Query $wp_query)
{
    global $wpdb;
    $post_type = isset($wp_query->query_vars['post_type']) && !empty($wp_query->query_vars['post_type']) ? strtolower($wp_query->query_vars['post_type']) : 'post';
    if (isset($wp_query->query['orderby']) && in_array($wp_query->query['orderby'], get_object_taxonomies($post_type, 'names'))) {
        $clauses['fields'] .= ", {$wpdb->term_relationships}.object_id, GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) AS {$wp_query->query['orderby']}";
        $clauses['join'] .= <<<SQL
LEFT OUTER JOIN {$wpdb->term_relationships} ON {$wpdb->posts}.ID={$wpdb->term_relationships}.object_id
LEFT OUTER JOIN {$wpdb->term_taxonomy} USING (term_taxonomy_id)
LEFT OUTER JOIN {$wpdb->terms} USING (term_id)
SQL;
        $clauses['where'] .= " AND taxonomy = '{$wp_query->query['orderby']}'";
        $clauses['groupby'] = "object_id";
        $order = 'ASC' == strtoupper($wp_query->get('order')) ? 'ASC' : 'DESC';
        $clauses['orderby'] = "GROUP_CONCAT({$wpdb->terms}.name ORDER BY name ASC) {$order}";
    }
    return $clauses;
}
Ejemplo n.º 26
0
/**
 * Modify queries for Comics
 *
 * @global wpdb $wpdb WordPress DB oject
 * @param WP_Query $query
 */
function _mangapress_comics_pre_get_posts($query)
{
    global $wpdb;
    if ($query->get('post_type') !== MangaPress_Posts::POST_TYPE || is_admin()) {
        return;
    }
    $sql = "SELECT * FROM {$wpdb->term_taxonomy} WHERE taxonomy='" . MangaPress_Posts::TAX_SERIES . "'";
    $is_taxonomy = $wpdb->get_var($sql);
    if (!$is_taxonomy) {
        return;
    }
    add_filter('posts_join', 'mangapress_join');
    if ($query->is_single()) {
        add_filter('posts_fields', 'mangapress_select_fields');
    } else {
        add_filter('posts_distinct', 'mangapress_distinct_rows');
    }
}
Ejemplo n.º 27
0
/**
 * Check if the query is requesting event post type
 *
 * @param WP_Query $query
 * @return boolean true if events are queried, false otherwises
 */
function is_pronamic_events_query(WP_Query $query)
{
    $is_pronamic_events = false;
    if ($query->is_archive() && !$query->is_tax('pronamic_event_status')) {
        // Check 'post_type' var
        // Note: post_type could also be an array
        $post_type = $query->get('post_type');
        if (!empty($post_type) && !is_array($post_type)) {
            $is_pronamic_events = post_type_supports($post_type, 'pronamic_event');
        }
        if (!$is_pronamic_events) {
            // Check queried object
            $object = $query->get_queried_object();
            $is_pronamic_events = isset($object, $object->name) && post_type_supports($object->name, 'pronamic_event');
        }
    }
    return $is_pronamic_events;
}
Ejemplo n.º 28
0
 /**
  * Inspect and possibly adapt the main query in order to force the main events page to the
  * front of the house.
  *
  * @param $query
  * @return WP_Query
  */
 public function parse_query(WP_Query $query)
 {
     // Is this the main query / is it trying to find our front events page? If not, don't interfere
     $events_on_front = self::FAKE_POST_ID === (int) $query->get('page_id');
     if (!$events_on_front || !$query->is_main_query()) {
         return $query;
     }
     // We don't need this to run again after this point
     remove_action('parse_query', array($this, 'parse_query'), 25);
     // Let's set the relevant flags in order to cause the main events page to show
     $query->set('page_id', 0);
     $query->set('post_type', Tribe__Events__Main::POSTTYPE);
     $query->set('eventDisplay', 'default');
     $query->set('eventrocket_frontpage', true);
     // Some extra tricks required to help avoid problems when the default view is list view
     $query->is_page = false;
     $query->is_singular = false;
     return $query;
 }
Ejemplo n.º 29
0
 /**
  * @group taxonomy
  */
 function test_category__and_var()
 {
     $q = new WP_Query();
     $term_id = $this->factory->category->create(array('slug' => 'woo', 'name' => 'WOO!'));
     $term_id2 = $this->factory->category->create(array('slug' => 'hoo', 'name' => 'HOO!'));
     $post_id = $this->factory->post->create();
     wp_set_post_categories($post_id, $term_id);
     $posts = $q->query(array('category__and' => array($term_id)));
     $this->assertEmpty($q->get('category__and'));
     $this->assertCount(0, $q->get('category__and'));
     $this->assertNotEmpty($q->get('category__in'));
     $this->assertCount(1, $q->get('category__in'));
     $this->assertNotEmpty($posts);
     $this->assertEquals(array($post_id), wp_list_pluck($posts, 'ID'));
     $posts2 = $q->query(array('category__and' => array($term_id, $term_id2)));
     $this->assertNotEmpty($q->get('category__and'));
     $this->assertCount(2, $q->get('category__and'));
     $this->assertEmpty($q->get('category__in'));
     $this->assertCount(0, $q->get('category__in'));
     $this->assertEmpty($posts2);
 }
 /**
  * Checks query to see if it is a search, and if so, kicks off the
  * Sphinx search
  *
  * @param WP_Query $wp_query
  */
 public function parse_query($wp_query)
 {
     if ($wp_query->is_search) {
         if (class_exists('SphinxClient')) {
             switch ($wp_query->get('sort')) {
                 case 'date':
                     $wp_query->query_vars['orderby'] = 'date';
                     $wp_query->query_vars['order'] = 'DESC';
                     break;
                 case 'title':
                     $wp_query->query_vars['orderby'] = 'title';
                     $wp_query->query_vars['order'] = 'ASC';
                     break;
                 default:
                     $wp_query->query_vars['sort'] = 'match';
                     //setting this so sort link will be hilighted
             }
             $results = $this->search_posts($wp_query->query_vars);
             if ($results) {
                 $matching_ids = array();
                 if (intval($results['total']) > 0) {
                     foreach ($results['matches'] as $result) {
                         $matching_ids[] = intval($result['attrs']['post_id']);
                     }
                 } else {
                     $matching_ids[] = -1;
                 }
                 //clear the search query var so posts aren't filtered based on the search
                 $wp_query->query_vars['sphinx_search_term'] = $wp_query->query_vars['s'];
                 unset($wp_query->query_vars['s']);
                 if (isset($wp_query->query_vars['paged'])) {
                     //set our own copy of paged so that wordpress doesn't try to page a query already limiting posts
                     $wp_query->query_vars['sphinx_paged'] = $wp_query->query_vars['paged'];
                     unset($wp_query->query_vars['paged']);
                 }
                 $wp_query->query_vars['post__in'] = $matching_ids;
                 $wp_query->query_vars['sphinx_num_matches'] = intval($results['total']);
             }
         }
     }
 }