将函数调用限制为页面加载,而不是AJAX调用

时间:2014-08-20 作者:Pat Gilmour

我使用以下方法阻止订阅者(和客户)访问我网站的管理区域:

/**
 * Redirect back to homepage and not allow access to WP admin for Subscribers.
 */
function xcsn_redirect_from_admin(){
    if ( ( ! current_user_can( \'edit_posts\' ) ) && ( ! is_checkout() ) ){
        wp_redirect( site_url() );
        exit;
    }
}
add_action( \'admin_init\', \'xcsn_redirect_from_admin\' );
它工作得很好,只是它干扰了我的结账页面正在进行的ajax调用(WooCommerce)。除非您拥有“编辑帖子”权限,否则通话暂停,签出无法继续,这显然违背了目的。

My question: 是否可以设置一个条件来处理早期调用,如admin_init 这将允许ajax调用通过,但不允许将管理后端加载为页面?

(如果标题不清楚,很抱歉-很难用一句话来表达!)

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

检查常数DOING_AJAX. 它总是在有人使用WordPress AJAX API时定义的。

if ( defined( \'DOING_AJAX\' ) && DOING_AJAX )
    return;

if ( is_admin() )
    add_action( \'admin_init\', \'xcsn_redirect_from_admin\' );

结束

相关推荐

Wp-admin共享相同的域,但不同的网站

我有像这样的网站http://www.foo.comhttp://www.bar.com我有一个通配符SSL证书*.example.com, 我可以为wp admin重新使用现有的通配符SSL证书,而不是为上述两个域购买两个SSL证书吗?e、 g。http://foo.example.comhttp://bar.example.com</仅适用于wp-admin 为了更好的安全性,有可能吗?