WordPress3.5にしたらprepareでエラーが出た場合の対処

WordPress3.5より 関数 prepare の第2引数が必須になりました。

これによって一部のプラグインで以下のようなエラーが出る場合がありました。
「Warning: Missing argument 2 for wpdb::prepare(), called in ~/wp-content/plugins/XXXXX/XXXXX.php on line 1712 and defined in ~/wp-includes/wp-db.php on line 990」

~3.4.2 wp-db.php

function prepare( $query = null ) { // ( $query, *$args )

(第2引数は関数内部で受取るようになってます)

3.5 wp-db.php

function prepare( $query, $args ) {

(第2引数は必須になってます)

これにより、prepare関数で第1引数だけで使っている場合にエラーが発生します。

不動産プラグインシリーズは今回のバージョンアップで対応しましたが、他社のプラグインはまだ対応できていないようです。

【緊急対策例】
 WordPressの コアファイル を触る事になりますが、他社のプラグインが対応するまで 一時的に prepare関数 を以前のコードに戻してみるのはいかがでしょうか。

wp-includes/wp-db.php

prepare関数 (WordPress3.4.2)

function prepare( $query = null ) { // ( $query, *$args )
    if ( is_null( $query ) )
        return;

    $args = func_get_args();
    array_shift( $args );
    // If args were passed as an array (as in vsprintf), move them up
    if ( isset( $args[0] ) && is_array($args[0]) )
        $args = $args[0];
    $query = str_replace( "'%s'", '%s', $query ); // in case someone mistakenly already singlequoted it
    $query = str_replace( '"%s"', '%s', $query ); // doublequote unquoting
    $query = preg_replace( '|(?<!%)%s|', "'%s'", $query ); // quote the strings, avoiding escaped strings like %%s
    array_walk( $args, array( &$this, 'escape_by_ref' ) );
    return @vsprintf( $query, $args );
}

こちらのコードと差し替えてみてください。
*他社のプラグインが対応すれば元に戻すのを忘れずに。

【追記】
 wp-config.php に以下のコードを追記する方法もあるようです。

@ini_set('display_errors', 0);

*PHPでのエラーの表示をオフにする

Copyright © All Rights Reserved · Green Hope Theme by Sivan & schiy · Proudly powered by WordPress