如何处理WordPress插件前端AJAX调用

时间:2018-12-23 作者:Scratcha

我正在开发一个自定义插件。该插件提供了一个短代码,可以将一些HTML输出到前端,无论它在哪里被调用。为了举例说明,这个HTML包含一个表单按钮和文本字段。单击前端上的按钮时,我想使用jQuery进行AJAX调用,以获取一些数据并填充textfield。数据是从我的一个插件函数计算并返回的。

我应该为AJAX请求使用什么请求URL?我可以创建一个ajax处理程序。php脚本,将其放在我的插件目录中,需要插件php类,并以这种方式访问其功能,但我不确定这是否是最佳实践。。。

有没有一种更高效/原生的WordPress方式来处理前端的插件AJAX请求?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

嗯,是的,有很多更好的方法。

首先,您不应该直接请求内部文件wp-content 目录如果某个插件执行这样的请求,那么正确地保护和强化WordPress要困难得多。

当然,没有必要这样做。

WP具有用于AJAX请求的内置机制。您可以在此处阅读完整文档:https://codex.wordpress.org/AJAX_in_Plugins

所有AJAX请求都应发送到wp-admin/admin-ajax.php. 通过这种方式,您可以使用以下挂钩高效地处理它们:

  • wp_ajax_my_action
  • wp_ajax_nopriv_my_action
因此,在插件PHP文件的某个地方,您可以执行以下操作:

// Enqueue your JS file
function my_enqueue($hook) {    
    wp_enqueue_script( \'ajax-script\', plugins_url( \'/js/my-script.js\', __FILE__ ), array(\'jquery\') );

    // in JavaScript, object properties are accessed as ajax_object.ajax_url
    wp_localize_script( \'ajax-script\', \'My_Ajax_bject\',
        array( \'ajax_url\' => admin_url( \'admin-ajax.php\' )
    );
}
add_action( \'admin_enqueue_scripts\', \'my_enqueue\' );


// AJAX request handler
function my_action() {
    global $wpdb;  // you can use global WP variables and so on
    $whatever = intval( $_POST[\'whatever\'] );
    $whatever += 10;
    echo $whatever;
    wp_die();
}
add_action( \'wp_ajax_my_action\', \'my_action\' );
在JS文件中:

jQuery(document).ready(function($) {
    var data = {
        \'action\': \'my_action\',
        \'whatever\': 1
    };

    $.post(ajax_object.ajax_url, data, function(response) {
        alert(\'Got this from the server: \' + response);
    });
});

相关推荐

AJAX Implementation

我试图基于WordPress中的下拉列表,使用AJAX实现数据库中的数据。控制台中返回400个错误请求的代码。我作为本地主机托管了该页面。这是我的主题functions.php //我更改了密码 function my_enqueue_scripts() { wp_enqueue_script(\'jquery\'); } add_action(\'wp_enqueue_scripts\', \'my_enqueue_scripts\'); functio