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


WordPress Plugin => How to use JS AJAX to trigger plugin PHP functions

构建我的第一个插件,我很难在脚本之间进行通信。如何使用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是非常方便的。

我错过了什么?

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'); ?>";

您可以在文档

中找到更多相关信息

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

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