How to Suppress Deprecation Notices in WordPress Using an MU Plugin

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:

  1. Navigate to /wp-content/ in your WordPress installation.
  2. Create a folder named mu-plugins if it doesn’t already exist.
  3. 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 errors E_ERROR, parse errors E_PARSE, warnings E_WARNING, and notices E_NOTICE.
  • Suppress E_DEPRECATED and E_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.

This article is written by Evelyn Allison. Evelyn has over two decades of experience with the big-tech corporate giants. Starting in 2002 with consumer IT remote support, she transitioned into IT enterprise support and systems provisioning for Windows and Linux servers. Her prowess spans her expertise in network security, security audit and scripting-based-automation. Actively involved in web security since 2017, Evelyn has worked with various technologies to secure the web, leveraging tech like Nginx, modsecurity, reverse-proxies, developing web-application-firewalls, on-the-fly asset optimization using Google’s PageSpeed Module and more. Her expertise is reflected in the top-tier plugins and comprehensive consulting-services she offers in the domain of web-security.