it-roy-ru.com

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

Я разрабатываю сайт на сервере, к которому у клиента также есть доступ, и я хотел бы показать 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');
    }
}

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

20
Zach

Я не думаю, что есть универсальный хук 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", так как ошибки для всех регистрируются. Если ваши люди похожи на меня и отправляют "сообщения об ошибках" типа "эй, сайт закрывается, когда вы заполняете эту форму", вы оцените журнал. :)

18
s_ha_dum

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

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

Caveat: 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 );
}
9
Johannes Pille

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

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

3
Rarst

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

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

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

1
prosti

Если у вас есть статический IP, вы можете сделать это:

if ('YOUR_IP_ADDRESS' == $_SERVER['REMOTE_ADDR']) {
    define('WP_DEBUG', true);
} else {
    define('WP_DEBUG', false);   
}

Источник: WORLDRESS отладки - как использовать WP_DEBUG на сайте производства

1
jpussacq