【发布时间】:2018-07-02 15:42:16
【问题描述】:
在搜索表单中输入位置后,我想按最近的位置订购产品。我使用 ACF 的 Google 地图为产品分配位置,该字段称为“地址”。我还为我的表单和 ACF 谷歌地图半径搜索插件提供了谷歌位置自动填充功能。我的表单重定向到带有 lat 和 lng 变量的 URL:
/?s=&post_type=product&lat=43.26768079999999&lng=6.640710899999931
插件应该从这个 url 订购产品。 lat 和 lng 在 URL 中很好地传递。不幸的是,它不会改变搜索产品的顺序。
以下是插件的一些关键功能:
// Join for searching metadata
function acf_google_maps_search_join_to_WPQuery($join) {
global $wpdb;
$acf_gms = new acf_gms;
$table_name = $acf_gms->table_name();
if (
isset($_GET['lat']) && !empty($_GET['lat'])
&& isset( $_GET['lng']) && !empty($_GET['lng'])
) {
$join .= " LEFT JOIN {$table_name} AS acf_gms_geo ON {$wpdb->posts}.ID = acf_gms_geo.post_id ";
}
return $join;
}
add_filter('posts_join', 'acf_google_maps_search_join_to_WPQuery');
// ORDER BY DISTANCE
function acf_google_maps_search_orderby_WPQuery($orderby) {
if (
isset($_GET['lat']) && !empty($_GET['lat'])
&& isset( $_GET['lng']) && !empty($_GET['lng'])
) {
$lat = sanitize_text_field( $_GET['lat'] );
$lng = sanitize_text_field( $_GET['lng'] );
$orderby = " (POW((acf_gms_geo.lng-{$lng}),2) + POW((acf_gms_geo.lat-{$lat}),2)) ASC";
}
return $orderby;
}
add_filter('posts_orderby', 'acf_google_maps_search_orderby_WPQuery');
这里是传递给结果页面的 sql 查询:
SELECT wp_posts.*
FROM wp_posts
INNER JOIN wp_postmeta
ON ( wp_posts.ID = wp_postmeta.post_id )
INNER JOIN wp_postmeta AS mt1
ON ( wp_posts.ID = mt1.post_id )
INNER JOIN wp_postmeta AS mt2
ON ( wp_posts.ID = mt2.post_id )
LEFT JOIN wp_acf_google_map_search_geodata AS acf_gms_geo
ON wp_posts.ID = acf_gms_geo.post_id
WHERE 1=1
AND (
( wp_postmeta.meta_key = ‘flash_sale_start’
AND CAST(wp_postmeta.meta_value AS DATE) > ‘20180122’
)
AND ( mt1.meta_key = ‘flash_sale_end’
AND CAST(mt1.meta_value AS DATE) > ‘20180122’
)
AND ( mt2.meta_key = ‘flash_sale_start’
AND CAST(mt2.meta_value AS DATE) <= ‘20180127’
)
)
AND wp_posts.post_type = ‘product’
AND ((wp_posts.post_status = ‘publish’))
GROUP BY wp_posts.ID
ORDER BY (POW((acf_gms_geo.lng-6.640710899999931),2) + POW((acf_gms_geo.lat-43.26768079999999),2)) ASC
你知道这个问题吗?
谢谢
【问题讨论】:
标签: php sql wordpress woocommerce advanced-custom-fields