ACF帖子对象元查询按标题而不是ID

时间:2018-11-25 作者:user142553

我试图通过帖子对象字段(intervention\\u country)按标题(相关自定义帖子类型-country)查询帖子类型(intervention)。

类似于:

$wp_query = new WP_Query();
$wp_query->query(  array (
    \'post_type\' => \'intervention\',
    \'meta_query\' => array(
        array(
            \'key\' => \'intervention_country\',
            \'value\' => \'country_selected\',
            \'compare\' => \'==\'
        )
     )
));
这能做到吗?从其他问题来看,我似乎必须提供一个ID,但我想使用CPT(国家)的标题进行查询,而不是使用上面“country\\u selected”给出的标题

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

这是可以做到的,但不会那么容易。Post对象存储为ID,因此在这种情况下,您不能使用元查询按帖子标题进行搜索。。。解决这个问题的方法很少:

1。使用acf/save_post 将给定帖子对象的标题另存为另一个元值的操作:

// Add this to your functions.php
function save_intervention_country_name ( $post_id ) {
    $country_id = get_field( \'intervention_country\', $post_id );
    if ( $country_id ) {
        update_post_meta( $post_id, \'intervention_country_name\', get_post_field( \'post_title\', $country_id ) );
    }
}
add_action( \'acf/save_post\', \'save_intervention_country_name\', 20 );
然后您可以使用intervention_country_name 字段:

$wp_query->query(  array (
    \'post_type\' => \'intervention\',
    \'meta_query\' => array(
        array(
            \'key\' => \'intervention_country_name\',
            \'value\' => <COUNTRY NAME>,
            \'compare\' => \'==\'
        )
     )
));

2。使用posts_whereposts_join 用于修改SQL查询的筛选器

您必须添加一个JOIN语句,将您的post对象字段与posts表连接起来,然后添加按标题搜索的位置。

3。修改表单,使其按ID而不是按名称进行搜索

因此,如果有一个select字段,则用id填充其值。或者,如果你不能做到这一点,你总是可以先获得国家,然后使用其ID:

$country = get_page_by_title( <COUNTRY_NAME>, OBJECT, <COUNTRY_POST_TYPE> );
if ( $country ) {
    $wp_query->query(  array (
        \'post_type\' => \'intervention\',
        \'meta_query\' => array(
            array(
                \'key\' => \'intervention_country\',
                \'value\' => $country->ID,
                \'compare\' => \'==\'
            )
         )
    ));
}

结束

相关推荐

使用新的WP-Query()从循环中过滤后期格式;

嗨,我目前正在为我的博客构建一个主题。下面的代码指向最新的帖子(特色帖子)。因为这将有一个不同的风格比所有其他职位。然而我想过滤掉帖子格式:链接使用我在循环中定义的WP查询,因为它给我带来了更多的灵活性。我该怎么做呢? <?php $featured = new WP_Query(); $featured->query(\'showposts=1\'); ?> <?php while ($featured->have_post