6

I'm using bainternet's method for searching custom post_types and it works great. However, I've recently been requested to return more than one "specific" post type and perhaps individual pages for a support section on our site.

I thought adding additional hidden fields would do it, but that didn't work. And I have no clue how this will work with pages.

Any help would be appreciated!


In the template:

<form action="http://apollo.website.net/" id="searchform" method="get" role="search">
    <div><label for="s" class="screen-reader-text">Search for:</label>
    <input type="text" id="s" name="s" value="">
    <input type="submit" value="Search" id="searchsubmit">

    <input type="hidden" name="post_type" value="software" />
    </div>
</form>

In functions.php:

/* Custom Search Queries */
function SearchFilter($query) {
$post_type = $_GET['post_type'];
if (!$post_type) {
    $post_type = 'any';
}
if ($query->is_search) {
    $query->set('post_type', $post_type);
};
return $query;
} 
13

change

<input type="hidden" name="post_type" value="software" />

to

<input type="hidden" name="post_type[]" value="software" />
<input type="hidden" name="post_type[]" value="books" />

i have to run but this should work , just add as many hidden fields as you need for each post type

| improve this answer | |
  • Works great, thanks! Is there a way to get it to return related pages as well? – Zach Shallbetter Mar 22 '11 at 17:09
  • Arrayed input values won't work with the GET method, i'd be surprised if that code is actually doing what you think it is.. – t31os Mar 22 '11 at 17:20
  • My mistake, it works when used alongside the filter from the user's previous question, disregard above comment. – t31os Mar 22 '11 at 17:25
2

You could do it like this to switch between a singular set type and any..

<input type="hidden" name="post_type" value="software" />
<label for="post_type">Search all</label>
<input type="checkbox" name="post_type" value="any" />

Unchecked searches your specific type, checked sets the post type to any..

| improve this answer | |
  • This is just an additional tip to compliment Bainternet's answer. ;) – t31os Mar 22 '11 at 17:30
0

To me works that solution (same as Bainternet's, but without "[]" after "post_type"):

  <input type="hidden" name="post_type" value="photo">
  <input type="hidden" name="post_type" value="video">

And to get a specific template for search results based on the post type(s) (on functions.php):

function search_template_chooser($template) {
  global $wp_query;
  $post_type = get_query_var('post_type');
  if( $wp_query->is_search && $post_type == 'photo' || $wp_query->is_search && $post_type == 'video' ) {
    return locate_template('search-media.php');
  }
  return $template;
}

add_filter('template_include', 'search_template_chooser');
| improve this answer | |

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.