wordpress获取用户定义的半径范围内的帖子

时间:2012-09-11 02:10:48

标签: wordpress geocoding

详情

确定。所以我在我的帖子上有一个名为Location的自定义字段。该位置被地理编码为LAT LNG值。

我也有一个自定义字段供用户执行完全相同的操作。用户还可以定义以英里或公里为单位的半径。只显示此半径范围内的帖子。

我可以通过获取帖子元数据(lat long)并将其与用户进行比较来计算我的query_posts循环中帖子lat lng和用户滞后lng之间的距离。

如果我在循环中执行此操作并包装一个if语句,该语句基本上表示如果小于半径显示后,我只获得半径中的帖子。

问题
假设我添加了一个5的posts_per_page,并且前5个帖子不在定义的半径范围内,它将显示0个帖子。如果前3个不在半径范围内,我将获得2个帖子。等等。

需要解决方案

1)显然,最好的方法是在我的查询中。我没有使用wp_query vs query_posts但是我不能100%确定如何运行我的PHP函数来计算用户和帖子lat + lng在查询内的距离。

2)如果在else中没有满足我的if语句,有没有办法将query_posts post_per_page增加1?

结论

提前感谢任何对此有所了解的人。如果我没有提供足够的信息,请告诉我,我会尝试更清楚地解释。我可以发布代码,但我不会寻找代码作为回报。只是朝着正确的方向发展。

干杯!

3 个答案:

答案 0 :(得分:1)

这是我的最终查询。完全是我需要它做的。我已经在我的数据库中创建了一个自定义表来存储来自帖子的lat和lng信息VS将它们添加到post元表中,这样我就可以加入2并获得帖子到用户的距离。有任何问题让我知道:)

$querystr = '
            SELECT *,
            (((acos(sin(('.$userLat.'*pi()/180)) * sin((lat*pi()/180))+cos(('.$userLat.'*pi()/180)) * cos((lat*pi()/180)) * cos((('.$userLng.'- lng)*pi()/180))))*180/pi())*60*1.1515) as distance
            FROM wp_posts, tbl_post_lat_lng
            WHERE wp_posts.ID = tbl_post_lat_lng.post_id
            AND wp_posts.post_status = "publish"
            AND wp_posts.post_type = "post"
            AND distance <= '.$userRadius.'
            ORDER BY wp_posts.post_date DESC
            LIMIT 5
         ';

答案 1 :(得分:0)

是否只是不指定要返回的帖子数量那么简单,如果帖子与地理位置要求不匹配,那么只是跳过循环迭代?

但我想如果有很多帖子,这可能会表现得很糟糕......

这看起来像是如何在查询中进行的:Codex: Displaying Posts Using a Custom Select Query

答案 2 :(得分:0)

如果有人需要按距离半径进行过滤,则可以查看此信息。 https://gschoppe.com/wordpress/location-searches/