Custom Options Plus Post In バージョンアップ

 

このたび、CUSTOM OPTIONS PLUS POST IN のバージョンアップをおこないました。

最新バージョンは、1.2となります。
主にデータベース周りの格納方法の更新を行いました。

 

一度シリアライズしたデータを格納、取り出す際はシリアライズし、
ひとつのデータを取り出す形式について、おそらく処理を指摘されていたので変更しました。

 

今まで

wp_options 内に、キー coppi として格納

coppi1.2以前の格納方法
coppi1.2以前の格納方法

 

現在

テーブルを用意した格納方法

 

coppiテーブル
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/

コメントを残す