is_admin () возвращает true при использовании admin-ajax.php из скрипта переднего конца

Была ситуация сегодня, когда я использовал admin-ajax.php из скрипта переднего конца. Насколько я понимаю, это способ wp для создания ajax-вызовов (регистрация моей функции с помощью wp_ajax_nopriv_myfunction hook)

Мне кажется, что поскольку admin-ajax.php находится на стороне администратора, is_admin () возвращает true, тогда как мой скрипт вызывает его с передней стороны.

Это вызывает проблему с подключаемым модулем, который делает вещи по-разному на стороне и на стороне администратора.

Так что мне было интересно, что я делаю что-то неправильно.

Есть ли способ использовать ajax в начале wp-пути и иметь is_admin (), чтобы вернуть false?

надеюсь, что смогу понять себя

7 голосов | спросил Thomas 19 J0000006Europe/Moscow 2012, 16:24:50

3 ответа


5

WordPress устанавливает is_admin() в true для всех запросов ajax (front-end или admin-side). (См. codex ).

Там не отходит от этого (и вы все равно не должны). Если ваш запрос ajax может быть запущен как с интерфейсной, так и с административной стороны, тогда вы можете указать, является ли он «администратором» или нет, когда вы публикуете данные. Но без каких-либо подробностей о «проблемах», связанных с вашим подключаемым модулем, трудно предложить работу-aroudn.

ответил Stephen Harris 19 J0000006Europe/Moscow 2012, 16:33:47
0

Я знаю, что это старо, но в случае, если это помогает кому-то другому, споткнутся об этом ...

то, что я обычно делаю, это установить какой-то флаг в моих интерфейсных формах, чтобы обозначить, что входящий запрос является ajax.

<input type="hidden" id="my_ajax_flag" name="my_ajax_flag" value="false" />

Изначально для этого параметра установлено значение «false», которое затем переключается на «true», когда вы начинаете обрабатывать ajax.

$('#my_ajax_flag').val('true'); // example using jQuery

, то в админке моего кода я проверяю этот параметр, а затем либо включаю в себя мои айакс-крючки, либо выполняю обычные обычные админы. Так, например:

if ( isset( $_REQUEST['my_ajax_flag'] ) && $_REQUEST['my_ajax_flag'] == 'true' ) {
    add_action('wp_ajax_my_ajax_function', 'my_ajax_function');     
    add_action('wp_ajax_no_priv_my_ajax_function', 'my_ajax_function');
} else {
    // regular non-ajax stuff
}

в зависимости от того, что вам нужно сделать, существует множество вариантов этой идеи, но это позволяет вам не допустить, чтобы ваш обычный код администратора мешал или стрелял во время выполнения запросов ajax.

Другая рекомендация, которая может быть удобной, - это установить в ваших формах атрибут «noheader» WordPress.

<input type="hidden" name="noheader" value="true" />

при обработке бэкэнд, что в конечном итоге приводит к переадресации (рекомендуется избегать опасного представления двойной формы), в редких случаях, когда вам нужно получить доступ к wp-крючкам, которые обычно происходят после «уже отправленных заголовков».

ответил br3nt 25 MaramMon, 25 Mar 2013 02:14:21 +04002013-03-25T02:14:21+04:0002 2013, 02:14:21
0

Я хотел включить /отключить ведение журнала на передней панели и администратора, используя кнопку меню панели управления. Я просто добавил класс к моей кнопке меню, а затем запросил статус страницы администратора с помощью jQuery

https://codex.wordpress.org/Class_Reference/WP_Admin_Bar/add_menu

Добавить элемент меню с статусом администратора как класс

$wp_admin_bar -> add_menu(
  array(
        'title'     => '<span class="ab-icon"></span><span class="ab-label">' . __( 'Console Logging' , 'console-logging' ) . '</span>',
        'id'        => 'your-custom-id',
        'parent'    => false,
        'href'      => '',
        'meta'      => array('class' => 'is-admin-'.is_admin())//GET ACTUAL ADMIN OR NOT in php before page load
));

Получить элемент меню с помощью jQuery в javascript и использовать его:

 //'is-admin-1' when is_admin() is true
 //'is-admin-0' when is_admin() is false

var is_admin = $('#wp-admin-bar-your-custom-id').hasClass('is-admin-1');

if(is_admin){
    //You are actually on an admin page
}else{
    //You are on a front end page
}
ответил Chris Sprague 5 AM000000110000003031 2018, 11:38:30

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132