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/

 

 

 

 

 

Happy NewYear 2014!!

I wish you a happy new year!!  🙂

Thank you for being my plugin user and customer!  🙂

I look forward to your continued good will in the coming year.  😀

 

謹賀新年

明けましておめでとうございます!  🙂

昨年はたくさんのプラグインユーザー・お問い合わせ・アドオン購入者の方に恵まれて、私にとって良い年と感じる事ができる年となりました。

プラグインを使っていてバグがあった方へ….えっと、、すみません。 😥

出来る限りバグが無いよう、頑張ります。

 

今年も宜しくお願いします。  😀

 

はまりました。。max_input_vars。

WordPressで様々なプラグインを導入すると、おのずとそのプラグインのメニューが増えたりしていきます。

私のプラグインは殆どが、管理画面をカスタマイズするものなのですが、プラグインで管理画面にエラーが出る場合には大抵、他のどのプラグインを有効化した時にエラーが出るのか、超地道にひとつずつ調べています。 😳

 

今回も、多分アメリカ?の方から「動かないよーどうなっているだYo! 😈 」とメールをいただき、「動かないのは分かったので、どういう設定をしているのか教えてYo! 😳 」をもっと丁寧な感じにした英語で返事をして、さっそく調べていました。

 

まずは出来る限り同じ環境へ

相手の方がお見せ出来る限りの環境(管理画面のスクリーンショットやプラグイン一覧画面等)を見せていただき、私もローカルサーバに同じように環境づくりをします。

WordPressのバージョンも同じバージョンにOK。プラグインの一覧・バージョンもOK。

で、さっそくやってみると…
はい、確かにエラーとなります。 🙁

でも、ここでやっかいに感じた部分。。
それは、「微妙に保存されている、ような、いないような 😕 」。。

まぁ、そんな事は後で考えようか。(本当は一番の原因に関係すること)

そして、一つずつぽちぽちと、プラグインを有効化して無効化、有効化して無効化… 😆
をやってみるのですが、どのプラグインの場合でも同じようなエラーがでました。 😕

ユーザー権限の問題だろうか。 😕

はたまたWordPressのバージョンが上がった時の何かの影響なのだろうか。 😕
と思い、バージョンダウンして試してみたりしましたが、これもやはりダメ。。

それからも色々試してみて、少し発見したことがありました。
「Woocommerceと何かを有効化すると、結構な確立でエラーが出る」という事でした。 😕

(誤解された方がいたらすみません、Woocommerceはエラーが良く出る。という訳ではありません。詳細は下記をお読みください)

 

って事は、Woocommerceの問題なのかな~と目星をつけ、またひたすらトライ&エラーの繰り返し。
それからまた分かった事は、「メニューの数が多い時だけ、エラーになる」という事でした。

(Woocommerceはたまたまメニューの数が多かっただけ)

 

ふーん。なるほど~。。わかりません。 😳

 

色々と設定をいじくり、なんとか画面にPHPのエラーが出るようにしました。

ログよりも、画面にエラーが出ると、どのタイミングでのエラーなのか分かりやすいです。 😮

 

で、そのエラー文をもとに色々とググっていると、phpmax_int_varsという設定にたどり着きました。

max_int_vars でぐぐると、ほぼ確実に同じような状況のエラーについて書かれた多くのブログがあります。
なるほど、フォームのアイテム数が指定した数よりも多すぎる。という事なんですね。

その数を指定する項目が max_int_vars。

しかもそれが、PHP 5.3.9 以降だなんて。。それは知らなかったよ。。 😥

 

かと言って、フォームの数を減らせばOK!

という解決策では上手くいかないので、どういう風にすればフォームの数を”PHP”上で減らす事が出来るかな~と試行錯誤すると、あっさり解決。 😐

 

原因がWordPressもしくはプラグインのほうにある。とばかり思い込んで原因を探っていたのでかなり時間取られました。。

色んな方面から原因を考えられるようにならねば。 🙄

 

WordPress Plugin Post Lists View Custom Version UP 1.5.5

WordPress の投稿一覧等の一覧画面をカスタマイズする

Post Lists View Custom

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

最新バージョンは1.5.5。

 

やったこと

WordPressの投稿一覧画面では、ちょっとした事を手軽に編集できるように「クイック編集」の機能があるのですが、その「クイック編集」で投稿を編集した後のカラム設定がWordPress標準のものとなっていました。

これをPost Lists View Customで設定した通りのカラム設定になるよう修正しました。

WordPressでは、一覧画面は

http://example.com/wp-admin/edit.php

