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もキソから勉強しなきゃなって気になります。

“WordPress3.5:no-future-postsプラグインでエラー発生” への6件の返信

  1. ありがとうございます、参考にさせていただいたお陰でエラーが出なくなりました!
    投稿を古い順に変えたい場合はどこを変更したら良いのでしょう。
    もしよろしければ教えていただけませんでしょうか。

    1. エラー解決するとほっとしますよね!

      投稿を古い順に変更する方法ですが、
      記事取得時に「昇順に(ASC)」並べ替えるように記述する必要があります。

      テーマによっても違うと思いますし、
      どのページを古い順に表示したいのかによっても書き方は変わると思いますので、
      具体的なコードはここで書くことができません。

      ↓こちらのページに古い順に投稿するサンプルコードがありました。

      投稿の順番を古い記事から表示させる | フリーランスwebデザイナーの日記|オウガログ
      WordPressフォーラム 投稿の表示順を古いものを上にしたい

      参考になるのではないかと思います。

  2. ずーっと悩んでいたので、とても助かりました。
    2か所を変更しただけで、すっきり改善しました!
    ありがとうございました!!

    1. お役に立ててよかったです。
      このところWordpressから離れていたのですが
      コメントいただけて、またカスタマイズしていこうと
      やる気がでました!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です