wp_debug_mode()WP 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 Примеров нет.

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

Список изменений

С версии 3.0.0 Введена.
С версии 5.1.0 WP_DEBUG_LOG can be a file path.

Код wp_debug_mode() WP 6.5.2

function wp_debug_mode() {
	/**
	 * Filters whether to allow the debug mode check to occur.
	 *
	 * This filter runs before it can be used by plugins. It is designed for
	 * non-web runtimes. Returning false causes the `WP_DEBUG` and related
	 * constants to not be checked and the default PHP values for errors
	 * will be used unless you take care to update them yourself.
	 *
	 * To use this filter you must define a `$wp_filter` global before
	 * WordPress loads, usually in `wp-config.php`.
	 *
	 * Example:
	 *
	 *     $GLOBALS['wp_filter'] = array(
	 *         'enable_wp_debug_mode_checks' => array(
	 *             10 => array(
	 *                 array(
	 *                     'accepted_args' => 0,
	 *                     'function'      => function() {
	 *                         return false;
	 *                     },
	 *                 ),
	 *             ),
	 *         ),
	 *     );
	 *
	 * @since 4.6.0
	 *
	 * @param bool $enable_debug_mode Whether to enable debug mode checks to occur. Default true.
	 */
	if ( ! apply_filters( 'enable_wp_debug_mode_checks', true ) ) {
		return;
	}

	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 ), array( '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 ( $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 );
	}

	/*
	 * The 'REST_REQUEST' check here is optimistic as the constant is most
	 * likely not set at this point even if it is in fact a REST request.
	 */
	if ( defined( 'XMLRPC_REQUEST' ) || defined( 'REST_REQUEST' ) || defined( 'MS_FILES_REQUEST' )
		|| ( defined( 'WP_INSTALLING' ) && WP_INSTALLING )
		|| wp_doing_ajax() || wp_is_json_request()
	) {
		ini_set( 'display_errors', 0 );
	}
}