0

I'm trying something but I have an issue with WP_Query.

I've an Hook on the_post in order to add some variation on the query.

add_filter('the_posts', 'query_variation');

function query_variation($posts, $query = false) {
    if (is_search())
    {
    // Do stuff
    }
}

It's working well when I'm searching on the site. But, I know creating an ajax search like that :

function ajax_search_123( ){
     $search_keyword = esc_attr($_REQUEST['query']);
     $args = array(
            's'                     => $search_keyword),
            'post_type'             => 'product',
            'posts_per_page'        => 3,
        );
        $products_query = new WP_Query( $args );
        // Do stuff with $product_query
}

But when I instanciate WP_Query with $args, is_search() doesn't return true so I'm entering on the if...

What Can I do ?

Thank you for your help

  • It's hard to know without more context, but it sounds like you may be better served by the pre_get_posts action. – mrwweb Jul 17 '14 at 22:30
0

You are slightly confusing $wp_query global variable with WP_Query class/objects. $wp_query is an object instance of WP_Query, but not every WP_Query object has anything to do with $wp_query global.

Function version of conditionals, such as is_search(), always act on main global query. You shouldn't use them inside filters, since global state might be one thing and the query you are actually in another.

Inside hooks you should be always making checks on instance of query provided, via its methods. For example $query->is_search().

| improve this answer | |
  • Understood, so I can't use get_search_query() but $query->get('s') instead ? – XciD Jul 17 '14 at 23:05
  • @XcID yes, and so on. Just check sources of the "global" versions of function to see which data they are wrapping and how. – Rarst Jul 17 '14 at 23:07

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.