我正在尝试通过获取用户的纬度/经度位置信息以及帖子的相同信息得出的值来对我的帖子进行排序。
我已经有了实现用户和发布距离的功能,所以不需要,但需要知道如何为wp_query编写我的args代码。
我的初始wp_query是
array(
"post_type" => "babysitters",
"post_status" => "publish",
"orderby" => "date",
"order" => "DESC",
"posts_per_page" => -1
);
我有一个函数返回当前用户和帖子之间的距离值,并希望使用此值来更改默认排序顺序。
这是我找到距离的代码(无问题)
function distance($lat1, $lon1, $lat2, $lon2, $unit) {
$theta = $lon1 - $lon2;
$dist = sin(deg2rad($lat1)) * sin(deg2rad($lat2)) + cos(deg2rad($lat1)) * cos(deg2rad($lat2)) * cos(deg2rad($theta));
$dist = acos($dist);
$dist = rad2deg($dist);
$miles = $dist * 60 * 1.1515;
$unit = strtoupper($unit);
if ($unit == "K") {
return ($miles * 1.609344);
} else if ($unit == "N") {
return ($miles * 0.8684);
} else {
return $miles;
}
}
function user_distance_compare() {
$user_id = bp_loggedin_user_id();
$user_location = get_user_meta($user_id, 'geocode_321', false);
$user_loc = implode(',', $user_location);
$commapos = strpos($user_loc, ",");
$loc_len = strlen($user_loc);
$user_lat = substr($user_loc,0,$commapos);
$user_lng = substr($user_loc,($commapos + 1), ($loc_len - $commapos));
$post_id = get_the_ID();
$post_location = get_field('suburb', $post->ID);
$post_lat = $post_location['lat'];
$post_lng = $post_location['lng'];
//var_dump($user_lat);
//var_dump($user_lng);
//var_dump($post_lat);
//var_dump($post_lng);
$distance = distance($user_lat, $user_lng, $post_lat, $post_lng, "K");
return $distance;
}
如何指定返回的距离,使其与帖子ID匹配,然后我可以使用此派生距离进行排序?
IE 邮政距离
最后,我希望按距离顺序显示它,以便将它作为后期订单的3,4,2,1。
通过SQL它会读 选择DISTINCT post_id,distance(从帖子信息中导出的位置) 来自帖子 其中post_type ='保姆' 按距离排序
任何人都可以提供帮助吗?
答案 0 :(得分:0)
如果您使用某个功能获得距离,我会建立一个按距离排序的帖子ID数组。然后使用' post__in' WP_Query的参数只能获取您想要的项目。您也可以使用' post__in'对于orderby参数。
$babysitters = array(
'10' => 23,
'12' => 345,
'18' => '27
)
get_posts(array(
'post_type' => 'babysitter',
'posts_per_page' => -1,
'post__in' => $babysitters,
'orderby' => 'post__in'
));