允许对管理员以外的其他角色进行AJAX调用

时间:2012-12-24 作者:Masta

在我的网站上,注册用户(订阅者角色)可以发送草稿,如果管理员对草稿进行验证,则可以发布草稿。

我正在尝试将标签框添加到用于发送新帖子的前端编辑器。为了实现自动完成功能,我对这个URL进行了AJAX调用:

http://example.com/wp-admin/admin-ajax.php?action=ajax-tag-search&tax=post_tag
这对管理员用户很有用,但对订阅者不起作用。有没有人知道不打电话就可以做到这一点admin-ajax.php?

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

所有WordPress AJAX调用都应该由admin-ajax.php, 它们是发生在前端还是后端。要授予访问权限,您必须为AJAX调用注册CallbackFunction,请将这些行添加到您的文件中:

add_action( \'wp_ajax_prefix_update_post\', \'prefix_update_post\' );
add_action( \'wp_ajax_nopriv_prefix_update_post\', \'prefix_update_post\' );
请确保在prefix_update_post 函数,作为非loggedin用户,不应允许发送草稿。

因此,这一行应该做到:

function prefix_update_post() {

    if ( current_user_can( \'edit_post\' ) ) {

        // your goodies here

    }

}
如果一切正常,那么您可能需要通过AJAX调用发送用户ID,并检查用户是否具有正确的权限(get_user_by(\'id\', $userid))

SO网友:shea

为什么不让你的用户成为贡献者而不是订阅者呢?默认情况下,贡献者可以提交文章草稿,但不能发布,而且AJAX功能也可以工作。

如果您不希望参与者访问仪表板,可以使用以下代码段阻止他们访问:

function wpse_77140_restrict_admin() {
    if ( ! current_user_can( \'publish_posts\' ) )
        wp_redirect( home_url() );
}

add_action( \'admin_init\', \'wpse_77140_restrict_admin\' );

结束