このたび、CUSTOM OPTIONS PLUS POST IN のバージョンアップをおこないました。
最新バージョンは、1.2となります。
主にデータベース周りの格納方法の更新を行いました。
一度シリアライズしたデータを格納、取り出す際はシリアライズし、
ひとつのデータを取り出す形式について、おそらく処理を指摘されていたので変更しました。
今まで
wp_options 内に、キー coppi として格納
現在
テーブルを用意した格納方法
update_option 及び get_optionを使わずに、テーブルを用意するので、そもそも、
どうやってやるんだろう。。と色々思考錯誤しましたが、下記の記事に感謝です。
■Creating_Tables_with_Plugins
http://codex.wordpress.org/Creating_Tables_with_Plugins
■ WordPressでデータベースを使ったプラグインを作成する
http://takahashifumiki.com/web/programing/1440/
テーブルを用意することでのメリットは、まずは ソート がかなり楽になりました。
今まではget_option全データをとにかく取得し、指定されたソートの順序になるようarray_multisortを行っていたのですが、sqlクエリとして投げるだけなので、返ってきたデータがソート済み。
次に、一つのデータを取り出すのも楽になりました。
プラグインが有効化された際に、テーブルを作成し、元のデータを取得しそこに複製された時は、
おぉーってなりましたねw
ただ、sqlクエリを直接書くことになるので、脆弱性が気になります。
(sqlに限った事じゃないですが)
試していて、よく分からなかった 「$wpdb->prepare」。
wordpress 3.4.2 のバージョンでテスト動作を繰り替えし、動作確認をして、
いざ wordpress 3.5 で動作をすると、
Warning: Missing argument 2 for wpdb::prepare()
が連発。んん??どういうエラーなんだろうと色々とぐぐってみました。
$wpdb->prepare() 自体の動作は、SQL インジェクション攻撃からクエリを保護する によると、
クエリを保護するためにエスケープするためのもの。らしいのですが、こんな記事もありました。
Warning: Missing argument 2 for wpdb::prepare()は危険!
正しい使い方をしないと、危ないよ。という事らしいです。
3.4ではエラーも出ないのか。。そもそも使い方を間違っていたと。
この記事の下のほうまで読んでいくと、akismetプラグインの場合の記述リンクがあったので見てみると、
$remaining = $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->commentmeta WHERE meta_key = 'akismet_error'" ) );
が
$remaining = $wpdb->get_var( "SELECT COUNT(*) FROM $wpdb->commentmeta WHERE meta_key = 'akismet_error'" );
こうなっていました。
$wpdb->prepare を外したんですね。
今回はakismetプラグインを参考にして、$wpdb->prepare を外すと動作OK。3.4.2で試しもてもOK。
とりあえず、今回はこれでよしとして、アップデートしました。
こういう面を色々と考えると、難しいです。
出来る限り、使えるテーブルは使ったほうが、ありがたい。のかも。
ダウンロードはこちら http://wordpress.org/extend/plugins/custom-options-plus-post-in/
コメントを残す