WordPress3.5:no-future-postsプラグインでエラー発生

記事を更新しようと、ダッシュボードを開いたらWordPress3.5の日本語版がでていたので、いつものことながらあまり深く考えずアップグレード。

更新は特に問題なく終わったのだけど、新規追加のページを開くとWarning!

wp-db.phpの関数をno-future-posts.phpで参照している箇所でエラーがでている様子。

wordpress.orgのフォーラムで調べてみたけど、イマイチ解決策がわからず、昨日は時間切れでそのままに。

今日もう一度、やってみて当たり前だけどまたエラーがでる。

それでも、更新くらいはできるかと記事を保存しようとしたら、ダメ押しでエラーが表示されました。

↓これが表示されたエラー(パスは*に変更してます)

Warning: Missing argument 2 for wpdb::prepare(), called in */wp-content/plugins/no-future-posts/no-future-posts.php on line 74 and defined in */wp-includes/wp-db.php on line 990

Warning: Missing argument 2 for wpdb::prepare(), called in */wp-content/plugins/no-future-posts/no-future-posts.php on line 81 and defined in */wp-includes/wp-db.php on line 990

Warning: Missing argument 2 for wpdb::prepare(), called in */wp-content/plugins/no-future-posts/no-future-posts.php on line 74 and defined in */wp-includes/wp-db.php on line 990

Warning: Missing argument 2 for wpdb::prepare(), called in */wp-content/plugins/no-future-posts/no-future-posts.php on line 81 and defined in */wp-includes/wp-db.php on line 990

Warning: Cannot modify header information – headers already sent by (output started at */wp-includes/wp-db.php:990) in */wp-includes/pluggable.php on line 876

更新できないんじゃしかたない

もうちょっと調べるか、、、とたどり着いたのがこちらのサイト

WordPress 3.5にアップデートするとwarningが表示される問題への対処|ロジカルアーツ研究所

『関数の引数が足りない。もう1個「0」でもいいから追加』すればいいとのこと。

これで、warningが消え、更新できました。

ちなみに変えたのは

no-future-posts.phpでエラーが出ていたところ(74行目、81行目)

$wpdb->query($wpdb->prepare($sql));

そこをこう変更

$wpdb->query($wpdb->prepare($sql,0));

記事が更新できたところで、改めてwp-db.phpを見てみると

アップデート前

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 );
}

3.5アップデート後

function prepare( $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( '|(?<!%)%f|' , '%F', $query ); // Force floats to be locale unaware
$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 );
}

確かに関数が変わっている。

不勉強ゆえ、コードの細かいところやこの関数がWordPressでどんな役割を果たしているかわからないところが悔しいところ。

こういうエラーにぶつかるとやっつけでコード読むんじゃなくて、ちゃんとPHPもWordPressもキソから勉強しなきゃなって気になります。