Как определить ОТЛАДКУ WP как истинную вне wp-config.php?
Я пытаюсь создать режим отладки в одном из моих плагинов, чтобы пользователи могли легко включить WP_DEBUG самостоятельно и, надеюсь, сообщить нам об этом с полезными сообщениями об ошибках. Прямо сейчас мы просим их изменить свои wp-config.php, но это выходит за рамки возможностей некоторых пользователей. Я надеялся просто добавить define( 'WP_DEBUG', true );
в наш плагин, если пользователь установил этот флажок, но, похоже, вы можете включить WP_DEBUG только из wp-config.php файл.
Кто-нибудь знает какой-нибудь способ включить WP_DEBUG из любого другого места, кроме wp-config? Или есть другая полезная функция WP, которую я мог бы использовать вместо этого?
Спасибо, Далтон
5 answers
Логика WordPress заставляет WP_DEBUG
быть определенным в что-то , даже если оно опущено, оно будет установлено в false
в wp_initial_constants()
во время загрузки.
Однако "фоновая" (то есть не тогда, когда она проверяется явно) функция WP_DEBUG
должна быть флагом того, как следует настраивать отчеты об ошибках PHP во время выполнения. Эта конфигурация выполняется wp_debug_mode()
и в любой момент после этого может быть изменен кодом вашего плагина, если это необходимо.
Невозможно включить WP_DEBUG
, потому что это определено в wp-config.php по умолчанию переопределение определенных констант в PHP невозможно.
Если вы хотите держать их подальше от wp-config.php попросите их добавить сверху что-то вроде:
if ( file_exists( 'safe-wp-config.php' ) ) {
/* this will contains WP_DEBUG */
include 'safe-wp-config.php';
}
Альтернативно,
WP_DEBUG
предполагается, что false
отсутствует, поэтому позвольте им полностью удалить WP_DEBUG
из wp-config.php и использовать везде/когда им заблагорассудится.
Если у вас нет доступа к wp-config.php
, но у вас есть доступ к редактору темы (или плагина), вы можете добавить фрагмент кода, чтобы по существу сделать то же самое, что и константа WP_DEBUG
. Функция wp_debug_mode()
использует значение этой и нескольких других констант для настройки функций отображения и регистрации ошибок в PHP. Вы можете запускать те же функции PHP напрямую, фактически касаясь константы WP_DEBUG
или файла wp-config.php
.
Вот ключевые функции PHP, которые может выполнять ваш фрагмент кода использование:
-
error_reporting( E_ALL )
- устанавливает PHP для отображения всех ошибок, предупреждений и уведомлений. -
ini_set( 'display_errors', 1 )
- устанавливает PHP для отображения ошибок на экране; используйте 0 для подавления (хотя, если отладка не включена вwp-config.php
, это уже будет 0, поэтому вы можете вообще опустить его). -
ini_set( 'log_errors', 1)
- устанавливает PHP для регистрации ошибок. Как и приведенное выше значение, это можно опустить, если вы не собираетесь регистрировать ошибки. Если вы регистрируете ошибки, вам понадобится журнал ошибок, к которому вы можете получить доступ. Значение по умолчанию, установленноеwp_debug_mode()
, будет недоступный. В моем примере он будет установлен в виде текстового файла в каталоге тем, чтобы вы могли прочитать его с помощью редактора тем. -
ini_set( 'error_log', $log_path )
- задает местоположение журнала ошибок (упомянутого выше).
Вот фрагмент кода:
add_action( 'template_redirect', 'my_enable_debug_mode' );
function my_enable_debug_mode() {
// Turn on error reporting.
error_reporting( E_ALL );
// Sets to display errors on screen. Use 0 to turn off.
ini_set( 'display_errors', 1 );
// Sets to log errors. Use 0 (or omit) to not log errors.
ini_set( 'log_errors', 1 );
// Sets a log file path you can access in the theme editor.
$log_path = get_template_directory() . '/debug.txt';
ini_set( 'error_log', $log_path );
}
Подводя итог, если вам нужно выполнить отладку, у вас нет доступа к wp-config.php
, но у вас есть доступ к редактору тем, вы можете добавить этот фрагмент кода в файл functions.php
, чтобы включить отладку на экране вместе с файлом журнала txt в папке темы.
Однако, если вы действительно хотите отображать ошибки, а не хранить их в файле журнала (как я хотел), то вы можете включить отладку для своего общедоступного IP-адреса следующим образом -
if ( $_SERVER['REMOTE_ADDR'] == 'xxx.xxx.xxx.xxx')
define('WP_DEBUG', true);
Проблем быть не должно, пока вы используете статический IP-адрес, но если у вас динамический IP-адрес, вы, вероятно, можете менять IP-адрес каждый раз, когда вам нужно включить debugigng.
Я очень опаздываю на вечеринку. Однако у меня было требование, когда я должен был включить wp_debug, и у меня не было доступа к файлам. Этот плагин помог: https://wordpress.org/plugins/debug/
Может быть, вы можете сделать то же самое, что и плагин? Редактировать wp-config.php программно?