Wordpress 按距离分类商业产品

Wordpress 按距离分类商业产品,wordpress,woocommerce,Wordpress,Woocommerce,我正在开发一个WooCommerce多供应商网站,需要能够根据与网站访问者的距离对产品进行排序 我对目录中的每种产品都存储了纬度和经度值 我知道来访者的经纬度 我知道计算两者之间距离的公式 我的想法是在WooCommerce返回的产品中添加一个别名字段,可能使用WooCommerce\u product\u查询钩子,该钩子包含与站点访问者的距离,然后在该别名字段上排序。我知道如何在SQL中实现这一点,例如: 选择*,{计算距离的公式}作为距离{表}按距离排序 但是我不知道如何使用WooCom

我正在开发一个WooCommerce多供应商网站,需要能够根据与网站访问者的距离对产品进行排序

  • 我对目录中的每种产品都存储了纬度和经度值
  • 我知道来访者的经纬度
  • 我知道计算两者之间距离的公式
我的想法是在WooCommerce返回的产品中添加一个别名字段,可能使用WooCommerce\u product\u查询钩子,该钩子包含与站点访问者的距离,然后在该别名字段上排序。我知道如何在SQL中实现这一点,例如:

选择*,{计算距离的公式}作为距离{表}按距离排序

但是我不知道如何使用WooCommerce提供的钩子将这个别名字段添加到返回的字段中

有没有人有过实现这一目标或类似目标的经验?或者我从一个错误的角度接近它


如果有任何帮助,我将不胜感激。

因此,在本文的帮助下,我终于明白了这一点:

要向WP_查询添加额外的别名字段,您需要连接到posts_字段,该字段允许您修改正在进行的查询的选择部分,例如:

function my_posts_fields( $fields, $query ) {
    $userlat = {Users Lat};
    $userlong = {Users Long};
    $destlat = {Destination Lat};
    $destlong = {Destination Long};

    $fields .= sprintf(",( 3959 * acos( cos( radians( %f ) ) * cos( radians( %f ) ) * cos( radians( %f ) - radians( %f ) ) + sin( radians( %f ) ) * sin( radians( ".$wpdb->prefix."gmw_locations.latitude ) ) ) ) ) AS distance", $destlong, $userlat, $destlat, $destlong, $userlong, $userlat, $destlat);
    return $fields;
}

add_filter('posts_fields', 'my_posts_fields', 10, 2);
然后,要在这个新字段上排序,您需要连接到posts\u orderby,它允许您按查询的一部分修改顺序,例如

function my_posts_orderby( $orderby, $query ) {
  $orderby = "distance ASC";
  return $orderby;
}

add_filter('posts_join', 'my_posts_join', 10, 2);
您将需要添加一些代码,以便仅将字段应用于希望应用它的帖子类型,但要点如上所述