如何获取由帖子对象类型的自定义字段过滤的帖子?

时间:2016-04-23 05:55:42

标签: php wordpress custom-post-type advanced-custom-fields

我想获取特定帖子类型的帖子,其中包含具有帖子类型类型的自定义字段。

我的帖子类型名为“tour”,而tour post类型的自定义字段名为“country”,其类型为Post Object。

获取其所在国家/地区为“土耳其”的所有旅游的查询:

$located_tours = get_posts(array(
    'numberposts'   => -1,
    'post_type'     => 'tour',
    'meta_query'    => array(
        'key'       => 'country',
        'title'     => 'Turkey',
        'compare'   => 'LIKE'
    )
));

但是此查询将返回所有游览而不对Country

进行任何过滤

任何人都有任何想法? 感谢

2 个答案:

答案 0 :(得分:0)

试试这个:

$tour_args = array(
    'posts_per_page'   => -1,
    'post_type'     => 'tour',        
    'meta_query' => array(
     array(
        'key'     => 'country',
        'value'   => 'Turkey',
        'compare' => '=',
    ),
   ),
);
$located_tours =  new WP_Query($tour_args);

答案 1 :(得分:0)

首先,meta_query expects nested arrays,所以不是:

'meta_query'  => array(
    'key'    => THE_KEY,
    'value'  => THE_VALUE,
),

但:

'meta_query' => array(
    array(
        'key'     => THE_KEY,
        'value'   => THE_VALUE,
    ),
),

请注意,在您的情况下不需要compare,因为其默认值为=

无论如何,你在这里有一个概念上的错误。如果您使用ACFcountry自定义字段类型为Post Object,则存储在数据库中的此字段的值不是title,而是相关帖ID (您的返回格式Post ObjectPost ID)。

类似的东西(在wp_postmeta表中):

wp_postmeta detail

因此,您需要按国家/地区ID查询,而不是国家/地区的标题。您可以使用get_page_by_title检索所需的国家/地区ID:

// Assuming your Country's CPT slug is 'country'
$country = get_page_by_title( 'Turkey', 'OBJECT', 'country' );

$tours_args = array(
    'posts_per_page'    => -1,
    'post_type'         => 'tour',
    'meta_query'        => array(
        array(
            'key'   => 'country',
            'value' => $country->ID
        )
    )
);

$located_tours = get_posts( $tours_args );

希望这有帮助!