WordPress FlamingoのCSVエクスポートでヘッダーをラベル名に変更する方法

WordPressのコンタクトフォームプラグイン「Contact Form 7」の受信データを保存するために「Flamingo」を使っている方も多いでしょう。

FlamingoのCSVエクスポート機能を利用すると、デフォルトではCSVのヘッダー行にname属性の値が表示されます。しかし、name名ではなく、より分かりやすい「ラベル名」を表示したい場合があります。

そこで、今回は functions.php にコードを追加することで、CSVエクスポート時のヘッダーをラベル名に変更する方法を解説します。

実装方法

以下のコードを functions.php に追加してください。

/***********************************************************
 * FlamingoのCSVエクスポートでヘッダーをラベル名に変更する
 ***********************************************************/

add_filter('flamingo_inbound_csv_class', function ($csv_class) {
  // クラスが存在する場合は常にカスタムクラスを返す
  if (class_exists('Flamingo_Inbound_CSV')) {
    return 'Custom_Flamingo_Inbound_CSV';
  }
  return $csv_class;
});

// 親クラスが存在する場合のみカスタムクラスを定義
if (class_exists('Flamingo_Inbound_CSV')) {

  // カスタムCSVクラスを作成
  class Custom_Flamingo_Inbound_CSV extends Flamingo_Inbound_CSV
  {
    public function print_data()
    {
      $args = array(
        'posts_per_page' => -1,
        'orderby' => 'date',
        'order' => 'DESC',
      );

      // 検索条件の適用(必要に応じて変更)
      if (!empty($_REQUEST['s'])) {
        $args['s'] = $_REQUEST['s'];
      }

      $items = Flamingo_Inbound_Message::find($args);

      if (empty($items)) {
        return;
      }

      $labels = array_keys($items[0]->fields);

      // フィールド名とラベル名のマッピング
      $field_labels = array(
        'your-name'    => 'お名前',
        'your-email'   => 'メールアドレス',
        'your-subject' => '件名',
        'your-message' => 'メッセージ内容'
        // 必要に応じて追加
      );

      // ラベル名を適用
      $custom_labels = array();
      foreach ($labels as $label) {
        $custom_labels[] = isset($field_labels[$label]) ? $field_labels[$label] : $label;
      }

      // ヘッダー行を出力
      echo flamingo_csv_row(
        array_merge($custom_labels, array(__('Date', 'flamingo')))
      );

      // データ行を出力
      foreach ($items as $item) {
        echo "\r\n";
        $row = array();

        foreach ($labels as $label) {
          $col = isset($item->fields[$label]) ? $item->fields[$label] : '';

          if (is_array($col)) {
            $col = flamingo_array_flatten($col);
            $col = array_filter(array_map('trim', $col));
            $col = implode(', ', $col);
          }

          $row[] = $col;
        }

        $row[] = get_post_time('c', false, $item->id()); // Date
        echo flamingo_csv_row($row);
      }
    }
  }

  // フィルターフックでカスタムCSVクラスを適用
  add_filter('flamingo_inbound_csv_class', function ($csv_class) {
    return 'Custom_Flamingo_Inbound_CSV';
  });
}

コードのポイント解説

  1. カスタムクラスの適用
    • flamingo_inbound_csv_class フィルターを利用して Custom_Flamingo_Inbound_CSV クラスを適用します。
  2. フィールド名とラベルのマッピング
    • your-nameお名前
    • your-emailメールアドレス
    • your-subject件名
    • your-messageメッセージ内容
    • 必要に応じて追加・編集可能です。
  3. ヘッダーの変更
    • flamingo_csv_row() を使ってラベル名をCSVのヘッダーに出力。
  4. データ行の出力
    • フィールドが配列の場合、カンマ区切りで結合。
    • 送信日時を get_post_time('c', false, $item->id()) で取得。

まとめ

このカスタマイズを行うことで、FlamingoのCSVエクスポート時にヘッダー行を name 属性ではなく、分かりやすい「ラベル名」に変更できます。

メリット

  • CSVを開いたときに分かりやすいフォーマットになる
  • フォームの name 属性ではなく、実際の項目名を表示できる
  • functions.php に追加するだけで簡単に導入可能

Flamingoを活用している方は、ぜひ試してみてください!