WordPress 4.2.x のマルチサイトトラブル…

WordPress 4.2 より絵文字が使えるようになって、それを早速試してみたのですが、エラーが出る場合があったのでその対処法と苦闘?を備忘録として書きました。

苦闘はどうでもいいからとりあえず試してみたい。 😥 という方は一番下までスクロールしてね。 😯

 

エラーについて

その時の環境は以下となります。

  • ローカル環境
  • Windows 8.1
  • XAMPP 1.8.1
  • Apache 2.4.3
  • PHP 5.4.7
  • MySQL 5.5.27

 

まず、WordPress4.2.2をいつも通り、データベースを作成して新規インストール。

https://codex.wordpress.org/Installing_WordPress

インストールOK。wp-confing.php にてデバッグモードをtrue、デバッグログを trueにしておく。

使ってみる。特にエラーは何もなし 😛

絵文字を使ってみる。やっぱり何もエラーなし。 😎

※Windows 8.1 でノートパソコンをお使いの方は、下にある、アプリケーションや時間等が表示されている「ツールバー」を右クリックして、「ツールバー(T)」> 「タッチキーボード」を選択すると、ツールバーにキーボードが表示されると思うので、そのキーボードから絵文字は入力できるようになっています。

 

で、問題はここから。

Announce from the Dashboard 等マルチサイト対応のプラグイン等もあるため、マルチサイトに変更して動作を試してみました。

Codexはこっち。http://codex.wordpress.org/Create_A_Network

うん、とりあえずマルチサイトになりました。

マルチサイト画面
マルチサイト画面

そして「サイト」>「サイトの作成」から、2つめのサイトを作成しようと思ったら…

サイトの作成
サイトの作成

む? 😕 画面上にエラーが出ました。。

Warning: preg_match() expects parameter 2 to be string, object given in wp-includes\formatting.php on line 3435
Warning: preg_match() expects parameter 2 to be string, object given in wp-includes\formatting.php on line 3424
Warning: preg_match() expects parameter 2 to be string, object given in wp-includes\formatting.php on line 3435
Warning: strip_tags() expects parameter 1 to be string, object given in wp-includes\formatting.php on line 3407
Warning: strip_tags() expects parameter 1 to be string, object given in wp-includes\formatting.php on line 3407
Catchable fatal error: Object of class WP_Error could not be converted to string in wp-includes\kses.php on line 1038

preg_matchに値が何も来ていないのかな?strip_tagsにも来ていないのかな?

色々推測してみましたが、結局原因は分からないので、とりあえず画面を戻ってみると、

サイト一覧
サイト一覧

サイトは作成できているっぽいです。細かいバグ?が何かあるのかな。

と思いつつ、作成した2つ目のサイトのダッシュボードにアクセスすると、なぜか404エラー。

 

 

ん?(´・ω・`)

 

.htaccessの問題?.htaccessファイルを確認するも、特に問題は無さそう…
さっきのエラー、多分関係あるな。。

さて、どこから原因を探したほうがいいかな。。ワカンネ(´ー`)

 

😕

 

他に問題がないか調べてみようと思い、新しく作成したサイトのデータを編集画面(ネットワーク管理画面内)から見てみましたが、ユーザーがいない。。

あれ、admin 足したけどな…WordPress4.2からブルートフォース対策とかでadminは足せないのかな?だとすると、初めからadminでユーザー作成できるのはおかしいから関係はないか。admin足せば問題ないのかな?

でもユーザーがいないからって、404エラーはないか。 🙁

細かいバグでは無さそう。。

次にサイトの編集設定を見ると…

サイト編集設定
サイト編集設定

設定できる項目が、サイトのアップロード領域のクォータ っていう項目しかない。。

え?なにこれ?サイトが上手く作成できていない? 🙄

 

他にエラーが無いか確認してみようと思い、次にwp-content/debug.logの中身を確認しました。

すると、かなりのエラー。。 😳

そして、画面を表示する度にこのエラー。

WordPress データベースエラー: Table '42.wp_3_options' doesn't exist for query SELECT option_value FROM wp_3_options WHERE option_name = 'home' LIMIT 1 made by WP_List_Table->display, WP_List_Table->display_rows_or_placeholder, WP_MS_Sites_List_Table->display_rows, get_home_url, get_option

doesn’t existって、テーブルが無いってこと?まさか~、そんな事今までにないよ?

サイト一覧にちゃんと作ったサイトがあるんだし。

で、phpMyAdminから確認してみました。

phpMyAdmin
phpMyAdmin

😈

うん。。。無いですね。(´・д・`)ゞ

これで問題は分かったけど、原因は何だろう。

今までこんなエラーは無かったので、WordPress4.2からのエラーかな。
エラー内容を見る限りでは、文字コード系かな~と推測。。

それからwp-config.phpの以下をにらめっこ。

/** データベースのテーブルを作成する際のデータベースの文字セット */
define(‘DB_CHARSET’, ‘utf8mb4’);

WordPress4.2からのエラーというのが気になって、もしかして最初にCodexを参考にデータベースを作成した時の文字コード utf8_unicode_ci が4.2以降では違うのかなと思い、今度はデータベースを作成する際に、照合順序ってのを utf8mb4_general_ci で作成して、同じくマルチサイト環境でサイトを作成してみましたが、だめでした。

しかも全く同じようなエラー。 😳

じゃあ文字コードじゃないのかな。。

ログファイルをにらめっこしていると、ほとんどのエラーが wp_2_****** のテーブルが無いよ!みたいなエラーだったので、そもそもテーブルが作れていない!?
ようなので、そこだけ注意してみてみると、

WordPress データベースエラー: COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4' for query CREATE TABLE wp_2_terms

あ、create table でデータベースエラーなのね。。 😳

utf8_general_ci is not valid ?え?どーゆーいみ?わっつ?( ´゚д゚)ン?

 

🙄

意味が分からなかったので、とりえあずサイト作成のコードを追う事にしました。

まずはURLの通り、wp-admin/network/site-new.phpをざっくり見る。

ざっくり見ると、分からない…なので、詳しく見る。 :mrgreen:

エラーが発生しているっぽい怪しいコードを発見。その上と下でごにょごにょ。色々試した結果、wpmu_create_blog()内が問題っぽい。

それをさらに追うと…insert_blog()はエラー無し。問題無さそう。
install_blog()はどうだろう…あ、エラーか。

またさらに追う。make_db_current_silent(‘blog’)直後にログにエラーが出る。

もっと追うと、dbDelta()でquery()を実行した時にエラー。テーブル作る際のクエリ内に多分問題あるのかな。 😐

クエリがたくさんあって、どれがエラーのクエリか分からないので、1つクエリを抜粋してphpMyAdminで試してみました。

CREATE TABLE wp_2_terms (
term_id bigint(20) unsigned NOT NULL auto_increment,
name varchar(200) NOT NULL default '',
slug varchar(200) NOT NULL default '',
term_group bigint(10) NOT NULL default 0,
PRIMARY KEY (term_id),
KEY slug (slug(191)),
KEY name (name(191))
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8_general_ci

あ、エラーなんだ。一旦、WordPressのエラーとデータベースのエラーのどちらなのかを判別するために、phpMyAdminにて直接クエリを実行。

phpMyAdminのレスポンスは以下。

#1253 - COLLATION 'utf8_general_ci' is not valid for CHARACTER SET 'utf8mb4' 

クエリの文法エラーではなさそう。これはWordPressでもPHPのエラーでもなく、MySQLでのエラーっぽい。
と、ここでやっとさっきのエラーの意味が少し分かりました。

あ、utf8mb4のエラーじゃなくて、COLLATION の utf8_general_ci っていう文字コードのほうで、エラーなのね。 😳

それで、COLLATIONってなに?で、ググってみましたが、、

http://dev.mysql.com/doc/refman/5.5/en/charset-connection.html

なるほど。。…ワカンネ(´ー`)

で、お次。

http://qiita.com/kazu56/items/6af85ffcf8d3954455ad

おぉ、これは少し分かりやすい!COLLATIONは文字コードの設定ではなくて、ソートする際の文字コード(照合順序)、みたいな意味合いっぽいですね。

