我正在尝试构建基于半径的位置搜索,以返回我所拥有的各种CPT的相关帖子。整个过程是有效的,但我有一个问题将一些参数传递给我的functions.php文件中的函数(我从表单中获取它们但不知道如何将它们传递给函数)。
参数是lat lng和radius(目前手动写入我的functions.php中的代码)。
的search.php
<?php
// Get objects from search form
if($_GET['spot_name'] && !empty($_GET['spot_name']))
{
$spot_name = $_GET['spot_name'];
}
if($_GET['spot_type'] && !empty($_GET['spot_type']))
{
$spot_type = $_GET['spot_type'];
}
if($_GET['lat'] && !empty($_GET['lat']))
{
$spot_lat = $_GET['lat'];
}
if($_GET['lng'] && !empty($_GET['lng']))
{
$spot_lng = $_GET['lng'];
}
if($_GET['radius'] && !empty($_GET['radius']))
{
$spot_radius = $_GET['radius'];
}
// Declare the query arguments
$args = array(
'post_type' => $spot_type,
'post_title' => $spot_name
);
// Add our filter before executing the query
add_filter( 'posts_where' , 'location_posts_where' );
// Execute the query
$location_query = new WP_Query( $args );
// Remove the filter just to be sure its
// not used again by non-related queries
remove_filter( 'posts_where' , 'location_posts_where' );
// The Loop
if ( $location_query->have_posts() ) {
echo '<ul>';
while ( $location_query->have_posts() ) {
$location_query->the_post();
echo '<li>' . get_the_title() . '</li>';
the_field('mp_spot_loc_lat');
}
echo '</ul>';
/* Restore original Post Data */
wp_reset_postdata();
} else {
// no posts found
}
?>
的functions.php
function location_posts_where( $where )
{
global $wpdb;
$lat = '41.834536';
$lng = '39.2440537479998';
$radius = 60;
$where .= " AND $wpdb->posts.ID IN (SELECT post_id FROM wp_lat_lng_post WHERE
( 3959 * acos( cos( radians(" . $lat . ") )
* cos( radians( lat ) )
* cos( radians( lng )
- radians(" . $lng . ") )
+ sin( radians(" . $lat . ") )
* sin( radians( lat ) ) ) ) <= " . $radius . ")";
return $where;
}
答案 0 :(得分:0)
问题在于应用和删除过滤器的步骤。
wpdb过滤器仅在查询开始后自行应用,并且我已经过早删除它。在查询结束后将其移动到解决了问题。
现在,我可以将参数作为全局变量传递,并使搜索半径和高度变为动态。
global $spot_lat;
global $spot_lng;
global $spot_radius;