WordPress4.2で投稿が出来なくて凄い困った

  • このエントリーをはてなブックマークに追加
  • 0

WordPressがいつの間にか4.2になっていたのだが、そのタイミングから新規投稿画面に「最新の投稿を表示するページを編集中です。」と表示され、本文入力用のテキストエリアが出ないという大変な問題が発生して、ずっと投稿出来なかった。

投稿出来ない

詳解 WordPress

著者/訳者:プライム・ストラテジー株式会社

出版社:オライリージャパン( 2015-04-25 )

定価:

Amazon価格:¥ 2,808

大型本 ( 204 ページ )

ISBN-10 : 4873116783

ISBN-13 : 9784873116785



この見慣れないメッセージは、WordPressに対するこの変更実装されたようで、このコード差分を元に戻してみたところ、メッセージは消え、投稿画面が出てくる所は確認出来た。

が、投稿してみても日本語がすべて「?」で入ってしまい、完全に文字化け状態になってしまったので、こりゃダメだ、と思い変更を元に戻した。で、色々とネット情報を調べてみると、どうやら解決のためにはWordPressを4.1.1に戻さないとダメといったような情報が出てくる。が、そんな恐ろしい事出来るわけない!

そんな中、ついにWordPressのフォーラムで同じ問題について議論されているのを発見!とりあえず見守っていると、コード修正の方法が提示された。

まず、wp-includes/wp-db.phpの2686行目を修正する。
(修正前が2686、修正後が2687。長いのでそれぞれ3行に分割した)。

  1. //$queries[ $value['charset'] ][ $col ] =
  2. //         $this->prepare( "CONVERT( LEFT( CONVERT( %s USING binary ),  %d )
  3. //         USING {$value['charset']} )", $value['value'], $value['length']['length'] );
  4. $queries[ $value['charset'] ][ $col ] =
  5.          $this->prepare( "CONVERT( LEFT( CONVERT( %s USING binary ),  %f )
  6.         USING {$this->charset} )", $value['value'], $value['length']['length'] );

で、2701行目からの、下記のif文をコメントアウト。
(さっき2687行目を追加したので1行ずれて2702行目になっているが)

  1. // Change the charset to match the string(s) we're converting
  2. //if ( $charset !== $connection_charset ) {
  3. //        $connection_charset = $charset;
  4. //        $this->set_charset( $this->dbh, $charset );
  5. //}

これで直るらしい。実際直った。

でも何故だ?そもそも何故、あのメッセージが出たのか?何故本文入力用テキストエリアは消えたのか?
ちょっとだけ考えてみた。

まず、例のメッセージが出るようになった改造はこれだ。
wp-admin/edit-form-advanced.phpに以下のコードが追加されている。if文内の1行目が「テキストエリアを消す」処理で、2行目が「メッセージを出す」処理だった。

  1. if ( $post_ID == get_option( 'page_for_posts' ) && empty( $post->post_content ) ) {
  2.     add_action( 'edit_form_after_title', '_wp_posts_page_notice' );
  3.     remove_post_type_support( $post_type, 'editor' );
  4. }

このif文の条件を出力してみたところ、テキストエリアが出ないときは、$post_IDが0になっていた。一方、直った後は$post_IDにちゃんとした値が入っていた。修正コードの中身を見ると、DBへの接続時の文字コードを変えているし、説明でも文字コードの問題っぽいことを書いていたので、DBとの接続に問題があり、新しい投稿用のIDをうまく拾えないのが問題なのかな?

取り敢えず、フォーラムにあった修正で直ったのはいいけどまたWordPressが新しくなったらまた壊れるのかな?それ困るな・・・。

スポンサーリンク
スポンサーリンク
  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク