php - 在 PhP、Wordpress 和 MySQL 中,查找最近的位置的功能不适用于自定义表
问题描述
我调整了以下函数,因为我需要使用具有较少行和字段的表。该函数使用的 wordpress 中的表是wp_posts和wp_postmeta(见下文),但它的行太多并且性能很差。我创建了一个名为wp_lat_long的精选表,其中仅包含我需要的信息。我正在尝试优化以根据用户的要求(半径、位置)计算哪些 Posts_ID 在半径内。问题是使用此自定义表时我没有得到任何结果。在数据库上运行的查询有效。wp_lat_long表有以下列:ID、纬度、经度。
我是 PHP 新手。
add_filter('houzez_radius_filter', 'houzez_radius_filter_callback', 10, 6);
if( !function_exists('houzez_radius_filter_callback') ) {
function houzez_radius_filter_callback( $query_args, $search_lat, $search_long, $search_radius, $use_radius, $location ) {
global $wpdb;
if ( ! ( $use_radius && $search_lat && $search_long && $search_radius ) || ! $location ) {
return $query_args;
}
$radius_unit = houzez_option('radius_unit');
if( $radius_unit == 'km' ) {
$earth_radius = 6371;
} elseif ( $radius_unit == 'mi' ) {
$earth_radius = 3959;
} else {
$earth_radius = 6371;
}
$sql = $wpdb->prepare( "SELECT $wpdb->lat_long.ID,
( %s * acos(
cos( radians(%s) ) *
cos( radians( $wpdb->lat_long.latitude ) ) *
cos( radians( $wpdb->lat_long.longitude ) - radians(%s) ) +
sin( radians(%s) ) *
sin( radians( $wpdb->lat_long.latitude ) )
) )
AS distance, $wpdb->lat_long.latitude AS latitude, $wpdb->lat_long.longitude AS longitude
FROM $wpdb->lat_long
HAVING distance < %s
ORDER BY distance ASC
Limit 200",
$earth_radius,
$search_lat,
$search_long,
$search_lat,
$search_radius
);
$post_ids = $wpdb->get_results( $sql, OBJECT_K );
if ( empty( $post_ids ) || ! $post_ids ) {
$post_ids = array(0);
}
$query_args[ 'post__in' ] = array_keys( (array) $post_ids );
return $query_args;
}
}
解决方案
好的,所以我已经解决了。我需要通过{$wpdb->base_prefix}
而不是$wpdb->
推荐阅读
- python - 如何将html中的多个导出数据框合并为一个
- angular - 如何使用 ActiveReportJS 在 Angular 代码中添加数据源和数据集
- angular - Mat-checkbox :- 单击它会选择所有
- c - 如何在 C 中正确使用 malloc?
- javascript - 如何解决隐藏文本,在滚动页脚上隐藏 React 中的正文文本
- java - Android Studio 活动未链接
- node.js - Express API:错误 [ERR_HTTP_HEADERS_SENT]
- angular - 在 Angular 中使用复选框进行计算
- azure-application-insights - 测试应用程序洞察力的显着变化
- reactjs - 使用 forwardRef 并在函数组件中连接“函数组件不能被赋予 refs”