Multiple Search Results Pages within One WordPress Site
Posted on May 13, 2009 at 11:31pm
On a client site I’m currently developing in WordPress, I’m having to add the client’s existing articles to the new site, as well as his old blog. I wanted them to both exist as Posts, but to be separated within the site. Most of that was straightforward – by assigning articles and blog posts to their own Post Categories, I was able to only include, say, Posts from ‘Category #1′ on the Articles page, and Posts from ‘Category #2′ on the blog page.
Where I came a little unstuck was the Search feature in WordPress. No matter which page I searched from, I would be given the relevant results from all Posts, not just the Category in question. So here’s how I went about fixing that…
Firstly, I added the following Search form to my sidebar:
<form method="get" id="searchform" action="<?php bloginfo('home'); ?>/">
<input type="text" name="s" id="s" value="Search" size="18" maxlength="96" onblur="if(this.value=='') this.value='Search';" onfocus="if(this.value=='Search') this.value='';" />
<input type="hidden" name="site_section" value="blog" />
<input type="submit" value="Search" class="hidden" id="searchsubmit" />
</form>
Note the third line, with the hidden input (that’s the third line if you paste that into a code editor, not what shows up here). On the sidebar for the blog, I gave that input field a value of ‘blog’; for the sidebar on the articles page, I gave it a value of — yeah, you guessed it — ‘articles’.
Then, create a file named ’search.php’, and paste the following into it:
<?php
/* Template Name: Search Results */
$search_refer = $_GET["site_section"];
if ($search_refer == 'blog') { load_template(TEMPLATEPATH . '/blog-index.php'); }
elseif ($search_refer == 'articles') { load_template(TEMPLATEPATH . '/articles-index.php'); }; ?>
The important part here is, again, the third line. This looks up the value of the hidden input on the search form, and assigns it to the variable, ‘$search_refer’.
After that, the if statement decides, depending on the value of ‘$search_refer’, which template to load. The load_template function will ensure that the referenced page is shown, displaying the results from the search term.
One last thing you’ll need to do is edit the Post index. In this example, I’ll show you what was added to ‘blog-index.php’. This goes directly before The Loop.
<?php if( is_search() ) :
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("s=$s&paged=$paged&cat=4");
endif; ?>
For now, I’m going to admit ignorance about the second line (and if you can explain it, then please, go ahead!). I don’t fully understand what purpose it serves — I pieced this solution together from a few places — but the third line (what’s with that?!) has the important bit you need to pay attention to.
On this client’s site, the ‘Blog’ Category has an ID number of ‘4′; that’s why the ‘query_posts’ function has ‘cat=4′ at the end — this only includes Posts from that Category in the output.
On the ‘articles-index.php’ template page, ‘query_posts’ has ‘cat=3′, to only show ‘Articles’ Posts. Fairly straightforward, right?
In this particular example (and I thought it best to show it as closely to my working version as is clear), I’ve sent the different results to different template pages because those templates differ to a large degree. However, if your search results templates for the different sections are identical (or nearly), then you could skip out the ’search.php’ file, and this to your index file:
<?php $search_refer = $_GET["site_section"];
if( is_search() ) :
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
if ($search_refer == 'blog') { query_posts("s=$s&paged=$paged&cat=4"); }
elseif ($search_refer == 'articles') { query_posts("s=$s&paged=$paged&cat=3"); };
endif; ?>
That should do the whole lot after the search form in one step! If you’ve come up with a more elegant solution to this, or know a more efficient way to implement this solution, then please leave a comment — we all benefit from sharing tips like these!
Categories: Tutorial, Web Design, WordPress.
Bookmark: Digg, Delicious, StumbleUpon, Design Float.
Comments on Multiple Search Results Pages within One WordPress Site
Great post dude! :)
Bookmarked – coz I know this is gonna come up!
Posted by Rob MacKay (1 comments) on 14th May, 2009 at 10:35 am.
nice stuff i am looking for search result to index in search engine
Posted by xinfo (1 comments) on 5th June, 2009 at 3:57 pm.
Cheers guys, I hope it comes in handy for you both.
Posted by Rob Barrett (45 comments) on 5th June, 2009 at 5:11 pm.
Rob, this is awesome. Great piece of knowledge. Keep up the good work dude. I liked the way you explained this…
Thanks!
Posted by Glowtouch Technologies (1 comments) on 19th June, 2009 at 6:59 am.
Thanks for getting in touch, I’m glad you found it easy to understand!
Posted by Rob Barrett (45 comments) on 7th July, 2009 at 2:03 pm.
Great article, very clear. I’ve been looking for this all over…
Keep up the good work !
Posted by Mehdi (1 comments) on 10th August, 2009 at 8:11 pm.
Seems like a great solution. Bookmarked, since like Rob, I also know it’s gonna come soon…
Thanks
Posted by Maor B. (1 comments) on 1st September, 2009 at 1:58 am.
Wow…that’s great tips! i will try it,thanks rob!
Posted by Jasa Pembuatan web (1 comments) on 8th November, 2009 at 3:57 pm.
Nice tips, really helpful. thanks a lot!
Posted by Hazel (1 comments) on 18th January, 2010 at 7:45 am.
Hi,
Congrats, it is a great tutorial and very useful. I can also understand it easily that I can also execute it because of your easy to follow instructions.
Thanks,
Rommel
Posted by Furniture Lift (4 comments) on 28th February, 2010 at 2:31 pm.
Thank for information. That’s good idea.
Posted by sheath dress (1 comments) on 29th March, 2010 at 10:32 pm.
It was a grateful moment while I’m reading your article. I have learned a lot from it.
Posted by Limoges Porcelain Boxes (2 comments) on 8th April, 2010 at 12:54 am.
It seems as a great tip. If I only know much in web design I would love to share something here. I think you are the only one have figure out this solution. Nice job.
Posted by ohare airport limo service (7 comments) on 15th April, 2010 at 10:34 am.
I cannot thank you enough. I have been looking to solve a search problem for about a month, and finally, with the help you give here, my different searches in different areas of the blog is working.
Thank you so much. I already linked to your page in wordpress forum support because I am sure I am not the only one having this problem.
Many thanks.
Posted by Margarida Fernandes (1 comments) on 15th April, 2010 at 7:50 pm.
Thank for function.
Posted by trimmer (1 comments) on 20th April, 2010 at 8:46 pm.
thank you!
Posted by ben (1 comments) on 22nd April, 2010 at 9:52 pm.
This is very timely for me. I’m been looking for this. This will be a great help for me. Thanks for sharing your knowledge. I wish you success in your business.
Posted by Web design Darwin (2 comments) on 11th June, 2010 at 5:15 am.
Hi Rob, many thanks for sharing this usefull information. I will try on my wordpress blog.
Posted by baju import korea (1 comments) on 27th July, 2010 at 9:34 am.
Trackbacks for Multiple Search Results Pages within One WordPress Site
Linked from How to Customize Multiple Search Result Pages in Wordpress | Wordpress Garage on 23rd July, 2009 at 7:28 am.
Linked from Disha Hosting » How to Customize Multiple Search Result Pages in Wordpress on 31st July, 2009 at 11:54 am.
Leave a Comment