で表示されるので、edit.phpへのフックを使ってごにょごにょすればいいと思い、ずっと試していたのですがこれがなかなか上手くいかず。。

なんでクイック編集の時だけ上手くいかないんだろう。。とひたすら試行錯誤の繰り返し。

どのタイミングでどの動作をしているのかをずっと追っかけていたら、やっと分かりました。

クイック編集の場合は admin-ajax で更新していたようです。

ず~っと edit.php にてフックさせていたので、admin-ajax.phpでは全く動作しませんでした。

これをクイック編集にも対応できるよう、フックを変えて動作させるよう更新しました。

 

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

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

 

 

 

 

 

WordPress Plugin Custom Options Plus Post in Version UP 1.3.1

WordPress でオプション値を手軽に作成できる

Custom Options Plus Post In

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

最新バージョンは 1.3.1。

 

やったこと

作成したカスタムオプション値を管理しやすくなるように、カテゴリを作成できるようにしました。

カテゴリー作成
カテゴリー作成

100個カスタムオプション値を作成した場合に、カテゴリ別で10個ずつ分けることが出来る。みたいなイメージです。

あとは、管理しやすくなるように「メモ」を作成できるようにしました。

~用のカスタムオプション値。

とか、

~までのカスタムオプション値でいついつから~に変更予定。

などが書き込めるようになっています。

あと、マルチサイトで各サイトで使用できるように対応しました。

 

ダウンロードはこちら

http://wordpress.org/plugins/custom-options-plus-post-in/

 

実は、この「カテゴリー作成」の機能自体は私の案ではなく、とある外国の方からの問い合わせから機能追加をすることになりました。

下記にそれまでのいきさつを書きました。

気になる方は宜しければお読みください。 🙂

 

いきさつ

とある外国の方(多分イギリスの方)から問い合わせフォームにて「~省略~ メインカテゴリで分けたい」と問い合わせがありました。

メインカテゴリ?Parent? Child? (省略部分に書いていました)

そんな機能をつけた覚えはありません。

なので「WordPressのカテゴリーと連携させたいのかな?」と考えたり、「ページのように親と子の属性をつけれるようにしたい」という事なのと考えてみました。

どちらにしてもはっきりとなんの事を言っているのか分からなかったのですが、一つだけはっきりと分かることがありました。

I have 1,000s of items

驚きました。そんなに使ってくれていたんですね。嬉しいです 🙂

 

言っていることを理解する為に、実際に1,000個、カスタムオプションを作成して試してみました。すると…

すこぶる表示が遅い。あと、例えば628番目のカスタムオプション値を編集する為にものすごく時間と手間がかかる。

という事が分かりました。あ、おそらくこれを何とか解決したいのかな?と言っているのではないかと思いました。

でも確証はなく、私の英語力では、これだけの理解が限界でした。。 🙁

 

なので、

I was surprised, That you have the items of 1,000. 

I’m sorry, I could not understand the some mean of you said.
>parent/child collapsible lists
>main categories
What does this mean?

 

こんなニュアンスです。

それは驚きました、1,000個もアイテムがあるなんて。

すみません、あなたの言ったことが私は理解できませんでした。

これらはどういう意味ですか?

英語が合っていればこのような意味になるはずです。

とりあえず、こう返事をしました。

それから返事をいただき、返事のメールの中にスクリーンキャプチャが入っていて、「こうしたい!」という書き込みがあり、相手が何を求めているのかとてもよく分かりました。 🙂

それから色々と試行錯誤をして、相手の求めている内容とはちょっと違う形で提案してみました。(今回のカテゴリーの作成機能の事)

それで返事に、「良かったらメールに添付した、開発バージョンのプラグインを使ってみてください」と書き、プラグインを一緒に添付して送りました。

返事が届き、

It works well on empty test server.
Does not work when put on live server.

こう書いていました。翻訳内容はおそらく、

まっさらのテストサーバ上では上手く動作します。

ライブサーバ(実際のサーバ)の時は動作しません。

という事だと思います。

 

余談ですが、日本で言う”本番サーバ”のことを、海外(アメリカ&ヨーロッパ系&オーストラリア)の方はよく live server という呼び名をしている事が多く感じます。直訳すると”生きるサーバ”。

 

あ、おそらく上手くアップデート出来なかったのか。アップデートの仕方を教えていなかった。。

このプラグインは、プラグインを有効化した時にデータベース上にテーブルを作成するように作っていたので、おそらく有効化したままプラグインを新しいもので上書きしたものだと考えました。

なので、カテゴリー用のテーブルがlive サーバで作成されず、上手く動作しない。

