【问题标题】:WordPress Plugin => How to use JS AJAX to trigger plugin PHP functionsWordPress Plugin => 如何使用 JS AJAX 触发插件 PHP 函数
【发布时间】:2016-08-30 20:34:39
【问题描述】:

构建我的第一个插件时,我在脚本之间进行通信时遇到了困难。如何使用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()
});

我认为我可以重写代码以区分平台并根据请求以不同方式运行(基本上,取消对某些功能的压缩),但不必这样做会更方便。 wp_remote_get 非常方便。

我错过了什么?

【问题讨论】:

  • @Machavity - 我添加了它,因为你如此敏锐地提到这是一个模糊的要求。

标签: javascript php ajax wordpress


【解决方案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 上找到更多相关信息

【讨论】:

  • 非常感谢。使用您的代码,我能够成功回调!我确实在文档中阅读了此内容,但在实施时遇到了麻烦。这帮助我完成了工作。成功!
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2018-02-04
    • 2011-02-23
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    相关资源
    最近更新 更多