Таким образом, я создал поля AFC для адреса, города, штата и почтового индекса, а затем я использую Google Maps, чтобы взять информацию в этих полях, а затем заполнил два других поля ACF с широтой и длиной для этого адреса.Проблема, с которой я столкнулся, заключается в том, что когда я вставляю поля адреса и нажимаю кнопку публикации / обновления, он не сразу захватывает широту / долготу.Когда я нажимаю на нее во второй раз, это когда захватывает широту / долготу и заполняет эти поля ACF.Это происходит только когда я добавляю новый адрес.Если я использую адрес, который уже использовался в другом сообщении, и повторно использую тот же самый для нового сообщения, он захватывает 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, поэтому не уверен, где этот фрагмент кода работает.