元查询中的元查询?

问题描述

我正在尝试查询现有“场地”字段的“实时”帖子(场地字段是场地页面的 ID)。查询那些场地 ID/帖子,其字段“国家/地区”的值 (ID) 与特定国家/地区值匹配。

$shows = get_posts(array(
    'post_type' => 'live','Meta_query' => array(
        array(
            'Meta_key' => 'venue','Meta_query' => array(
                    array(
                        'Meta_key' => 'country','value' => 'country_1',)
                )
            )
    )

));

解决方法

WP_Query 并非旨在生成此类查询中查询逻辑。它应该有一个 post_type,一个 meta_query。

这就是为什么您需要改用 2 个查询。

$live_posts = new WP_Query( array (
     'post_type'=> 'live'
     'posts_per_page'        => -1,'meta_key'=>'venue_key_name','meta_value'=>'venue_key_value','fields' => 'ids'
 ));

$venue_posts=get_posts(array(
    'post_type'=>'venue','meta_key'=>'country_meta_name','meta_value'=> $live_posts->posts,'meta_compare'=>'IN'
));

在给定的代码中,您当然需要更改元键和值。

更新:

如果您的输入参数是场地 ID 数组,而您的输出应该是这些场地的国家/地区帖子,那么您可以使用以下查询:

global $wpdb;

$countries=$wpdb->get_col("SELECT meta_value FROM $wpdb->postmeta 
WHERE meta_key='country' AND post_id IN (".implode(",",$array_of_venue_page_ids).")");

if(empty($countries))$countries=[0];

$live_posts = new WP_Query( array (
     'post_type'=> 'live'
     'post__in' => $countries,));