Support » Fixing WordPress » Custom Search by post_type

  • I’ve tried a couple of methods but I cannot seem to filter custom post_types from my search results and was hoping someone could help.

    I have installed “Job Manager” and created 4 jobs which have a custom post_type = 'jobman_job'

    I tried to create a manual search form and set a hidden value of post_type = jobman_job but it still returned all posts.

    <form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
        <input type="text" name="s" id="s" value=""/>
        <input type="hidden" name="post_type" value="jobman_job" />
        <input type="submit" id="searchsubmit" value="Search" />
        </form>

    I then tried creating a custom search page and redirecting the search to this page as follows (i.e. I added the page_id of custom search page):

    <form role="search" method="get" id="searchform" action="<?php echo home_url( '/' ); ?>">
        <input type="text" name="s" id="s" value=""/>
        <input type="hidden" name="page_id" value="123" />
        <input type="hidden" name="post_type" value="jobman_job" />
        <input type="submit" id="searchsubmit" value="Search" />
        </form>

    And then in the custom search page, I added the following code (as per wordpress guide – http://codex.wordpress.org/Creating_a_Search_Page) and I added the post_type of jobman_job to the query array:

    global $query_string;
    
        $query_args = explode("&", $query_string);
        $search_query = array('post_type' => 'jobman_job');
    
        foreach($query_args as $key => $string) {
        	$query_split = explode("=", $string);
        	$search_query[$query_split[0]] = urldecode($query_split[1]);
        } // foreach
    
        $search = new WP_Query($search_query);

    And it still displays all posts…

    What am I doing wrong? I have checked the post_type column in the wp_posts table and I have 4 unique entries…so they are there…

    Any Insight?

Viewing 4 replies - 1 through 4 (of 4 total)
  • Moderator keesiemeijer

    (@keesiemeijer)

    moderator

    Try it with the hidden input in the form:
    <input type="hidden" name="post_type" value="jobman_job" />

    and put this in your theme’s functions.php to only search jobman_job post type if the form with the hidden imput is submitted:

    function mySearchFilter($query) {
    
    	if (isset($_GET['post_type']) && $_GET['post_type'] == 'jobman_job') {
    		$post_type = 'jobman_job';
    	} else {
    		$post_type = 'any';
    	}
        if ($query->is_search) {
            $query->set('post_type', $post_type);
        };
        return $query;
    };
    
    add_filter('pre_get_posts','mySearchFilter');

    That worked like a treat…Thanks very much!

    Moderator keesiemeijer

    (@keesiemeijer)

    moderator

    You’re welcome. Glad you got it resolved.

    Now the search results are playing up… I’ve posted another topic if you feel up to it? http://wordpress.org/support/topic/wordpress-search-results?replies=1

Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘Custom Search by post_type’ is closed to new replies.