wp_debug_mode()WP-CLI 3.0.0

Устанавливает настройки обработки ошибок в PHP на основе того какие константы указаны wp-config.php файле WordPress.

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

Использует три константы:

  • WP_DEBUG (по умолчанию false)
  • WP_DEBUG_DISPLAY (по умолчанию true)
  • WP_DEBUG_LOG (по умолчанию false)

Все они определяются ранней функцией wp_initial_constants() и могут быть определены в файле wp-config.php.

WP_DEBUG

Если включить WP_DEBUG (указать значение true), то все PHP ошибки (заметки и предупреждения) будут выводиться на экран. WordPress при этом также показывает внутренние заметки, которая создаются самим WordPress, когда используются устаревшие функции или устаревшие переменные функций или когда переменные используются неправильно. Устаревшие функции могут быть удалены в поздних версиях WordPress.

Важно! Отключенный WP_DEBUG не отключает показ всех видов ошибок! Т.е. при отключенном WP_DEBUG будут показаны (обработаны) следующие типы ошибок:

  • E_CORE_ERROR
  • E_CORE_WARNING
  • E_COMPILE_ERROR
  • E_ERROR
  • E_WARNING
  • E_PARSE
  • E_USER_ERROR
  • E_USER_WARNING
  • E_RECOVERABLE_ERROR

Так, если например на сервер по дефолту указано показывать ошибки и при этом WP_DEBUG отключен, то вы все равно будите видеть ошибки указанных выше типов, например WARNING.

Включение WP_DEBUG не изменяет значение других констант. Т.е. если выключить WP_DEBUG, то WP_DEBUG_DISPLAY и WP_DEBUG_LOG сохранят свои дефолтные значения и на основе этих значений будут выставлены PHP настройки показа и логирования ошибок.

Разработчикам настоятельно рекомендуется включать WP_DEBUG при создании тем и плагинов.

Подробнее про WP_DEBUG.

WP_DEBUG_DISPLAY

Когда WP_DEBUG_DISPLAY = true, WordPress показывает ошибки экран.

Если указать в wp-config.php:

  • define( 'WP_DEBUG_DISPLAY', true ) — (по умолчанию) WP будет выводить (показывать) ошибки на экран.
  • define( 'WP_DEBUG_DISPLAY', null ); — то WP вообще не будет указывать значение для PHP опции display_errors, т.е. будет использована глобальная настройка PHP (сервера).
  • define( 'WP_DEBUG_DISPLAY', false ); — то показ ошибок будет отключен.

Показ ошибок всегда отключается для REST, AJAX или XML-RPC запросов. Для них срабатывает такой код ini_set( 'display_errors', 0 ), но при этом значение константы WP_DEBUG_DISPLAY не изменяется!

WP_DEBUG_LOG

Если включить WP_DEBUG_LOG, то ошибки будут записываться в файл debug.log в папке контента, обычно это wp-content.

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

Внутренняя функция — эта функция рассчитана на использование самим ядром. Не рекомендуется использовать эту функцию в своем коде.

Хуки из функции

Возвращает

null. Ничего.

Использование

wp_debug_mode();

Примеры

0

#1 Примеров нет.

Эта функцию используется ядром для управления над ошибками и не предназначена для использования в разработке.

Код wp_debug_mode() WP-CLI 2.8.0-alpha

function wp_debug_mode() {
	if ( WP_CLI::get_config( 'debug' ) ) {
		if ( ! defined( 'WP_DEBUG' ) ) {
			define( 'WP_DEBUG', true );
		}

		error_reporting( E_ALL & ~E_DEPRECATED & ~E_STRICT );
	} else {
		if ( WP_DEBUG ) {
			error_reporting( E_ALL );

			if ( WP_DEBUG_DISPLAY ) {
				ini_set( 'display_errors', 1 );
			} elseif ( null !== WP_DEBUG_DISPLAY ) {
				ini_set( 'display_errors', 0 );
			}

			if ( in_array( strtolower( (string) WP_DEBUG_LOG ), [ 'true', '1' ], true ) ) {
				$log_path = WP_CONTENT_DIR . '/debug.log';
			} elseif ( is_string( WP_DEBUG_LOG ) ) {
				$log_path = WP_DEBUG_LOG;
			} else {
				$log_path = false;
			}

			if ( false !== $log_path ) {
				ini_set( 'log_errors', 1 );
				ini_set( 'error_log', $log_path );
			}
		} else {
			error_reporting( E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_ERROR | E_WARNING | E_PARSE | E_USER_ERROR | E_USER_WARNING | E_RECOVERABLE_ERROR );
		}

		if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || ( defined( 'DOING_AJAX' ) && DOING_AJAX ) ) {
			ini_set( 'display_errors', 0 );
		}
	}

	// XDebug already sends errors to STDERR.
	ini_set( 'display_errors', function_exists( 'xdebug_debug_zval' ) ? false : 'STDERR' );
}