这是可以做到的,但不会那么容易。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_where
和posts_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\' => \'==\'
)
)
));
}