WordPressで過去に投稿した記事の一覧を期間指定してCSVでダウンロードしたい、ウェブサイトを運営しているとそんな要望も出てきます。
しかしプラグインで実現しようとすると大がかりなものが多いですし、これだけの機能のためにセキュリティリスクを高めたくないという場合には独自実装が可能です。
実装は簡単、下記に記述するファイルを、https://サイトドメイン/wp-content/themes/テーマ名 の下に置いてアクセスするだけです。
ぜひ試してみてくださいね!
page-download.php
<?php
require_once '../../../wp-load.php';
// 完了画面
if($_POST):
header("Content-Type: application/octet-stream");
header("Content-disposition: attachment; filename=download.csv");
$begin = str_replace('-', '/', $_POST['begin-date']);
$end = str_replace('-', '/', $_POST['end-date']);
$csv = "日付,タイトル,ページURL,サムネイルURL\n";
$ajax_query = new WP_Query(
array(
'post_type' => 'post',
'date_query' => array(
/* 集計開始 */
array(
'inclusive' => true,
'after' => $begin
),
/* 集計終了 */
array(
'inclusive' => true,
'before' => $end
)
),
'posts_per_page' => -1
)
);
if ( $ajax_query->have_posts() ) :
while ( $ajax_query->have_posts() ) :
$ajax_query->the_post();
$thumbnail = get_the_post_thumbnail_url( get_the_ID(), 'full' );
$url = get_permalink();
$title = get_the_title();
$date = get_the_date('Y.m.d');
$csv .= $date . "," . $title . ",". $url . "," . $thumbnail . "\n";
endwhile;
echo mb_convert_encoding($csv, "SJIS", "UTF-8");
endif;
wp_reset_postdata();
endif;
?>
<?php if(!$_POST): ?>
<html>
<head>
<meta name="robots" content="noindex, nofollow">
</head>
<body>
<form action="https://サイトドメイン/wp-content/themes/テーマ名/page-download.php" method="post">
<p>
<input type="date" name="begin-date" value="集計開始日">
~
<input type="date" name="end-date" value="集計終了日">
</p>
<p>
<input type="submit" value="ダウンロード">
</p>
</form>
</body>
</html>
<?php endif; ?>