Визначте 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');
    }
}

але в чому я не впевнений - чи є гачок, який я можу використовувати, щоб впливати на всі посилання на сайті? Таким чином, адміністратори завжди бачать налагодження, що, на мою думку, було б дуже корисним. Дякуємо за будь-яку допомогу, як завжди!


Цей (Йоастський) спосіб вирішення надзвичайно корисний для налагодження на ходу. Я також включив ведення журналу, який працює добре. Я трохи змінив свій код: if ( isset( $_GET['bug'] ) ) тому я відвідую посилання /? Помилка, щоб побачити налагодження :)
Jarmerson

Відповіді:


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);

Цей код прямо з Codex для файлу wp-config.php . Якщо ви це зробите, вам не доведеться турбуватися про жонглювання $_GETчи розбирання, хто є, а хто не адміністратор.

Редагувати:

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

Я все ще пропоную рішення "log", оскільки помилки для всіх реєструються. Якщо ваші люди такі, як мої, і надсилають повідомлення про помилки "на зразок" ей, сайт порушується, коли ви робите цю форму ", ви оціните журнал. :)


Я думаю, що я просто зіпсований, коли бачив їх на екрані :), але файл журналу має тут більше сенсу. Зробимо трохи більше досліджень щодо мого кінця, але це, здається, є найкращим рішенням, яке я натрапив таким чином. Спасибі!
Зак

5
Зауважте, що вхідний журнал важко кодується для входу в доступний веб-файл, що не так добре ідея у виробництві. Краще налаштувати приватне (поза веб-папкою) розташування файлів журналу за допомогою PHP-засобів для живих сайтів.
Рарст

9

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

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

Caveat: WP_DEBUGпісля цього буде встановлено, щоб trueусі користувачі входили з того самого браузера на одній машині в той же день.

у function.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 завантажує необхідну функціональність користувача.


Мені справді подобається і ця ідея - тож якщо я зробив щось на кшталт pastebin.com/m22KNakh, що могло б… теоретично працювати, правильно? Виконання echo $_SERVER['REMOTE_ADDR']врожаю, ::1що очікується на localhost? Це чесно звучить як окремий файл журналу, і цей спосіб (оскільки домашні IP-адреси, як здається, змінюються весь час) може бути хорошою ідеєю.
Зак

@Zach так, ::1це просто версія IPv6 127.0.0.1. Динамічний IP робить менш зручним, але все одно я трактую це лише як тимчасову техніку усунення несправностей для живих речей. Не замінює належну локальну настройку налагодження.
Рарст

Ах, дякую, що повідомили мені. Однозначно, як обидва варіанти тут, я збираюся піти з відповіддю @s_ha_dum (на додаток до вашого коментаря, який я підтримав), що також чудово. Ще раз дякую, я дуже це вдячний!
Зак

1

Це також можливий трюк, але вам потрібно вкласти це у свій, wp-config.phpоскільки WP_DEBUGвизначено там:

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

Додайте ?debugsecret=debugsecretдо URL-адреси сторінки, яку ви хочете налагоджувати.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.