WordPress.org

Ready to get started?Download WordPress

Forums

Custom Search by post_type (5 posts)

  1. whitsey
    Member
    Posted 2 years ago #

    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?

  2. keesiemeijer
    moderator
    Posted 2 years ago #

    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');
  3. whitsey
    Member
    Posted 2 years ago #

    That worked like a treat...Thanks very much!

  4. keesiemeijer
    moderator
    Posted 2 years ago #

    You're welcome. Glad you got it resolved.

  5. whitsey
    Member
    Posted 2 years ago #

    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

Topic Closed

This topic has been closed to new replies.

About this Topic