SEOノウハウ・副業ブログ・ワードプレス

WordPressのシリアル化の使い方【maybe_serializeとmaybe_unserialize】

WordPressにはシリアル化してDBなどにデータを保存できます。

シリアル化とは、「a:」、「i:」、「s:」などの表示形式を使って、データを配列のように格納する方法です。

シリアル化を使えば、複数のデータを1レコードにしてDB保存ができるのでDBアクセスを減らすことができます。

WordPressのシリアル化の使い方を紹介します。

シリアル化で使うWordPress関数

下記の2つの関数を使って、シリアル化とアンシリアル化(シリアル化したものを戻す)ができます。

関数 内容
maybe_serialize 渡した配列をシリアル化してreturnします。
maybe_unserialize シリアル化されたものを配列にしてreturnします。

※maybe_serializeに渡せるデータは、配列だけではなく変数でもOKですが、変数をシリアル化する意味はあまりないです。

シリアル化したデータは下記のような表示になります。

a:2:{i:1;s:12:"Hello World!";s:3:"foo";s:3:"bar";}

このままでは意味がわからないので、アンシリアル化で元に戻して処理します。

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アクセスを減らすことができます。

  • B!