admin管理员组

文章数量:1314216

I want fetch all posts from the post type book in the custom taxonomy book_tags with the meta key lang and the meta value en.

My code:

<?php 
$args = array( 
    'post_type'      => 'book',
    'posts_per_page' => 40,
    'paged'          => "$paged", 

    'meta_query'     => array(
        array( 
            'key'     => 'lang',
            'value'   => 'en',
            'compare' => 'LIKE'
        )
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'book_tags',
            'field'    => 'slug',
            'terms'    => get_queried_object()->slug
        )
    )
);

$additional_loop = new WP_Query($args); 

while ($additional_loop->have_posts()) : 
    $additional_loop->the_post();

This doesn’t work? Why?

If I remove "meta_query" it works. Is there a bug in "meta_query"?

I want fetch all posts from the post type book in the custom taxonomy book_tags with the meta key lang and the meta value en.

My code:

<?php 
$args = array( 
    'post_type'      => 'book',
    'posts_per_page' => 40,
    'paged'          => "$paged", 

    'meta_query'     => array(
        array( 
            'key'     => 'lang',
            'value'   => 'en',
            'compare' => 'LIKE'
        )
    ),
    'tax_query' => array(
        array(
            'taxonomy' => 'book_tags',
            'field'    => 'slug',
            'terms'    => get_queried_object()->slug
        )
    )
);

$additional_loop = new WP_Query($args); 

while ($additional_loop->have_posts()) : 
    $additional_loop->the_post();

This doesn’t work? Why?

If I remove "meta_query" it works. Is there a bug in "meta_query"?

Share Improve this question edited Aug 10, 2013 at 7:34 fuxia 107k38 gold badges255 silver badges459 bronze badges asked Jul 22, 2013 at 3:37 kytdesignerkytdesigner 191 silver badge6 bronze badges 4
  • 1 Please explain precisely what you are trying to do and what isn't working (compared to what you are expecting)... because it is possible there is a better way to do what you want. For example filtering pre_get_posts is a very common solution that people overlook when trying to modify a loop. Though for a start, I'd guess that "$paged" is wrong (since the variable is in quotes) as might also be get_queried_object()->slug. – helgatheviking Commented Jul 22, 2013 at 3:48
  • if I remove "meta_query" then It'work, because I think "meta_query" have bug. I want display all custom post "lang=en". Sorry my bad EL – kytdesigner Commented Jul 22, 2013 at 3:52
  • Your English is fine, but you aren't saying much for me to go on. :) You want to show all custom posts with lang=en for a specific term. Is this on a custom taxonomy archive? Custom post archive? There is no bug with meta_query. Please edit your question to provide more details about what you are trying to do.. and where. – helgatheviking Commented Jul 22, 2013 at 14:00
  • First, Thank you so much. I want to show all custom posts with lang=en on a custom taxonomy archive. Plz help me, and what's your email address? Nice to meet you, friend. – kytdesigner Commented Jul 23, 2013 at 14:43
Add a comment  | 

1 Answer 1

Reset to default 1

Since in your comment, you said that you just want posts with meta key lang=en on a custom taxonomy page, the easiest way to do that would be to filter the query with pre_get_posts before it is run.

function wpa_107371_meta_query( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    // only change the query on a custom taxonomy
    // can check for a specific taxonomy if desired
    if ( is_tax() ) {
        //define our meta query
              $meta_query = array(
                  array(           // needs this nested array syntax to work
                    'key'    => 'lang',
                    'value'  => 'en',
                    'compare'=> '=',
                  ),
              );
         $query->set('meta_query', $meta_query);
        return;
    }

}
add_action( 'pre_get_posts', 'wpa_107371_meta_query' );

本文标签: Query for custom post type objects in a taxonomy and with a meta value