Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

I have custom post type with some products. I need to add some content filtering now. I have custom meta box with "author". I want to add buttons with authors that will act like categories. So let me explain it by example: I have 3 products: (product num - author)

1 - John
2 - Sarah
3 - Tom

When I go to my page I see all three products. I want to add 3 buttons on top:

John| Sarah | Tom

Every click on button filters results of my query. So by clicking John we see only one product on my site - product 1. How to bite this?

I've displayed text with authors using another query_posts() above my original query, but I have no idea what to do next?

share|improve this question
add comment

2 Answers

You can filter your query_posts() results by a custom meta field with the "meta_query" array and its corresponding subfilters. For more information check the Wordpress codex on Custom Field Parameters.

http://codex.wordpress.org/Class_Reference/WP_Query#Custom_Field_Parameters

An alternative method would be to setup the new filter variables in Wordpress' query_vars and use that instead of $_GET:

http://codex.wordpress.org/Custom_Queries#Custom_Archives

share|improve this answer
    
Thanks for the link. So You think that simply using php for adding clicked values to the link and $_GET is a good way of doing this? –  smogg Mar 19 '12 at 20:58
    
As long as the variables are properly escaped and filtered, there's no reason not to use this method, as it is the simplest way in PHP to handle a form that filters content. I've used similar solutions for filtering content in Wordpress. You can also declare new variables in the "query_vars" and use that instead, Wordpress has information in its codex: codex.wordpress.org/Custom_Queries#Custom_Archives –  Dave Hunt Mar 21 '12 at 15:42
add comment

Something like this maybe ?

$query = new WP_Query( array( 'meta_key' => 'author', 'meta_value' => 'john' ) );
// Loop for John ...
wp_reset_post_data()

$query = new WP_Query( array( 'meta_key' => 'author', 'meta_value' => 'sarah' ) );
// Loop for Sarah ...
wp_reset_post_data()

you could separate them with maybe a switch statement.

Probably you will need to pay careful attention to resetting the query, there are three ways to do it. Good post on SE here somewhere explaining the difference.

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.