WordPress3.3から3.4にかけて大量の非推奨関数が発生しましたが、表示に直接影響を与える関数が多く、旧バージョンとの互換性を維持するために、テーマなどでは、あえて非推奨関数を含んで使っている状況にあります。
debug.logには、必ず非推奨関数のエラーが記述されるので、実際のエラーを特定する妨げになる事もあると思います。
以下のコードを記述する事で、debug.logへワードプレスの非推奨関数のエラーを書き出さなくする事が出来ます。
Add themes/functions.php
add_filter( 'deprecated_function_trigger_error', '__return_false' ); add_filter( 'deprecated_file_trigger_error', '__return_false' );
仕組み
wp-includes/functions.php
/**
* Marks a function as deprecated and informs when it has been used.
*
* There is a hook deprecated_function_run that will be called that can be used
* to get the backtrace up to what file and function called the deprecated
* function.
*
* The current behavior is to trigger a user error if WP_DEBUG is true.
*
* This function is to be used in every function that is deprecated.
*
* @package WordPress
* @subpackage Debug
* @since 2.5.0
* @access private
*
* @uses do_action() Calls 'deprecated_function_run' and passes the function name, what to use instead,
* and the version the function was deprecated in.
* @uses apply_filters() Calls 'deprecated_function_trigger_error' and expects boolean value of true to do
* trigger or false to not trigger error.
*
* @param string $function The function that was called
* @param string $version The version of WordPress that deprecated the function
* @param string $replacement Optional. The function that should have been called
*/
function _deprecated_function( $function, $version, $replacement= null ) {
do_action( 'deprecated_function_run', $function, $replacement, $version );
// Allow plugin to filter the output error trigger
if ( WP_DEBUG && apply_filters( 'deprecated_function_trigger_error', true ) ) {
if ( ! is_null($replacement) )
trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $function, $version, $replacement ) );
else
trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $function, $version ) );
}
}
/**
* Marks a file as deprecated and informs when it has been used.
*
* There is a hook deprecated_file_included that will be called that can be used
* to get the backtrace up to what file and function included the deprecated
* file.
*
* The current behavior is to trigger a user error if WP_DEBUG is true.
*
* This function is to be used in every file that is deprecated.
*
* @package WordPress
* @subpackage Debug
* @since 2.5.0
* @access private
*
* @uses do_action() Calls 'deprecated_file_included' and passes the file name, what to use instead,
* the version in which the file was deprecated, and any message regarding the change.
* @uses apply_filters() Calls 'deprecated_file_trigger_error' and expects boolean value of true to do
* trigger or false to not trigger error.
*
* @param string $file The file that was included
* @param string $version The version of WordPress that deprecated the file
* @param string $replacement Optional. The file that should have been included based on ABSPATH
* @param string $message Optional. A message regarding the change
*/
function _deprecated_file( $file, $version, $replacement= null, $message= '' ) {
do_action( 'deprecated_file_included', $file, $replacement, $version, $message );
// Allow plugin to filter the output error trigger
if ( WP_DEBUG && apply_filters( 'deprecated_file_trigger_error', true ) ) {
$message= empty( $message ) ? '' : ' ' . $message;
if ( ! is_null( $replacement ) )
trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.'), $file, $version, $replacement ) . $message );
else
trigger_error( sprintf( __('%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.'), $file, $version ) . $message );
}
}
To prevent the notices from displaying for functions, the ‘deprecated_function_trigger_error’ filter hook should return false. To prevent notices from displaying for files, the ‘deprecated_file_trigger_error’ filter hook should return false.