テキストに入力したカンマ区切りの文字列をDBに保存したときに配列にしたい!!
こんな悩みを解決します。
- カンマ区切りの文字列を配列に変換する方法
- 配列に変換後、「my_acf_update_value」を使ってDBに保存する方法
- 配列からカンマ区切りの文字列に戻す方法(管理画面に表示するため)
大量のデータを扱う時はカンマ区切りの文字列をそのまま使いたいときがありますよね。
その大量のデータをDBにはカンマ区切りのままではなく配列にして格納しておきたいいう方にこの記事は最適です。
環境
- WordPress
- プラグイン:カスタムフィールド
カンマ区切りの文字列を配列に変換
例えば下記のようなカンマ区切りの文字列をカスタムフィールドのタイプ「テキスト」で保存をしてみます。
1,2,3,4,56,7888
DBには入力された文字列がそのまま保存がされます。
WP_Queryなどを使ってこの値を参照するときは、値が配列になっていないため 1,2,3,4,56,7888 を全ての文字列と認識してしまいフィルターに活用することができません。
やりたいことはカンマ区切りの文字列を配列に変換することです。
カスタムフィールドの関数を使って解決できたので下記に紹介します。
入力された文字列を変換しデータベースに保存する
下記のコードを functions.php に書きます。
カスタムフィールドのフィルター update_value を使うことで値の更新時、データベースに保存される前に値に変更を加えることができます。
カンマ区切りの配列への変換は PHP の explode() 関数を使っています。
function my_acf_update_value( $value, $post_id, $field ) {
if( is_string($value) ) {
$value = explode(',', $value);
}
return $value;
}
add_filter('acf/update_value', 'my_acf_update_value', 10, 3);
フィルターにはタイプやフィールド名、キーを指定できます。
詳しくは公式サイトを参照してください。
配列からカンマ区切りの文字列に変換する方法
下記のコードを functions.php に書きます。
カスタムフィールドのフィルター load_value を使うことで読み込み時の値をいじることができます。
配列からカンマ区切りの文字列への変換は PHP の implode() 関数を使っています。
function my_acf_load_value( $value, $post_id, $field ) {
if( is_array($value) ) {
$value = implode(',', $value);
}
return $value;
}
add_filter('acf/load_value', 'my_acf_load_value', 10, 3);
おわりに
DBに値を保存する時は update_value を使います。
DBから管理画面に表示をするときは load_value を使いましょう。
やっていることはすごく単純ですが update_value と load_value に気がつくまでに少し時間がかかったのでこの記事が役に立てば幸いです。