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’が出力されるので、事前に何かしら条件分岐の処理(管理画面のこの設定画面のこのデータが送信された時等)をしたほうが安全の為に良いと思います。

 

 

Most Plugin Version up for on SSL

いやー、最近かなりバグの報告をいただいていて、なかなかブログの更新ができませんでした。

とにかく相手の症状を理解し、原因探し、解決策考え…。

なんとか最近落ち着きました。いやー、疲れました。
外国の方はあまりWordPress.orgのサポートフォーラムは使わないのでしょうか。。直接のメールの問い合わせが多かったです。

(2~5件/1日、でも英語での問い合わせはかなり大変)

今回もほぼすべてのプラグインをアップデートしました。

 

一部のプラグインは機能追加を加えたりしています。

あと、全てWordPress 3.6 にて動作確認済みです。

 

更新するまでの経緯

ユーザーから寄せられるバグの症状をひとつひとつ見ていっても、なかなか”これだ”という原因が見つからず、よくある「他のプラグインの影響じゃないだろうか」という事を想定して原因を探っていました。

ただここで、症状を報告した方が色々試した結果「あなたのプラグインを使用している場合だけこういう症状が出ます」と調べていただたいた場合はありがたいです。

●●●のプラグインを一緒に使うとバグがありました~とか(バグではないですが)、使っていてこういうバグが出ますよーと教えてくれる場合は、なんとか改善の方法を検討をする事ができますが、「ヘイ、どうなってんだよ。動かないじゃないか」みたいな報告の場合、かなり厳しいです。

どうなっているのか調べたいけど、「動かない」とだけ言われても分からない。
分かるなら、直してますよ~。。 🙁

(そんなことはおいといて)

 

ただ今回、ひつとだけ、いつもと違うバグ報告をいただきました。

そのバグの原因を探る為に、プラグインの影響やテーマ、WordPressのバージョンやPHPの設定等をもとに原因を探っていたのですが、全く見当外れな所でした。。 😳

 

ちなみに、私は英語が得意ではありませんので、バグ報告をいただいた際に、「ごめんなさい、キャプチャを送っていただけませんか?」とお願いすることが時々あります。(というより、最近は画面を見せたほうがスムーズに解決すると感じています)

その際、「自分の画面はなるべく見せたくない」という方が多いと思います。
(特に管理画面に関しては)

なので、プラグインの設定画面”だけ”送ってもらう場合が多いので、その部分だけで原因がどこにあるのかを考えていました。。

これが、原因を探すことができない原因でした。。 😳
どんなに調べても、原因不明。

次に、バグ報告をいただいた方の中に、どでかい画面キャプチャを送っていただけた方がいました。
(操作している画面を動画で送ってくれた方もいました。これは非常に助かりました。  🙂  )

そして、キャプチャと同じように設定したりしてみましたが、相変わらず。。
プラグインの設定画面に原因があると思いひたすら探っていましたが、やはり見つからず。

う~ん。分からない。(こういう時はノートPCを( ̄  ̄ )ノ⌒)

一息ついて、ふと、キャプチャを再度よく見てみると、アドレスバーにhttps
SSLでの管理画面への接続でした。

あ、確かにSSL環境での動作確認はしていなかったな~。でも、SSLでも使えるとは思うけどな。

とりあえず確かめてみないと分からないものは分からない。という事でxampp内のOpenSSLを利用して試してみました。

そして、やっと原因が分かりました。

 

 

SSLの場合だけ上手く動作しなかった

不正確ですが、一言で言うならこんな感じのバグです。

少しだけ正確に言うと、プラグインでJavascriptを読み込むように設定しています。

そのJavascriptでjQueryのSortableやDropable等を設定しているので、データが変化します。最終的にユーザーが保存するデータは、ソート後のデータです。

そしてそのソートを行う為には、その処理を記述しているJavascriptファイルが読み込み出来なければ、もちろんソートすらも出来ません。

そしてSSLの場合だけそのJavascriptファイルが読み込まれない、というバグでした。

ただ、よく分からないのが何故SSLの環境だけ?と思いました。

以前からSSLの環境でプラグインを使っている方はおそらくいると思うのですが、なぜ今になってそんなバグ…?ユーザーが増えてきたから?

と色々考えても仕方ないので、実際に試してみたら…動きました…。SSLでも。  😕

う~ん、やっぱりSSLでも動くよね。。

その後も色々試行錯誤&バグ報告くれた方と色々とやりとりをしていて、やっと分かりました。

正確に言うと、「管理画面へのアクセスはSSL、フロントへは通常のhttp」。

「アクセス」。なるほど。気づきませんでした。 🙄

 

今回の方はおそらくですが、「サイトのURL(home)及びWordPressのURL(siteurl)httpでも管理画面にアクセスするときだけはhttps」という環境で使っているのではないかと考えました。

 

SSLで試すという事で、私のほうでは動作確認の為に、WordPressのインストールからサイト及び管理画面の閲覧まで全てhttpsの環境で全て試していました。

