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でのエラーの表示をオフにする