通过add_filter将参数传递给函数

我正在尝试建立基于半径的位置搜索, 以从我拥有的各种CPT中返回相关帖子。整个过程都可以, 但是将一些参数传递给我的functions.php文件中的函数时遇到问题(我从表单中获取了这些参数, 但不知道如何将其传递给函数)。
参数是纬度和半径(当前已手动将其写入我的functions.php中的代码中)。
【通过add_filter将参数传递给函数】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; }

#1问题出在应用和移除过滤器的步骤中。
wpdb过滤器仅在查询开始后才适用, 而我将其过早删除。将其移至查询结束后即可解决问题。
现在, 我可以将参数作为全局参数传递, 并使搜索半径和高度动态化。
global $spot_lat; global $spot_lng; global $spot_radius;

    推荐阅读