1

I'm trying to use the search query along with an array of arguments to narrow down search results, but I'm failing horribly. This is what I have so far.

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;          

$query_string = 's=test&category=wordpress'      

$s_array = array(
    'post_type' => 'blog',
    'caller_get_posts' => 1, 
    'paged' => $paged, 
    'meta_query' => array(
        array(
            'key' => 'votes_percent',
            'value' => '50',
            'compare' => '>',
            'type' => 'numeric',
        )
    )
);
$s_query = http_build_query($s_array);
$is_query = '&' . $s_query;
$s_streaming = $query_string . $is_query;  
query_posts($s_streaming);

When echoing out $s_streaming I get

s=test&category=wordpress&post_type=blog&caller_get_posts=1&paged=1&meta_query%5B0%5D%5Bkey%5D=votes_percent&meta_query%5B0%5D%5Bvalue%5D=50&meta_query%5B0%5D%5Bcompare%5D=%3E&meta_query%5B0%5D%5Btype%5D=numeric

If I remove the meta_query keys it works, so I'm guessing that is where my problem resides.

It works fine like this

query_posts($s_array); //just using the array to filter

query_posts($query_string); //just using the search query
//$query_string = 's=test&category=wordpress';

I'm trying to build the string to query, because this fails.

query_posts($query_string . $s_array); //using both

Can anyone point me in the right direction?

5
  • Probably because $s_array is an array, whereas $query_string is a string. I'm sure you cannot append these two. Can you edit your code to include what $query_string holds? Commented Oct 24, 2011 at 4:36
  • Updated. That is what I thought to, which is why I convert the $s_array to a string then tried appending it. But the meta_query keys are held in another array which is what I think the problem is. Commented Oct 24, 2011 at 16:36
  • Can you show $query_string value? Commented Oct 24, 2011 at 16:47
  • Sorry, Updated the question again with it's value which is 's=test&category=wordpress' Commented Oct 24, 2011 at 16:57
  • was looking for the same thing... and this function will do it! codex.wordpress.org/Function_Reference/wp_parse_args Commented Nov 16, 2012 at 1:24

2 Answers 2

2

I'd suggest not using $query_string to simplify things. If you're using an array, stick with the array form for the query variables:

global $wp;
$paged = ((int)get_query_var('paged')) ? (int)get_query_var('paged') : 1;
$s_array = array(
    'post_type' => 'blog',
    'caller_get_posts' => 1,
    'paged' => $paged,
    'meta_query' => array(
        array(
            'key' => 'votes_percent',
            'value' => '50',
            'compare' => '>',
            'type' => 'numeric',
        )
    )
);
$new_query = array_merge( $s_array, (array)$wp->query_vars );
query_posts($new_query);
2
  • this works, but is ignoring the category key/value pair. Commented Oct 24, 2011 at 17:36
  • ok it must have been a flaw inside my code, because its working now. Thanks! Commented Oct 24, 2011 at 17:40
0

If you're trying to combine $query_string and $s_array, try this...

<?php

    //We use values of 's' and 'category' to add values to $s_array
    $query_string = 's=test&category=wordpress';

    $s_array = array(
        'post_type' => 'blog',
        'caller_get_posts' => 1, 
        'paged' => $paged, 
        'meta_query' => array(
        array(
            'key' => 'votes_percent',
            'value' => '50',
            'compare' => '>',
            'type' => 'numeric',
            )
        ),
        's' => 'test',
        'category' => 'wordpress'
    );

    //Use $s_array for query_posts directly
    query_posts($s_array);
?>

I guess this will work...

2
  • I thought about this, but I generate the $query_string threw a search form. any way to append to an array? Also the user has the option to not include some fields. Like category sometimes won't be declared. Commented Oct 24, 2011 at 17:25
  • @TimothyJr My answer takes the variable nature of the page's query into account above and keeps everything typed as an array. Commented Oct 24, 2011 at 17:30

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.