有没有在AJAX调用之前触发的钩子?

时间:2017-10-11 作者:somebodysomewhere

我使用的是标准的管理ajax。php做ajax的方法。所以我有一些类似的函数:

add_action( \'wp_ajax_nopriv_ajax_load_data\', \'ajax_load_data\' );
add_action( \'wp_ajax_ajax_load_data\', \'ajax_load_data\' );

function ajax_load_data() {
    ...
}
我有很多ajax函数。是否有一个WordPress挂钩可以在所有人之前触发?我的目标是检查某个用户角色,以便我可以短路来自前端的所有ajax调用。

1 个回复
最合适的回答,由SO网友:JoeMoe1984 整理而成

如果你查看这个文件wp-admin/admin-ajax.php 其中wp_ajax_ 调用操作时,您将发现admin_init 正在之前调用操作。

下面是如何根据用户是否为admin返回不同的json对象:

add_action( \'wp_ajax_testing\', \'my_ajax\' );
add_action( \'admin_init\', \'my_ajax_checker\', 10, 2);

function my_ajax_checker() {
    if( defined(\'DOING_AJAX\') && DOING_AJAX && current_user_can(\'manage_options\') ) {

        switch($_POST[\'action\']) {
            case \'action1\':
            case \'action2\':
            case \'action3\':
                echo json_encode(array(\'error\' => false));
                die();
        }
    }
}

function my_ajax() {
    echo json_encode(array(\'error\' => true));
    die();
}
在本例中,它检查您的操作以查看调用了哪个Ajax操作如果您使用其中一个操作登录,它将始终返回此json响应\'{error:false}\'. 它会立即退出,my\\u ajax函数永远不会被调用。将响应替换为您需要的任何响应。

DOING_AJAX 当操作admin_init 正在使用,请确保在检查其值之前先检查其是否已定义。

结束

相关推荐

AJAX管理员内部500错误无法上载

我有一个插件可以从wpdb获取用户信息。在对安全Wordpress 4.8.2进行了小规模更新后,插件运行不好。我的sellect按钮无法运行并将数据打开到表中。add_action(\'wp_ajax_get_batch_course_stats\',array($this,\'get_batch_course_stats\')); 如果我把这行放在类外,它会运行,但无法获取数据,因为我的查询在类内。这是我的密码。<?php if ( ! defined( \