因此,我为街道地址,城市,州和邮政编码创建了AFC字段,然后我使用Google地图获取这些字段中的信息,然后使用lat和long填充另外两个ACF字段。我遇到的问题是,当我输入地址字段并单击发布/更新按钮时,它不会立即抓住纬度/经度。当我第二次点击它时,抓住lat / long并填充那些ACF字段。这仅在我添加新地址时发生。如果我使用已经在另一个帖子上使用的地址并将其重复用于新帖子,那么它会在第一次尝试时获取lat / long。因此我假设第一次点击是抓住纬度/经度,第二次点击是用来填充纬度/经度长。
但我需要完成的是这两个步骤(抓住lat / long和填充lat / long字段)发生在同一个发布/更新按钮上。以下是我目前使用的代码:
add_action( 'post_submitbox_start', 'qd_fake_publish_button' );
function qd_fake_publish_button()
{
$screen = get_current_screen();
if( ($screen->parent_base == 'edit') && ( $screen->id == 'opportunity' ))
{
print '<button id="acquireLatLong" class="button button-primary button-large">Publish</button>';
}
}
add_action( 'admin_print_footer_scripts', 'project_pins_save_post', 11);
function project_pins_save_post() {
$screen = get_current_screen();
if( ($screen->parent_base == 'edit') && ( $screen->id == 'opportunity' ))
{
$script = '
<script type="text/javascript" src="MY_GOOGLE_API_KEY"></script>
<script type="text/javascript">
function AcquireLatLont() {
var mygc = new google.maps.Geocoder();
var qd_street = document.getElementById("acf-field_5abe83dfda81b").value;
var qd_city = document.getElementById("acf-field_5abe4bea43cc3").value;
var qd_state = document.getElementById("acf-field_5abe4bf543cc4").value;
var qd_zip = document.getElementById("acf-field_5abe4bfb43cc5").value;
var address = qd_street + ", " + qd_city + ", " + qd_state + " " + qd_zip;
mygc.geocode({ "address": address }, function (results, status) {
if (status == google.maps.GeocoderStatus.OK) {
document.getElementById("acf-field_5abe845fda81c").value = results[0].geometry.location.lat();
document.getElementById("acf-field_5abe846ada81d").value = results[0].geometry.location.lng();
document.getElementById("publish").click();
} else {
alert("Geocoder failed due to: " + status);
}
});
return false;
}
</script>
<script type="text/javascript" >
jQuery( document ).ready(function( $ ) {
$("#acquireLatLong")[0].textContent = $("#publish")[0].value;
$("#acquireLatLong").click(function() {
AcquireLatLont();
});
});
</script>
';
echo $script;
}
}
以前没有真正动态填充ACF字段,所以不确定这段代码片段在哪里弄乱。