【发布时间】:2022-01-10 18:25:02
【问题描述】:
我正在尝试按离用户最近的位置排序我的帖子。
为了解决这个问题,我创建了一个名为 geolocation 的表,其中包含所有 latitude(lat) 和 longditude(long) 的 post_id。
为了对帖子进行排序,我使用了以下钩子:woocommerce_get_catalog_ordering_args
我面临的问题是我需要加入我创建的表格,以便我可以按纬度和经度订购产品 (ORDER BY (POW((geodata.long-9.9533548),2) + POW ((geodata.lat-49.7913044),2)) ASC)
使用各种示例,这是我想出的 - 但是我收到 500 内部错误,我不确定如何让连接正常工作,因此我可以按另一个表中的属性排序:
add_filter( 'woocommerce_catalog_orderby', 'add_custom_sorting', 99999);
function add_custom_sorting( $options) {
$options['distance'] = 'Nach Standort sortieren';
return $options;
}
add_filter( 'woocommerce_get_catalog_ordering_args', 'custom_sorting_for_distance' );
function custom_sorting_for_distance( $args ) {
if ( isset( $_GET['orderby'] ) && 'distance' === $_GET['orderby'] ) {
add_filter('posts_clauses', 'posts_clauses_add_join_and_filter', 10, 2);
$lat = sanitize_text_field('49.7913044');
$lng = sanitize_text_field('9.9533548');
$args['order'] = 'ASC';
$args['meta_key'] = '';
$args['orderby'] = " (POW((geodata.long-{$lng}),2) + POW((geodata.lat-{$lat}),2)) ";
}
return $args;
}
function posts_clauses_add_join_and_filter( $clauses, $wp_query ) {
global $wpdb;
$lat = sanitize_text_field('49.7913044');
$lng = sanitize_text_field('9.9533548');
$clauses['join'] = " LEFT JOIN 4rqJ9_geodata AS geodata ON 4rqJ9_posts.ID = geodata.post_id ";
$clauses['orderby'] = " (POW((geodata.long-{$lng}),2) + POW((geodata.lat-{$lat}),2)) ";
return $clauses;
}
有人知道如何解决这个问题吗?我很确定我只需要正确的方法来加入表格。
这是一个在 PHPmyADMIN 后端运行良好的 SQL 语句,我正在尝试在 WooCommerce 中复制它。
SELECT 4rqJ9_posts.*
FROM 4rqJ9_posts
INNER JOIN 4rqJ9_postmeta
ON ( 4rqJ9_posts.ID = 4rqJ9_postmeta.post_id )
INNER JOIN 4rqJ9_postmeta AS mt1
ON ( 4rqJ9_posts.ID = mt1.post_id )
INNER JOIN 4rqJ9_postmeta AS mt2
ON ( 4rqJ9_posts.ID = mt2.post_id )
LEFT JOIN 4rqJ9_geodata AS geodata
ON 4rqJ9_posts.ID = geodata.post_id
WHERE 1=1
AND 4rqJ9_posts.post_type = 'product'
AND ((4rqJ9_posts.post_status = 'publish'))
GROUP BY 4rqJ9_posts.ID
ORDER BY (POW((geodata.long-9.9533548),2) + POW((geodata.lat-49.7913044),2)) ASC
【问题讨论】:
标签: php wordpress woocommerce location left-join