/** * 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; }
/** * @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); } }
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' ) ); }
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); } }
/** * 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); } }
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); }
/** * 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'); } }
/** * 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); }
/** * 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; }
/** * 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; }
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); }
/** * フックで表示するレコードに変更があれば変更 * * @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); } } } }
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; }
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']); } } }
/** * 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; }
/** * 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'); } }
/** * 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; }
/** * 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; }
/** * @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']); } } } }