9

I want to filter posts in such a way that only posts, for which get_post_meta($post->ID, "project_cat", true) (it returns a post ID) is equal to my specified value, are shown.

Any way to do this?

I am especially interested in ways to do it compatible with WP-Paginate plugin.

2
  • 56% is pretty low - please remember to return to your old questions and accept correct answers. It takes them off the 'unanswered' pile and helps others find solutions more easily. People will also be more willing to offer answers if they know that the OP will respond to them. :) Apr 10, 2012 at 15:58
  • See my answer below. It's not clear when/where you want to filter the posts. If you update your answer to include this I can suggest which 'conditionals' you need to check. Alternatively, see the linked query_post example. The general principle is the same - setting the meta_query value. Apr 10, 2012 at 16:24

2 Answers 2

11

The WP_Query object accepts a post meta argument. Generally speaking you want to do the following:

  $my_query = new WP_Query( 
    array(
      'post_type' => 'post',
      'meta_query' => array(
        array(
          'key' => 'project_cat',
          'value' => 'my-value',
        )
      ),

        // Other query properties
    ) 
  );

Where 'my-value' is your 'specified value'.

Example usage:

  add_action( 'pre_get_posts' , 'my_pre_get_posts' );

  function my_pre_get_posts( $query ) {

    // Check this is main query and other conditionals as needed
    if( $query->is_main_query() ) {
        $query->set( 
          'meta_query', 
          array( 
            array(
              'key' => 'project_cat',
              'value' => 'my-value'
            )
          )
        );
    }

  }

See WP_Query, pre_get_posts. All conditionals are available to you. Currently this runs on every main query - which you probably don't want.

Alternatively you can use query_posts (a simpler, but much less efficient way) to alter the query for only a specific instance in a template.

1
1

you can filter the post based on the meta value and display the post on the cms page.

'meta_query' => array(
        array(
            'key'     => 'front_page',
            'value'   => 'yes',
            'compare' => 'LIKE',
        ))

please refer the tutorial for step by step explanation

http://www.pearlbells.co.uk/filter-posts-custom-fields-wp_query/

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

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