スポンサーリンク

【Advanced Custom Fields】カンマ区切りの文字列を配列に変換してDBに保存する方法

プラグイン
たろ
たろ

テキストに入力したカンマ区切りの文字列を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 を使うことで値の更新時、データベースに保存される前に値に変更を加えることができます。

カンマ区切りの配列への変換は PHPexplode() 関数を使っています。

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);

フィルターにはタイプやフィールド名、キーを指定できます。

詳しくは公式サイトを参照してください。

このままでは配列に変換された値がDBに保存されるため、その値を管理画面では表示することになります。そこで、管理画面に表示する時は配列からカンマ区切りの文字列に戻してあげる必要があります。

配列からカンマ区切りの文字列に変換する方法

下記のコードを 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_valueload_value に気がつくまでに少し時間がかかったのでこの記事が役に立てば幸いです。

コメント

タイトルとURLをコピーしました