Есть ли крючок, который срабатывает перед вызовом ajax?
Я использую стандартный admin-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 answers
Если вы заглянете в этот файл wp-admin/admin-ajax.php
, где вызываются действия wp_ajax_
, вы обнаружите, что действие admin_init
вызывается перед ним.
Вот как вернуть другой объект 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_ajax никогда не вызывается. Замените ответ тем, что вам нужно.
DOING_AJAX
не всегда определяется, когда используется действие admin_init
, поэтому обязательно проверьте, определено ли оно сначала, прежде чем проверять его значение.