When WordPress debugging is enabled, it logs all PHP errors, warnings, and notices, often including numerous deprecation notices from outdated code or third-party plugins. These can clutter your debug log, making it hard to locate the critical issues. This guide shows you how to create a must-use (MU) plugin to suppress E_DEPRECATED
and E_USER_DEPRECATED
notices while logging significant errors, resulting in cleaner, more actionable logs.
Step 1: Create the MU Plugin
Must-use (MU) plugins are automatically activated by WordPress and run early, making them ideal for configuring error reporting. To set up the plugin:
- Navigate to
/wp-content/
in your WordPress installation. - Create a folder named
mu-plugins
if it doesn’t already exist. - Create a file named
custom-error-handler.php
in/wp-content/mu-plugins/
and add the following code:
/**
* Custom Error Handler for WordPress
*
* This MU plugin configures PHP error reporting to control which error types
* are displayed/logged during WordPress execution.
*
* @package WordPress
* @subpackage MU-Plugins
*/
add_action(
'muplugins_loaded',
function ( $a = false ) {
/**
* Configure PHP Error Reporting
*
* ERROR TYPES INCLUDED (Reported):
* - E_ERROR (1): Fatal run-time errors that halt execution. Example: "Fatal error: Call to undefined function some_function()"
* - E_WARNING (2): Non-fatal run-time warnings, script continues. Example: "Warning: Division by zero"
* - E_PARSE (4): Compile-time parse/syntax errors. Example: "Parse error: syntax error, unexpected '}'"
* - E_NOTICE (8): Run-time notices for minor issues. Example: "Notice: Undefined variable: user_name"
* - E_CORE_ERROR (16): Fatal errors during PHP startup. Example: "Fatal error: Allowed memory size exhausted"
* - E_CORE_WARNING (32): Warnings during PHP startup. Example: "Warning: PHP Startup: Unable to load dynamic library"
* - E_COMPILE_ERROR (64): Fatal compile-time errors. Example: "Fatal error: Cannot redeclare class"
* - E_COMPILE_WARNING (128): Non-fatal compile-time warnings
* - E_USER_ERROR (256): User-generated fatal errors via trigger_error()
* - E_USER_WARNING (512): User-generated warnings via trigger_error()
* - E_USER_NOTICE (1024): User-generated notices via trigger_error()
* - E_STRICT (2048): Forward compatibility suggestions. Example: "Strict Standards: Declaration should be compatible"
* - E_RECOVERABLE_ERROR (4096): Catchable fatal errors. Example: "Catchable fatal error: Argument must be instance of User"
*
* ERROR TYPES EXCLUDED (Suppressed):
* - E_DEPRECATED (8192): Notices about deprecated PHP/WordPress functions. Suppressed to avoid noise from legacy code
* - E_USER_DEPRECATED (16384): User-generated deprecation notices. Suppressed to avoid third-party plugin warnings
*/
error_reporting(
E_ALL // Report all error types (value: 32767 - includes all flags)
& ~E_DEPRECATED // EXCEPT deprecated function notices (8192) - suppressed for legacy compatibility
& ~E_USER_DEPRECATED // EXCEPT user-defined deprecation notices (16384) - suppressed to reduce log noise
);
return $a;
},
PHP_INT_MAX, // Ensure our hook runs last
1
);
Step 2: How It Works
The MU plugin uses the muplugins_loaded
action hook to configure PHP’s error reporting early in the WordPress execution process, before other plugins or themes load. The error_reporting()
function is set to:
- Log all error types
E_ALL
, including fatal errorsE_ERROR
, parse errorsE_PARSE
, warningsE_WARNING
, and noticesE_NOTICE
. - Suppress
E_DEPRECATED
andE_USER_DEPRECATED
notices, which are common in legacy code or third-party plugins and often clutter logs.
This ensures that only significant errors are logged to /wp-content/debug.log
, making it easier to focus on issues that affect your site’s functionality.
Step 3: Enable WordPress Debugging
To log errors to a file, add or update the following lines of code in your wp-config.php
(located in the root of your WordPress installation):
define('WP_DEBUG', true); define('WP_DEBUG_LOG', true); define('WP_DEBUG_DISPLAY', false); // Prevents errors from appearing on the frontend
These settings save errors to /wp-content/debug.log
. You can monitor the log in real-time using a command like tail -f wp-content/debug.log
in your terminal. Ensure the /wp-content/
directory is writable by your server.
This MU plugin streamlines WordPress debugging by suppressing deprecation notices, allowing you to focus on critical errors and troubleshoot your site more effectively.