3

细节

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

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

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

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

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

需要解决方案

1)显然,解决这个问题的最佳方法是在我的查询中。我可以使用 wp_query 和 query_posts,但是我不能 100% 确定如何运行我的 PHP 函数来计算用户和帖子 lat + lng 就在查询中的距离。

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

结论

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

干杯!

4

3 回答 3

2

这是我的最后一个查询。正是我需要它做的。我在我的数据库中创建了一个自定义表来存储来自帖子的 lat 和 lng 信息 VS 将它们添加到帖子元表中,这样我就可以加入 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
         ';
于 2012-09-13T01:58:10.490 回答
0

是否像不指定要返回的帖子数量一样简单,然后如果帖子不符合您的地理位置要求则跳过循环迭代?

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

这看起来像如何在查询中执行此操作:Codex: Displaying Posts Using a Custom Select Query

于 2012-09-11T02:16:07.700 回答
0

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

于 2020-04-11T17:55:16.227 回答