我正在尝试建立基于半径的位置搜索, 以从我拥有的各种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;
推荐阅读
- 在Salient(WordPress主题)上个性化受密码保护的页面
- 自定义帖子wp_query上的分页
- 将ACF地图数据传递到Timber主题中的twig循环
- 从wordpress插件覆盖$wp_customize
- 在WordPress中进行Ajax调用后,页面条件变为假
- 分页不起作用,并重定向到主页
- #yyds干货盘点#磁盘分区学习笔记
- 配置本地yum源
- 性能分析之valgrind及相关工具