WordPress插件=>如何使用JS AJAX触发插件PHP函数

时间:2016-08-30 20:34:39

标签: javascript php ajax wordpress

构建我的第一个插件,我在脚本之间进行通信时遇到困难。如何使用JS AJAX调用处理我的函数的插件PHP脚本。

我发现在WordPress中加载插件脚本(显然)导致渲染/权限问题。

这是一个简化版本 - 插件通过短代码实例化:

[short-code]

  • 启动WP插件,执行一些初步任务。
  • 加载DOM后,我使用HTML5查找用户的地理位置。

目标:通过AJAX将HTML5地理定位数据传递到位于php文件中的php函数。例如:调用未定义的函数register_activation_hook()

var sf_path = jQuery('#sf_path').val();
var url = '/wp-content/plugin/plugin_name/plugin_name.php?h=true&=lat='+position.coords.latitude+'&lng='+position.coords.longitude;
var jqxhr = jQuery.get( url , function(data) {
    console.log( "geolocate", data );
    //Response = PHP Error: Call to undefined function register_activation_hook()
});

我认为我可以重写代码来区分平台并根据请求以不同的方式运行(基本上是对某些函数进行unwordpressify),但是不必这样做会更方便。 wp_remote_get非常方便。

我错过了什么?

2 个答案:

答案 0 :(得分:1)

WP ajax调用是通过admin-ajax.php脚本处理的。首先,您需要做的是注册行动 -

add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );

接下来,您需要定义此my_action_callback将要执行的操作。

function my_action_callback() {
    // Handle Geo Location Data
    wp_die(); // this is required to terminate immediately and return a proper response
}

完成后,您可以发送AJAX电话

<script type="text/javascript" >
jQuery(document).ready(function($) {

    var data = {
        'action': 'my_action',
        'geo': 1234
    };

    jQuery.post(ajaxurl, data, function(response) {
        alert('Got this from the server: ' + response);
    });
});
</script>

如果ajaxurl未定义,您可以这样定义 -

var ajaxurl = "<?php echo admin_url('admin-ajax.php'); ?>";

您可以在documentation

上找到更多相关信息

答案 1 :(得分:0)

最终,我能够在@ ToshoTrajanov的帮助下通过指出如何将ajaxurl变量放入页面来解决这个问题。这是我的绊脚石。不过,对我而言,我在PHP中将标记放开并将以下内容添加到我的php init函数中:

<?php
 print "<script class='gcCleanup'>";
 print 'var ajaxurl = "' . admin_url('admin-ajax.php') . '";';
 print "</script>";
?>