Plains フリーランス フロントエンドエンジニア

備忘録 2019.11.25

WordPressの投稿データを整形したCSVでダウンロード・予備情報

メールフォームの入力内容を非公開のカスタム投稿として保存し、ダッシュボードで保存されたデータを整形したCSVでダウンロードする方法を模索中です。

もちろんメールフォームはプラグインなどではとても対応できない自作のハイパーカスタムフォームです。

最近この手の要望が多いです。皆さん余程パソコンを触るのがお嫌いなようで、データ管理に出来るだけ手間を掛けたくないそうです。

任意のタイミングで投稿を保存

// 投稿オブジェクトを作成
$my_post = array(
  'post_title'    => 'My post',
  'post_content'  => 'This is my post.',
  'post_status'   => 'publish',
  'post_author'   => 1,
  'post_category' => array(8,39)
);

// 投稿をデータベースへ追加
wp_insert_post( $my_post );

ダッシュボードからCSVを作成してダウンロード

add_action('init', function () {
  if ( is_admin() && ($_REQUEST['page']??'')=='{menu_slug}' && ($_REQUEST['cmd']??'')=='download' ) {
    $row;
    if ( empty($row) ) return;
    $filepath = sprintf('%s.csv', date('YmdHis'));
    if ( touch($filepath) ) {
      $file = new SplFileObject($filepath, "w");
      $file->fputcsv([
        _s('タイトル'),
        _s('作成日'),
      ]);
      foreach ($row as $r) {
        $file->fputcsv([
          _s($r['post_title']),
          $r['created'],
        ]);
      }
      @header("Pragma: public");
      @header("Expires: 0");
      @header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
      @header("Cache-Control: private", false);
      @header("Content-Type: application/force-download");
      @header("Content-Disposition: attachment; filename=\"".basename($filepath)."\";" );
      @header("Content-Transfer-Encoding: binary");
      @readfile($filepath);
      unlink($filepath);
      die;
    }
  }
});
Go to Top