WordPressにはシリアル化してDBなどにデータを保存できます。
シリアル化とは、「a:」、「i:」、「s:」などの表示形式を使って、データを配列のように格納する方法です。
シリアル化を使えば、複数のデータを1レコードにしてDB保存ができるのでDBアクセスを減らすことができます。
WordPressのシリアル化の使い方を紹介します。
シリアル化で使うWordPress関数
下記の2つの関数を使って、シリアル化とアンシリアル化(シリアル化したものを戻す)ができます。
関数 | 内容 |
maybe_serialize | 渡した配列をシリアル化してreturnします。 |
maybe_unserialize | シリアル化されたものを配列にしてreturnします。 |
※maybe_serializeに渡せるデータは、配列だけではなく変数でもOKですが、変数をシリアル化する意味はあまりないです。
シリアル化したデータは下記のような表示になります。
このままでは意味がわからないので、アンシリアル化で元に戻して処理します。
maybe_serializeを使ってデータをシリアル化する方法
maybe_serializeを使ってデータをシリアル化して、wp_optionsテーブルにシリアル化データを保存する時のサンプルコードを紹介します。
- データを配列に格納する
- 配列をシリアル化する
- wp_optionsテーブルに保存する
//配列にデータを格納 $update[] = $data1; $update[] = $data2; $update[] = $data3; $update[] = $data4; //配列をシリアル化 $update_serialize = maybe_serialize( $update ); //シリアル化データをwp_optionsテーブルに保存 update_option('my_data', $update_serialize );
シリアル化することで、my_data1、my_data2・・・といった複数レコードをwp_optionsテーブルに追加しなくてよくなります。
maybe_unserializeを使ってデータをアンシリアル化する方法
wp_optionsテーブルに保存してあるシリアル化データを取得して、maybe_unserializeを使ってアンシリアル化するサンプルコードを紹介します。
- wp_optionsテーブルからデータを取得する
- データをアンシリアル化して配列に格納する
- foreachなどでデータをチェックする
//シリアル化データをwp_optionsテーブルから取得 $get_data = get_option( 'my_update' ); //データをアンシリアル化 $data_unserialize = maybe_unserialize( $get_data ); //配列として処理 foreach ($data_unserialize as $value) { //処理 }
シリアル化したデータから一部を削除したい
シリアル化したデータから一部を削除したい場合は、配列に変換してから処理するしかありません。
//$get_dataはシリアル化した状態DB保存されている //wp_optionsテーブルからデータ取得 $get_data = get_option( 'my_data' ); //アンシリアル化 $data_unserialize = maybe_unserialize( $get_data ); //$dataに削除したいデータ(値を指定) //配列のキーが分かっているならunsetでもOK $result_data = array_diff($data_unserialize, array($data)); //キーが歯抜け状態なのでトリミング $new_data = array_values($result_data); //シリアル化 $data_serialize = maybe_serialize( $new_data ); //wp_optionsテーブルに保存 update_option( 'my_data', $data_serialize );
シリアル化したデータにデータを追加したい場合
シリアル化したデータに、データを追加したい場合は、同じく配列に変換してから処理が必要です。
//$get_dataはシリアル化した状態DB保存されている //wp_optionsテーブルからデータ取得 $get_data = get_option( 'my_data' ); //アンシリアル化 $data_unserialize = maybe_unserialize( $get_data ); //後方に追加 $data_unserialize[] = $add_data; //配列にデータが重複しないようにユニークチェックもできます。 $new_data = array_unique($data_unserialize); //シリアル化 $data_serialize = maybe_serialize( $new_data ); //wp_optionsテーブルに保存 update_option( 'my_data', $data_serialize );
【まとめ】WordPressのシリアル化を使う方法
WordPressのシリアル化は、更新頻度が少ないけど、データが多めのものを一つにまとめて保存する時に便利です。
シリアル化してデータを保存すれば、DBアクセスを減らすことができます。