おそらくこのバグ報告をくれた方は、インストール時はhttpでインストールしたのか、または途中でhttpに変更したのか。等をおこなったのではないかと思います。

何をしたのかはおいといて、そのような環境を想定して試してみることに。

そりゃ、いくらget_option(‘siteurl’)とかを使って、CSSファイルやJavascriptファイルを読み込もうとしても、アクセスしているプロトコルはhttpsだったら読み込めないよね。 😎

 

で、私の場合プラグインディレクトリ内のCSSやJavascriptファイルを読み込む際に、

WP_PLUGIN_URL . '/' . dirname( plugin_basename( __FILE__ ) ) . '/'

という風にプラグインディレクトリのURLパスを取得していました。

この  WP_PLUGIN_URL が https:// で管理画面にアクセスした場合、https://にならずにhttp://のままでした。

get_option('siteurl') . '/wp-content' . '/plugins'

このように取得・設定している為です。

get_option(‘siteurl’)では、いくらhttpsでアクセスしても、一般設定にて設定されているhttpでのURLを取得するのでダメでした。

 

ただ私は詳しくは分かりませんが、分かることとしては、Google Chromeの場合、https:// で呼ばれる画面から http:// のファイルにアクセスさせない仕組みのような感じでした。(具体的には何の影響でそうなるのかは分かりません。セキュリティ的な意味合いな気はしますが)

なので、全プラグイン、WP_PLUGIN_URL は使わず、

plugin_dir_url(__FILE__)

これにしました。

これだと、set_url_scheme が間に入って、WP_PLUGIN_URLで取得したアドレスに対してhttpやhttpsも書き換えてくれるような感じでした。というか、こっちで動くならこっちのほうがいいですね。シンプル。 😮

(なんか、WordPressのデバッグ機能を有効にしたら「この関数よりこっちの関数のほうがいいですよ」みたいな表示を出してくれたら嬉しいな。。便利な関数があったとしても、存在が分かりません。。) 

 

で、これで試してもらうと無事動作したようでした。

今回のケースはたまたまどでかいキャプチャと、動画ファイルをいただけたのでなんとか解決までに至りました。

めでたしめでたし  🙂

Most Plugin Nonces Version UP

今回、ほぼすべてのプラグインのバージョンアップをおこないました。

 

更新するまでの経緯

とあるアメリカ?の方からWordPress.orgのサポートフォーラム経由で「あなたにプラグインのバージョンアップ版をあげます。」と、今までにない、不思議な問い合わせ?プレゼント?がありました。

怪しいな。 😈

とりあえず、そんな気持ちはおいといて。バージョンアップ版を確認してみることにしました。

確認してみると、確かに今のプラグインに導入したほうが機能性は良くなりそうでした。

なんていい方なんでしょう! 🙂

すぐに導入させてもらいました。

 

すると、「あなたのプラグインにNoncesを導入したほうがイイヨ!」とご返事がありました。

Nonces? 全く聞いたことの無い言葉でした。何かの注意表示のこと?

プラグインの使い方について、注意を表示したほうがいいという事かな??

 

う~ん。。分かりません。 😕

こういう時は素直に「分かりません」と言う事にしています。 返事いただけたら嬉しいですが。 🙁

で、その後返事が来ました。 😮

そのNoncesはというと、

http://codex.wordpress.org/Glossary#Nonce

http://markjaquith.wordpress.com/2006/06/02/wordpress-203-nonces/

WordPress Nonces

セキュリティに関する事のようでした。(正直、長文の英語のほうはあまり理解できていません。英語力不足…。 😆 )

今回、問い合わせのあった方の意見として「あなたのプラグインにXSS攻撃から保護する仕組みを導入したほうが良い」という意見だと解釈しました。

WordPressってそんな仕組みがあったんですね。

というか、私のプラグイン、XSSから保護されていなかったんですね。。これはすぐに対応しなきゃ。。 😳

 

 

やったこと

今回はセキュリティに関する事でしたので、ほぼすべてのプラグインを更新しました。

プラグイン設定フォーム内に

wp_nonce_field()

を追記。

フォームデータの更新直前に、

check_admin_referer()

にて、wp_nonce_field()にて設定されたワンタイムトークンのチェック。

 

あとはAjax経由でデータを取得しているプラグインには、Ajaxでデータを取得する際にワンタイムトークンのチェック確認を入れました。

既に利用されている方は出来るだけ最新バージョンを使用してください。

 

wordpress plugin Archive Posts Sort Customize Version UP 1.2

WordPressの一覧画面のカスタマイズをするプラグイン、

Archive Posts Sort Customize

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

最新バージョンは1.2。

 

やったこと

今までは「ホーム」「カテゴリ一覧」「タグ一覧」の3種類のみが、記事一覧ソートカスタマイズの対象でしたが、コメントからご提案ありました「検索結果」のソートのカスタマイズに対応しました。

「検索キーワード」プラス、「指定項目の昇順or降順」といった記事一覧の表示ができるようになります。

Search Archive menu
Search Archive menu

 

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

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