【WordPress】指定期間に投稿された記事一覧をCSV出力する実装

下記のように記述したテンプレートファイルを作りましょう。

<?php
require_once '../../../wp-load.php';

/* CSV出力 */
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"); // CSV出力

  endif;
  wp_reset_postdata();

endif;
?>

<?php if(!$_POST): ?>
<html>
<head></head>
<body>

<h1>投稿記事集計</h1>

<form action="" 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>

<?php endif; ?>