
備忘録 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;
}
}
});