Ограничить вызов функции загрузкой страницы, но не вызовом ajax
Я использую следующее, чтобы запретить Подписчикам (и Клиентам) доступ к административной области моего сайта:
/**
* 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). Вызов останавливается, и проверка не может быть продолжена, если у вас нет привилегий "редактировать сообщения", что, очевидно, противоречит цели.
Мой вопрос: можно ли установить условие, которое будет работать с ранним вызовом, таким как admin_init
, что позволит выполнять вызовы ajax, но не позволит загружать серверную часть администратора в виде страницы?
(Извините, если название неясно - его было трудно вместить в одно предложение!)
1 answers
Проверьте константу DOING_AJAX
. Он всегда определяется, когда кто-то использует API AJAX WordPress.
if ( defined( 'DOING_AJAX' ) && DOING_AJAX )
return;
if ( is_admin() )
add_action( 'admin_init', 'xcsn_redirect_from_admin' );