で、問題は、そのソートする際の文字コードが is not valid かな。

おそらく、照合順序に utf8_general_ci なんていうものは無い又は、何かのバリデーションに通らない、みたいな意味かな。not valid って、意味が大きいな。。

さて、問題は何で not valid なんだろう。。 😐

まず、utf8_general_ci があるかどうか確認するために、phpMyAdmin から選ぶことができる照合順序を確認してみました。

ちゃんと utf8_general_ci はあるじゃん。スペル間違い?いや、そうでもない。

あれ、ちょっと待てよ…。WordPress4.2からmb4だから、utf8_general_ci 自体、違うんじゃないかな。。それとも、別の原因かな。

こういう時は、にらめっこ。 😎
さっきのテーブル一覧をにらめっこしていると…

phpMyAdmin
phpMyAdmin

😈

あれ、全部、テーブルの照合順序が utf8mb4_general_ci じゃないか! 😈
でもなんで新しいサイトのクエリは utf8_general_ci になる?
あ、これが原因?少し解決できそうな予感…。 😮

phpMyAdminから直接クエリを試してみます。
さっきエラーのあったコードの一部、COLLATIONの値を utf8_general_ci からutf8mb4_general_ci に変えてやってみました。

CREATE TABLE wp_2_terms ( term_id bigint(20) unsigned NOT NULL auto_increment, name varchar(200) NOT NULL default '', slug varchar(200) NOT NULL default '', term_group bigint(10) NOT NULL default 0, PRIMARY KEY (term_id), KEY slug (slug(191)), KEY name (name(191)) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci

お!

おぉ!

うまくテーブルが作成できました。 🙂

これが原因!?

じゃあ、今度はWordPressで試してみようかと思い、COLLATION を指定しているところを探してみる。

wp_get_db_schema()にてCOLLATEとしているみたい。

もっと追ってみると、wp-includes/wp-db.php のinit_charset()にてCOLLATEを指定しているっぽい。

今はテストなので、とりあえずwp-db.phpに直接、COLLATEが utf8mb4_general_ci になるよう変更して、サイトの作成を試してみました、、、

🙂

 

うまくいきました!エラーは特になし。あ~疲れた(まだ早い)。 😆

テーブル一覧
テーブル一覧

うん、テーブルも上手く作成されているし、作ったサイトのダッシュボードにもいけますね。

これは、なんとか解決できたっぽい。

上手くサイトが作成できない時は、COLLATION (文字コードの照合順序)が違う為なのかな。

サーバごとに、COLLATIONが違っていればを変えればいいのか。

今はテストだからwp-db.phpに直書きだけど、簡単にサーバごとにCOLLATIONを変更するいい方法ないかな(´・ω・`)

で、さっきの init_charset() を見ていると、

} elseif ( defined( ‘DB_COLLATE’ ) ) {
$this->collate = DB_COLLATE;
}

お、どこかでDB_COLLATEを定義できるんだ。ー(‘∀’)ゞ

で、検索してみると…wp-config.phpにあるし。 👿
いつもこの辺はWordPressが自動で作成するからスルーしていました。 😉

/** データベースの照合順序 (ほとんどの場合変更する必要はありません) */
define(‘DB_COLLATE’, ”);

今まで一度も変更したことなかった。。こういう時に変更するんだね。 🙂

ってことで、ためしにdefine(‘DB_COLLATE’, ‘utf8mb4_general_ci’);として変更してサイトを作成してみましたが、うまく動作しました。:-o

 

念のため、もう一度試しました。

さきほど、データベースを作成する際の、照合順序の文字コードを変えていたので、一旦 Codex と同じ照合順序 utf8_unicode_ci にてデータベースを作成。

データベース作成
データベース作成

同じようにインストール&マルチサイト化。

照合順序の文字コードはいまこんな状態。

データベース: utf8_unicode_ci

各テーブル: utf8mb4_general_ci (どのタイミングでutf8mb4_general_ciになるんだろう…) 😕 

サイトを作成してみる。やっぱりエラー。

wp-config.phpにて

define(‘DB_COLLATE’, ‘utf8_unicode_ci‘);

に変更してサイト作成を試してみる。

同じようなエラー。ってことは、テーブルを作成する時の照合順序ではなくて、他のテーブルの照合順序と同じようにすればいいのかと思い、

define(‘DB_COLLATE’, ‘utf8mb4_general_ci‘);

で試すと上手くいきました。 🙂

 

追記

wp-config.phpのDB_CHARSETによって、utf8mb4_general_ciかどうかも変わるっぽいです。

DB_CHARSETutf8mb4 だったら、utf8mb4_general_ci

DB_CHARSETutf8 だったら、utf8_general_ciutf8_unicode_ci

 

 

参考にされる方へ。

同じようなエラーに遭遇した方は、wp-config.phpのDB_COLLATEを

define(‘DB_COLLATE’, ‘作成済みのテーブル wp_options とかの照合順序の文字コード‘);

みたいな感じで、一度試してみてください。

🙂

 

久しぶりにブログ更新… 😉

 

WordPress Plugin Post Lists View Custom Version UP 1.7

投稿一覧やカスタム投稿タイプ一覧、メディア一覧等の一覧画面をカスタマイズする

Post Lists View Custom

のバージョンアップをおこないました。

最新バージョンは1.7。

 

 

やったこと

今回の主なところは、

・カラムのソートを設定できるように

・4.0への対応

・たくさんの細かなバグの修正

となります。

現時点での、WordPress4.0以降の場合、「メディアライブラリ」の表示表法が「グリッド」と「リスト」の2種類ありますが、Post Lists View Customで対応しているカスタマイズは「リスト」形式の表示方法となります。

また、今回大きな機能として「カラムのソートの設定」をできるよう変更しました。(プラグインやテーマにて追加されたカラムに対して、ソートが用意されていない場合は不可となります)

List view for Posts customize
List view for Posts customize

 

カラムのソート設定はだいぶ前から検討していて、何度か時間の空きがあれば試して、だめで、試して、だめで。。。

何度か試していたのですが、なかなかできませんでした。

(右上に放り投げるように「ミ○ティーーーー」  😈 )

「プラグイン等で追加されたカラムのソートが出来ないように」は簡単にできるのですが、「投稿ID」や「スラッグ」、「アイキャッチ」のソートが出来るように…等が難しかったのです。。 😕

今回、やっとうまく動くようになったので機能追加をいたしました 😛

 

そして、前回もですがプラグインとアドオンの両方を更新しました。

しかし、前回はプラグイン及びアドオンの更新タイミングのずれの影響を考える事が出来なかったため、Post Lists View Custom のアドオンを使っているユーザーから「管理画面真っ白なんだけど…」というご連絡がありました。。 😥

 

なので、今回はわざとアップデートのタイミングを約10日ずらしてアドオンから先にアップデートを促すようにしました。

これで、多分うまくいくよね。。 😐

 

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/post-lists-view-custom/

Post Lists View Custom for Multiple setups Add-on

WordPress Plugin Js Css Include Manager Version UP 1.4

WordPressの管理画面、サイト(フロントエンド)画面へ読み込むJavascript、CSSファイルを整理することができる

Js Css Include Manager

のバージョンアップをおこないました。

最新バージョンは1.4です。

 

 

やったこと

主にやったこととしては、他のプラグインでもやっている事ですが、マルチサイトへの対応と、プラグインの動作権限を変更できるよう追加しました。

他には、ファイルの整理と最新版 4.0 への対応の確認をしました。

Js Css Include Manager add screen
Js Css Include Manager add screen

 

最近はファイルの整理をしつつ、機能を追加という事をしています。

もし不具合等があれば、ご連絡お願いします。 😳

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/js-css-include-manager/

WordPress Plugin Post Lists View Custom Version UP 1.6

投稿一覧やカスタム投稿タイプ一覧、メディア一覧等の一覧画面をカスタマイズする

Post Lists View Custom

のバージョンアップをおこないました。

最新バージョンは1.6。

 

[ 2014年8月6日 記載]

※Post Lists View Customとアドオンを一緒に使っている方で、アップデートした影響で、WordPressの管理画面にアクセスできないというご報告を受けています。申し訳ありませんが、アドオンを一緒に使っている方はアドオンを先にアップデートしてください。

If you using with Add-on, please update to Add-on also.

 

やったこと

今回の主なところは、

・プラグイン自体の動作権限を自由に変更できるように

・Post Lists View Custoizeのインターフェースの改善(より一覧表示の見た目に近いように)

・ソースコードの大枠を更新

というかんじで、新しい機能の追加ではなく、より「分かりやすく」「安定した動作になるように」を心掛けたアップデートになりました。

 

他には「一覧表示のテーブル幅の自動調節をONにするか、OFFにするか」という設定部分について、意味が分からないという方が多いと思いましたので、ちょっとした説明付きの画像イメージを追加しました。

 

また、一緒にアドオンとして配布しているマルチユーザーグループ設定も更新しました。

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/post-lists-view-custom/

Post Lists View Custom for Multiple setups Add-on

WordPress Plugin Archive Posts Sort Customize Version UP 1.4

フロントエンド(サイト)のカテゴリの投稿一覧等のアーカイブ一覧のカスタマイズをする

Archive Posts Sort Customize

のバージョンアップをおこないました。

最新バージョンは1.4。

 

やったこと

いつかは要望がくると思っていました。。。

「カスタムタクソノミーのソートのカスタマイズも出来るようにしてほしい!」

 

ですよねー。プラグインのアップデートの為に、まとまった時間がなかなか作れないです。。

前回カテゴリごとのソートカスタマイズをできるようにしていたので、そこまで時間を取らずに機能を追加することができたのですが…

・カスタムタクソノミーは複数作られる

・その中でタクソノミーは複数作られる

と、複数作られる場合が考えられた為、いつもながらどういった設定画面にしたほうがいいのか、悩みました。。

(結果、メニュー内にタクソノミーを表示し、設定画面ではタクソノミーごとの設定ができるようにしました 🙂 )

 

あと、別の要望として「The とか A とか、投稿タイトル名の一部を無視してソートできるように」というものがきていますので、近いうち、この機能をなんとかかんとか、やってみようと思います。 😎

 

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/archive-posts-sort-customize/

WordPress Plugin Archive Posts Sort Customize Version UP 1.3.1

フロントエンド(サイト)のカテゴリの投稿一覧等のアーカイブ一覧のカスタマイズをする

Archive Posts Sort Customize

のバージョンアップをおこないました。

最新バージョンは1.3.1。

 

やったこと

プラグインユーザーの方から「カテゴリ一覧のカスタマイズは出来るけど、カテゴリごとのソートのカスタマイズは出来ないの?」という要望をいただいていたので、今回はそのカテゴリごとのソートのカスタマイズが出来るようにしました。

いやー、結構難しかったです。。

難しい原因は「カテゴリごとの設定」ではなく、

「これから作成されるカテゴリのソート設定」と、「カテゴリ別のソート設定」をどういう風な構成にすると、分かりやすい設定画面になるだろうかという事でした。 😳

 

カテゴリ別のソート設定だけができるようにする事自体は多分簡単です。

しかし、これから新たに作成するカテゴリに対しては、ただカテゴリ別のソート設定しか無ければ、カテゴリを作成する度にソートの設定をする必要があり、ちょっと不便ではないかと思いました。 😕

この問題をどうやって解決しようか。。

カテゴリごとに設定できる項目と、これから作成されるカテゴリのソート設定ができる項目を作れば、おそらく問題は解決されると思いますが、その設定画面をどうやったら分かりやすく、使いやすくなるだろう。。。 😕

 

うーん。

むーん。

(○’ω’○)ん?

 

 

結果、このような画面構成になりました。

Settings screen
Settings screen

 

ちょっと画面が大き過ぎて見づらいですが、

上部は、今まで通りの設定と同じ機能で「デフォルトのカテゴリソート設定」として、全カテゴリ一覧のソート設定をする項目となります。

下部は、「そのカテゴリだけ別のソート設定」として、

指定するカテゴリだけを別のソート設定にできるようにしました。

 

多分、これならみんな使いやすい、よね? 😮

 

ちなみに、カテゴリを作成しても、そのカテゴリの投稿が1つもない場合は設定できない(設定するカテゴリが表示されません)ので注意してください。

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/archive-posts-sort-customize/

WordPress Plugin Post Lists View Custom Version UP 1.5.9

投稿一覧やカスタム投稿タイプ一覧、メディア一覧等の一覧画面をカスタマイズする

Post Lists View Custom

のバージョンアップをおこないました。

最新バージョンは1.5.9。

 

やったこと

以前、外国の方から「たくさんのカラムを設定しているので、カラムの幅を自動“auto”にするような設定にして欲しい」という要望がありましたので、カラムのセル(th)の幅を自動に設定していました。

しかし今回日本の方から「タイトルカラム含め全てのカラム幅がautoになると、見た目が悪くなってしまう」というご要望があり、どちらのご意見を取ろうか迷いました。

これがデフォルトのカラム幅サイズ。

Default posts screen
Default posts screen

これが Post Lists View Custom プラグインで幅をautoにした場合のカラム幅サイズ。

Customize posts screen
Customize posts screen

 

どちらがいいか迷った結果、どちらも出来るようにしたほうがいいな  😎

という事で、プラグインの設定に新たに項目を設けて、そこから設定できるようにしました。

Other settings
Other settings

 

と、一緒にアドオンとして配布しているマルチユーザーグループ設定も更新しました。

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/post-lists-view-custom/

Post Lists View Custom for Multiple setups Add-on

WordPress Plugin Announce from the Dashboard Version UP 1.3.1

WordPress のダッシュボードにお知らせとかを載せることができる

Announce from the Dashboard

のバージョンアップをおこないました。

最新バージョンは1.3.1。

 

やったこと

プラグインのユーザーより「お知らせの掲載順序を自由に変更できるように」という要望がありましたので、その機能を追加しました。

今までは、作成した順番通りにお知らせが表示される仕組みですが、
作成したお知らせを自由にドラッグ&ドロップで表示順番を変更できます。

レッツ、ひっぱり (´・ω・`)

 

Setting screen of Announce from the dashboard
Setting screen of Announce from the dashboard

 

ドロップ直後は左チェックボックスの下に、ローディング中(正しくは順番保存中)のアイコンが表示されるので、そのアイコンが消えたら保存完了です。

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/announce-from-the-dashboard/

WordPress Plugin Post Lists View Custom Version UP 1.5.7

投稿一覧やカスタム投稿タイプ一覧、メディア一覧等の一覧画面をカスタマイズする

Post Lists View Custom

のバージョンアップをおこないました。

最新バージョンは1.5.7。

 

やったこと

今までは、既に作成済みのカラム(列)をどのような順番で表示するか、非表示にするかを選ぶ機能まででしたが、今回はそのカラム名を変更できるようにしました。

 

例えば、

Edit column name
Edit column name

Author(作成者) というカラムを Post Author

こういう風に変更すると、

Screen of Posts
Screen of Posts

こんな風に、簡単にカラム名が変更できます。

実は、この機能追加にプラス、ソート機能も追加しようと思って色々と試していたのですが、なかなか上手くいかず。。。 🙁

なので今回は、カラム名の変更の機能追加までのアップデートとしました。

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/post-lists-view-custom/

 

WordPress Plugin Announce from the Dashboard Version UP 1.3

WordPress のダッシュボードにお知らせとかを載せることができる

Announce from the Dashboard

のバージョンアップをおこないました。

最新バージョンは1.3。

 

やったこと

今までは、ダッシュボードに載せるお知らせの内容、種類、ユーザー権限グループ迄が選べる機能でしたが、それにプラス、載せる期間を選べるようになりました。

お知らせをいつから表示されるようにするのか、また、いつまで表示されるようにするのか、です。

特に期間を指定しない場合は、常に表示されるお知らせ。という扱いになります。

Announce setting screen
Announce setting screen

 

 

ダウンロードされるかたはこちらからどうぞ。

http://wordpress.org/plugins/announce-from-the-dashboard/