我用内部连接和where子句进行了这个搜索。我不再获取get\\u field()值,它们都返回false。我怎样才能让ACF再次工作?这一定是我不知道的蠢事。
function get_lat_long($query)
{
if ( !is_admin() && $query->is_main_query() ) {
if ($query->is_search) {
$query->set(\'post_type\', \'doctor\');
global $wpdb;
if(isset($_GET[\'zipcode\']) && isset($_GET[\'radius\'])){
$zipcode = (int)$_GET[\'zipcode\'];
$radius = (int)$_GET[\'radius\'];
$lat_long = $wpdb->get_results("SELECT lat, lon FROM zips WHERE zip_code = \'$zipcode\' LIMIT 1");
if($lat_long):
global $minmax;
$minmax = bar_get_nearby( $lat_long[0]->lat, $lat_long[0]->lon, 0, $radius );
$minLat = $minmax[\'min_latitude\'];
$maxLat = $minmax[\'max_latitude\'];
$minLon = $minmax[\'min_longitude\'];
$maxLon = $minmax[\'max_longitude\'];
add_action( \'min_lat\', function(){
echo $minLat;
});
add_filter( \'posts_where\', function( $content ) use ( $minmax ){
$where = " AND ( ( (geo.lat BETWEEN \'$minmax[min_latitude]\' AND \'$minmax[max_latitude]\') AND (geo.lng BETWEEN \'$minmax[min_longitude]\' AND \'$minmax[max_longitude]\') ) )";
return $where;
});
add_filter( \'posts_join\', function(){
global $wpdb;
$join = " INNER JOIN wp_my_geodata AS geo ON ($wpdb->posts.ID = geo.post_id)";
return $join;
});
endif;
}else{
return;
}
}
}
}
add_filter( \'pre_get_posts\', \'get_lat_long\');
导致问题的部分是
add_filter( \'posts_where\', function( $content ) use ( $minmax ){
$where = " AND ( ( (geo.lat BETWEEN \'$minmax[min_latitude]\' AND \'$minmax[max_latitude]\') AND (geo.lng BETWEEN \'$minmax[min_longitude]\' AND \'$minmax[max_longitude]\') ) )";
return $where;
});
add_filter( \'posts_join\', function(){
global $wpdb;
$join = " INNER JOIN wp_my_geodata AS geo ON ($wpdb->posts.ID = geo.post_id)";
return $join;
});
我得到了正确的结果,只是不能使用get_field(“field_name”);不再
最合适的回答,由SO网友:jonathanbardo 整理而成
不要忘记,当您添加过滤器时,它将保留在那里以供后续所有请求使用。
我建议您移除封盖,然后执行以下操作:
function x_example( $input ) {
remove_filter( \'posts_where\', \'x_example\' );
return $input;
}
add_filter( \'posts_where\', \'x_example\' );
您必须对posts\\u join过滤器执行相同的操作。
更新
正如@bonger所指出的,您还可以使用以下方法保持闭包:
$closure = function( $input ) use ( &$closure ) {
remove_filter( \'posts_where\', $closure );
return $input;
};
add_filter( \'posts_where\', $closure );