VA79 是对的,这将是相当复杂的,做 sql 连接之类的东西。
我找到了一个非常简单且易于实施的解决方案。
1。
首先你需要安装这个插件:
https://mg.wordpress.org/plugins/acf-google-maps-radius-search/
2。
在第 40 行 this(!) 插件的 functions.php 中,您必须在变量 $address 中设置高级自定义字段的名称。
3。
在这个插件的 acf_gms.class.php 的第 163 行,你必须在 $address 变量中再次设置你的字段的名称。
4。
现在您必须保存已设置 Google Maps Field 表单 Advanced Custom Fields 并因此具有经度和纬度值的帖子。这很重要,否则新创建的数据库表(感谢插件)将没有值。
5。
保存后,您的数据库中有一个带有 Post ID、Long 和 Lat 值的新表。感谢插件,太好了。
我现在假设您希望在帖子存档页面上有表单字段,您可以在其中输入地址并按顺序输出帖子,其中最接近的帖子首先显示,下一个最接近的帖子接下来显示很快。你想找到最近的,所以我想这就是你要找的。p>
以下代码应输入到您的archive.php 文件中。请用您的 API 密钥替换。
<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOURAPIKEY&libraries=places"></script>
<script>
function initialize() {
var input = document.getElementById('location');
var options = {
types: ['(regions)'],
};
var autocomplete = new google.maps.places.Autocomplete(input, options);
google.maps.event.addListener(autocomplete, 'place_changed', function () {
var place = autocomplete.getPlace();
document.getElementById('lng').value = place.geometry.location.lng();
document.getElementById('lat').value = place.geometry.location.lat();
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
如您所见,我们从表单字段中获取位置、经度和纬度值。所以表格看起来像这样,可以放在归档的php文件中。
<form id="yourform">
<div>
<input id="location" type="text" name="location" placeholder="Postcode and place of residence" autocomplete="on" runat="server" />
<input type="hidden" id="lng" name="lng" />
<input type="hidden" id="lat" name="lat" />
</div> <!-- field -->
<input type="submit" value="Search nearest" />
</form>
如果您在 ID 为“位置”的输入字段中输入位置,谷歌地图会建议地点。当您提交表单时,我们开始使用的脚本将使用此位置并获取 long 和 lat 值。通过隐藏输入,这些值将作为参数 (?lng=...&lat=...) 发布到 URL。
随着我们的插件运行和新的数据库表,您将获得按与您输入位置的距离排序的帖子。
就是这样。如果您有任何问题,请不要介意。