Определить WP_DEBUG условно / только для администраторов / регистрировать ошибки (добавить аргумент запроса для всех ссылок?)

20

Я разрабатываю сайт на сервере, к которому у клиента также есть доступ, и что я хотел бы сделать, это показать WP_DEBUGтолько для администраторов. Ссылка на статью Йоста об этом:

if ( isset($_GET['debug']) && $_GET['debug'] == 'true')
    define('WP_DEBUG', true);

будет отображаться WP_DEBUGтолько для URL-адресов, которые ?debug=trueприкреплены к ним, какhttp://domain.com/?debug=true

Я думал, что панель отладки может содержать некоторую часть этой информации по умолчанию (независимо от того, включена она или нет WP_DEBUG), но я подумал, что это безумие, поскольку я не верю, что это так.

Таким образом, то, что я думал, было бы полезно, было бы проверкой текущего пользователя (имеющего manage_optionsвозможность и затем запускающего ссылки через add_query_arg():

function zs_admin_debug() {
    if (!current_user_can('manage_options')) {
        add_query_arg('debug','true');
    }
}

но в чем я не уверен - есть ли ловушка, с помощью которой я могу использовать все ссылки на сайте с этим? Таким образом, администраторы всегда видят отладку, которая, на мой взгляд, была бы чрезвычайно полезной. Спасибо за любую помощь, как всегда!

Zach
источник
Этот обходной путь (Yoast) чрезвычайно полезен для отладки на лету. Я также включил регистрацию, которая работает хорошо. Я немного изменил свой код: if ( isset( $_GET['bug'] ) ) поэтому я
Bug,

Ответы:

18

Я не думаю, что есть универсальный хук URL. Есть много крючков, и я, возможно, пропустил это, но я не думаю, что есть один. Вы можете посмотреть через крючки на adambrown.info . Есть много хуков URL, но не универсальных.

Если я могу предложить другое решение: зарегистрируйте ошибки в файлах.

/**
 * This will log all errors notices and warnings to a file called debug.log in
 * wp-content (if Apache does not have write permission, you may need to create
 * the file first and set the appropriate permissions (i.e. use 666) ) 
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
@ini_set('display_errors',0);

Этот код прямо из Кодекса для файла wp-config.php . Если вы сделаете это, вам не придется беспокоиться о том, чтобы манипулировать $_GETили выяснять, кто является, а кто нет администратором.

Редактировать:

Я забыл одно возможное решение. Вы можете сделать это с помощью Javascript. Короткий скрипт может прикрепить ваш параметр ко всем URL-адресам на странице, и вы можете довольно легко загрузить скрипт только для администраторов.

Я бы по-прежнему предложил решение «log», так как ошибки для всех регистрируются. Если ваши люди похожи на меня и отправляют сообщения об ошибках типа « эй, сайт закрывается, когда вы заполняете эту форму », вы оцените журнал. :)

s_ha_dum
источник
Полагаю, я просто избалован тем, что вижу их на экране :), но файл журнала имеет больше смысла. Проведу немного больше исследований с моей стороны, но, похоже, это лучшее решение, с которым я когда-либо сталкивался. Благодарность!
Зак
5
Обратите внимание, что собственное ведение журнала жестко запрограммировано для входа в файл, доступный через Интернет, что не очень хорошая идея в производстве. Для живых сайтов лучше настроить местоположение файла журнала (вне папки) с помощью средств PHP.
первое
9

Несмотря на то, что мой первый подход был для мусорной корзины, а ответ s_ha_dums - это чистый и, вероятно, лучший способ добиться этого, позвольте мне предложить еще один рабочий сценарий:

Ниже приведен файл cookie, действительный в течение следующих 24 часов (86400 секунд), когда администратор входит в систему. В wp-config.php константа WP_DEBUGопределяется условно в зависимости от наличия и значения указанного cookie.

Предостережение: WP_DEBUGпосле этого будет установлено значение trueдля всех, кто входит в систему с одного и того же браузера на одном компьютере в один и тот же день.

в functions.php (или как плагин):

function wpse_69549_admin_debug( $user_login, $user )
{
    if ( in_array( 'administrator', $user->roles ) ) {
        setcookie( 'wp_debug', 'on', time() + 86400, '/', get_site_option( 'siteurl' ) );
    }
}
add_action( 'wp_login', 'wpse_69549_admin_debug', 10, 2 );

Смотрите: Кодекс> Справочник действий> wp_login

в wp-config.php :

if ( isset( $_COOKIE['wp_debug'] ) && 'on' === $_COOKIE['wp_debug'] ) {
    define( 'WP_DEBUG', true );
} else {
    define( 'WP_DEBUG', false );
}
Йоханнес Пилле
источник
Эндрю Нацин прокомментировал эту статью, отметив, что initуже слишком поздно, чтобы иметь какой-либо эффект. Я также попробовал это, и это не сработало.
Зак
Константы не могут быть переопределены. Можно изменить уровень сообщения об ошибках, не касаясь константы, но это не идеально. Также есть много вещей, которые происходят до initтого, как они представляют интерес.
первое
Я думаю, что принятый ответ остается наиболее жизнеспособным решением, тем не менее, для полноты картины, этот новый подход должен выполнять работу с экранными уведомлениями об отладке.
Йоханнес Пилле
Ах, очень крутой обходной путь - обязательно дам этому шанс
Зак
1
@s_ha_dum: Не то, чтобы каждый помнил каждый ответ - по крайней мере, я не знаю (я уже гуглил свой собственный ответ). Это я помню, хотя. Я был первым, кто ответил, и написал абсолютную чушь. Не применяется вообще. Я придерживаюсь политики, чтобы не отвечать, если я не уверен, по крайней мере, на 99,5%, что я квалифицирован (я предполагаю, что то же самое относится и к вам) - здесь я был далеко от цели. Это беспокоило живого дерьма, поэтому через несколько часов, после того, как он получил приемлемый ответ, я все еще думал об этом и придумал вышеизложенное. Я тоже думаю, что это довольно гладко - спасибо, что заметили.
Йоханнес Пилле
3

Он не дает точного ответа на ваш вопрос, но из личного опыта я обнаружил, что лучше включить режим отладки, сопоставляя IP-адрес вместо URL.

Это требует модификации ссылок и решает, как идентифицировать администратора до того, как WP загрузит необходимые пользовательские функции.

Rarst
источник
Мне действительно нравится эта идея - так что, если бы я сделал что-то вроде pastebin.com/m22KNakh, это могло бы ... теоретически сработать, верно? Запуск echo $_SERVER['REMOTE_ADDR']доходностей ::1, ожидаемых на локальном хосте? По правде говоря, это звучит как отдельный лог-файл, и таким образом (поскольку домашние IP-адреса постоянно меняются) может быть хорошей идеей.
Зак
@ Зак, да, ::1это просто версия для IPv6 127.0.0.1. Динамический IP делает менее удобным, но в любом случае я рассматриваю это как временную технику устранения неполадок для живого материала. Не заменяет правильную локальную настройку отладки.
Rarst
Ах, спасибо, что дали мне знать. Определенно, как и оба варианта здесь, я собираюсь пойти с ответом @s_ha_dum (в дополнение к вашему комментарию, за который я проголосовал), что тоже здорово. Еще раз спасибо, я действительно ценю это!
Зак
1

Это также возможный трюк, но вы должны поместить это в свой, wp-config.phpтак как WP_DEBUGздесь определено:

if ( isset( $_GET['debugsecret'] ) && 'debugsecret' == $_GET['debugsecret'] ) {
      define( 'WP_DEBUG', true );         
}

Добавьте ?debugsecret=debugsecretна страницу URL, который вы хотите отладить.

прости
источник