上手く動作するように、「こういう風にアップデートをお願いします」とご返事し、それから返事をいただくと、

THANK YOU!!!!!!!!!
It is brilliant!!!!!!!!!!!!!!!!!

おぉ、びっくりマークいっぱいです 😯

このびっくりマークの数は今までの記録でダントツです 😎

そんなことはおいといて、上手く動作してくれて良かったです。 😮

これで一件落着と思い、近いうちこのアップデートをしようかなと思いながらメールを読み進めていると、

Send me your paypal account number and I will "buy" your plugin.

ん?

私はあなたのプラグインを”買う”のであなたのPaypalアカウント番号を送ってください。

んん?これは全く予想外でした。本当ですか?まさかぁ~ 😉

と思いつつも、本当だったら嬉しいな 😀

そんな気分で、Paypalの情報を送りました。すると…。

I have sent you £50.00 by paypal as this is so useful to me.

またまた~そういう人よくいるんですよ~。 😎

あ、でも will が書かれていない。(will = ~する予定)

と思ったらすぐにPaypalからもメールがあり、本当に送金されていました。

うそ。はやっ!いや、嘘じゃないほうがいいです。

いやぁ、とても嬉しいです! 🙂

初めて見た、この単位は何なんでしょう?ユーロ?50ユーロっていくら?まぁ金額は後から調べればいいや!とにかく、その気持ちがとても嬉しかったです! 😛

 

と、実はここでひとつ、どうしたらよいのか分からない事がありました。それは、

Could you email a simple invoice to me for £50.00

翻訳すると、

私に simple invoice(請求書)をメールで送ってください。

請求書?多分イギリスの方、向けの請求書?

イギリス向けの請求書なんて一度も作ったことが無いので、どのようにしたら良いのか分かりませんでした。 😕

とにかくググりました。。ググればググるほど、色んな情報やサンプルは出ますが、合っているかが分かりません。(インターネットのはがゆいと感じる所) 😐

まいったな~

OpenOfficeでそれっぽく作ってみたけど、これでいいのかな~

分からないから一度送ってみて、間違いや不足している部分は指摘してもらおうかな~ 😕

 

ん?待てよ?

Paypalって決済システム的なものだから、請求書も送ることが出来るんじゃないだろうか?

調べてみると、あっさり。ありました。このググった時間は一体何なんだ 😳

それからPaypal経由で請求書を送ることができ、これでひとまず安心。メールで「この請求書で不足や問題があればご連絡お願いします。」と付け加えました。

ただ、私なりの問題がひとつ残りました。それは、

この方は、プラグインを“買う”と言ってくれました。
じゃあ今回のこの機能は、アップデートせずにこの方専用の機能としたほうがいいのではないだろうか?

買ったものが、後で無料で公開されたら、買った意味が無いですよね。

でも、この方専用だと、どうやって今後この方のプラグインをアップデートさせようか。。

かなり悩みました。

考えて、考えて、、考えて、、、分かりません。 🙁

なので一つの決断として、買ってくれたこの外国の方に判断してもらおうと考えました。

Do you not want to update this category feature for WordPress.org to CUSTOM OPTIONS PLUS POST IN?
I am thinking of which to update.

かなり英語が間違っている気がします。でも、他に言い方が分かりません。

言いたい事は、

あなたはカテゴリー機能をWordPress.orgのCustom Options Plus Post Inにアップデートして欲しくないですか?

私はアップデートしようか考えています。

という感じです。

 

そしてその返事は、

I don't understand your other comment.

おふっ。そうでしたか。。理解出来なかったんですね。英語頑張ります。。 😳

ただ続きがあり、

But I think you are asking should you update your plugin with these changes.
I think you should.

翻訳はおそらく、

しかし、私はあなた(gqevu6bsiz)がこの変更をアップデートして良いかどうか尋ねていると考えました。

私はすべきだと考えます。

という意味だと解釈しました。多分、私の言いたい事が理解していただけたと思います。

 

と、このカテゴリー作成の機能を追加する迄に実はこのような流れがありました。

この方からも良い返事をいただいたので、そのままカテゴリー作成の機能を追加する事にしました。

 

開発支援となり、励みとなり、このような方達には本当に感謝です!ありがとう! 😛

 

 

Google Chrome のXSS仕様にはまる。

このページは、WordPressのプラグインを作成している方や、テーマ内のfunctions.phpより独自の設定管理を設けている方には参考になるのではないかと思っています。

もしかしたら私だけの影響かもしれませんが。

(その際はコメントフォームに何か一言言ってもらえると嬉しいです 🙂 )

