使用ACF根据其他地址信息获取Lat / Long?

时间:2018-05-18 16:14:11

标签: javascript php jquery wordpress advanced-custom-fields

因此,我为街道地址,城市,州和邮政编码创建了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字段,所以不确定这段代码片段在哪里弄乱。

0 个答案:

没有答案