详情
确定。所以我在我的帖子上有一个名为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?
结论
提前感谢任何对此有所了解的人。如果我没有提供足够的信息,请告诉我,我会尝试更清楚地解释。我可以发布代码,但我不会寻找代码作为回报。只是朝着正确的方向发展。
干杯!
答案 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/