もし試してみたいという方は、下記よりお試し下さい。
(ブラウザの影響と私は仮定しています。なのでブラウザが更新されて仕様が変わった場合は、別の動作になるのかもしれません。この現象はこの記事を書いている 2013年8月ごろの、とても暑い日が続く日の事です 😳 )

 

いきさつ

かなりの時間。はまりました。

とあるバグを報告してくれた方から、「あなたのプラグインでこの部分が設定できないよ。他は動くんだけどねとご報告がありました。

他は動く…?

ということは、動かない部分の記述や分岐が間違っていたりフックするタイミングや処理が間違っていたりするだろうな。と想定していました。

なので、そのような考えのもとで原因を探していました。

でもどれだけ試しても、バグの報告をしてくれた方と同じような状況にならず、想定通りの動作をしました。

う~ん、どうしたもんだろう。。とそういえば、以前動画ファイルでバグの症状を報告してくれた方がいました。

その方の動画を参考に、どのようなプラグインをインストールしているのかを調べ、できる限り同じような環境を作りました。

それで初めて、バグの症状が分かりました。

一言で言えば他プラグインの影響。と言ってしまえばそれまでですが。

しかし、有名なJetpackプラグインを使用している時、または WooCommerce Admin Bar Addition を使用している時のバグでした。
(どちらもプラグイン側のバグではありません)
 

で、色々と調べてみると

どうも、<form>タグ関係の場合だけ、バグが出るという症状でした。

どんどん調べていくと、結論としては、Google ChromeのXSS対策の仕様?と判断しました。 😳
正確にはプラグインの影響ではなく、そのプラグインの影響を可能にした場合の<form>タグ関連の影響でした。
(WordPressを一切使わず、シンプルなHTMLだけの場合でも試してみました)

これはプラグインうんぬんではなく、様々な場合に影響があると思っています。
「投稿」「固定ページ」等も含まれます。でも公開はできますが)

この症状を試してみたい方は以下をお試しください。

 

はじめに用意

試す方法として、まず用意するものが独自の設定画面。

できる限り他の影響を受けないようにする為にシンプルな設定にします。
テーマもプラグインも、WordPressをインストールしたばかりのデフォルトの状態が理想的です。

今回は簡単な設定ページを用意します。

まず設定ページを作成する為に、以下のコードをfunctions.phpなり、追記してください。

function ex_xss_menu() {
  add_menu_page( 'Example Xss' , 'Example Xss' , 'administrator' , 'ex_xss' , 'ex_xss_page' );
}
add_action( 'admin_menu' , 'ex_xss_menu' );

そして管理画面を読み込むと、設定の下のほうに「Example Xss」というメニューが追加されていると思います。(今はそのメニューをクリックしてもエラーが表示されます。まだメニューしか作成していないので。)

 

メニュー設置
メニュー設置

 

次にExample Xssの設定ページ作成用のコードです。先ほどのコードのところに追記してください。

function ex_xss_page() {
  if( !empty( $_POST["ex_text"] ) ) {
    update_option( "ex_text" , stripslashes( $_POST["ex_text"] ) );
  }
  if( !empty( $_POST["ex_area"] ) ) {
    update_option( "ex_area" , stripslashes( $_POST["ex_area"] ) );
  }

  echo '<div class="wrap">';
  echo '<h2>Example XSS Test</h2>';
  echo '<form action="" method="post">';

  echo sprintf( '<p>Input: <input name="ex_text" value="%s" style="width: 300px;" /></p>' , get_option( 'ex_text' ) );
  echo sprintf( '<p>Textarea: <textarea name="ex_area" rows="5" cols="10" style="width: 300px;">%s</textarea></p>' , get_option( 'ex_area' ) );
  echo sprintf( '<p class="submit"><input type="submit" value="%s" class="button button-primary" /></p>' , __( 'Submit' ) );

  echo '</form>';
  echo '</div>';
}

 

これでメニューをクリックすると、シンプルな設定ページが出来上がります。

設定ページ
設定ページ

 

あ、ここは重要です。

Google Chromeのコンソールを表示させておいてください。(キーボードのF12を押す)

コンソール表示
コンソール表示

コンソールで既にエラーが無いことを確認してください。エラーがある場合はそれなりに対処して、エラーが無い状態にしたほうがテストとしては理想的だと思います。

 

で、ここから。

バグとなってしまう症状を確認していきます。

作成した設定ページにinput text 、textareaの2つのフォームフィールドがあります。
どちらでもかまいませんが、何か、フォームを作成するように<form>タグを入力してください。サンプルとして私は以下のように入力しました。

フォーム入力例
フォーム入力例

で、送信ボタンを押して下さい。すると…なんと。

ちゃんとデータは保存されています。変な期待をした方ごめんなさい。 😳

でも、これは一回目の送信ボタンを押した時(一回目のデータ保存時)の動作です。

 

送信ボタンを押した直後、他のページに移動せずGoogle Chromeのコンソールを確認してみてください。

コンソール画面
コンソール画面

 

先ほどは何もエラーは表示されていませんでしたが、送信ボタンを押した直後にエラーが表示されます。しかし、入力したデータはきちんと保存されています

The XSS Auditor refused to execute a script in 'http://example.com/wp-admin/admin.php?page=ex_xss' because its source code was found within the request. The auditor was enabled as the server sent neither an 'X-XSS-Protection' nor 'Content-Security-Policy' header.

なにやらXSSに関してのエラー?注意?が出ていることが分かると思います。

 

ここが大事です。この状態でもう一度「送信」を押してみて下さい。

 

出ましたか?真っ白な何もない画面。アドレスバーにはabout:blank。 😯

Google Chrome だけ、このような仕様だとは全く予想していませんでした。

 

具体的には

あのコンソールの文章をもとに色々なブログを見て回って、私の個人的な考えですが、辺なコードを埋め込まれないようにする為の、Google ChromeのXSS対策処理ではないかと思います。

あ、Firefoxですか?バンバン保存できます。 :mrgreen:
それが良いのか悪いのかは別ですが。

ただ、もっと具体的にどのようなコードを記述すると、このような仕様になるのかを私なりに調べた結果、ひとつは分かりました。(多分、ひとつではなく複数あると思っています)

ちなみにその記述は、

action="

(アクション イコール ダブルクォーテーション)

調べた結果、フォームタグかどうかは関係が無いようでした。

action=”というような記述が問題の現象を引き起こしているようでした。

試してみたい方は、この記述をどこでもいいので記述してみてください。
「新規投稿」や「固定ページ」でも。あのコンソール文が表示されます。
(テキスト編集の場合です)

ただ、ちょっと面白いというか、これは良いのか? 😕 と思ったのですが、

action=''

このように記述すると、何のエラーも出ません。(全角ではありません)

違いは ダブルクォーテーションシングルクォーテーション か。それだけです。

なんでこんな仕様なんでしょうか。ちょっと分かりません。この記述は安全とみなされるのでしょうか。。ちょっとこの仕様に関しては理解が難しいです。  😕

ただ、やっとバグが出るタイミングがはっきりと分かりました。

この仕様が原因でプラグインの設定データが上手く保存出来ない。
という事に気づくまでに、ものすごく時間を取られました。 😳

 

うん、どう対処しようか。。

ダブルクォーテーションを正規表現の置換で強制にシングルクォーテーションに書き換えようか。または「Google chrome、今のところ上手く動きません」と表示させようか。(これは最終案…)

 

解決方法として

私なりに色々と調べた結果、X-XSS-Protection というヘッダーの値を 0 として出力するという事でした。
おそらく、「お願いだからXSSのフィルターチェックしないでね!」というサーバからの意思表示的な意味合いだと私は考えています。

先ほどのエラー文にはこう書いています。

The auditor was enabled as the server sent neither an 'X-XSS-Protection' nor 'Content-Security-Policy' header.

翻訳内容はおそらく、

サーバ管理者(auditor)は’X-XSS-Protection’ または ‘Content-Security-Policy’ヘッダーのどちらかをサーバから送信することができます。

このような意味だと解釈しました。どちらのヘッダーでも良さそうだったので、とりあえず今回は X-XSS-Protection ヘッダーを送信することにしました。両方送信したらどうなるんだろう?

 

じゃあこれをどのタイミングで出力すればいいんだろうと思って色々情報探してみました。

https://gist.github.com/ocean90/3622298

あ、wp_headers なるフックがあるんですね。今回はこの作者のコードをパクって参考に試してみます。 😉

function ex_xss_add_header( $headers, $object ) {
  $headers['X-XSS-Protection'] = 0;
  return $headers;
}
add_filter( 'wp_headers', 'ex_xss_add_header', 10, 2 );

これで無事、action=”を入力しても動作するようになりました。

 

※このコードを使おうと考えた方へ

このままの状態では注意が必要です。

このままだと、アクセスしたページ全てのヘッダーで’X-XSS-Protection’が出力されるので、事前に何かしら条件分岐の処理(管理画面のこの設定画面のこのデータが送信された時等)をしたほうが安全の為に良いと思います。