【WordPress】指定した期間で記事を取得する方法

WordPress

WordPressで「○○年の記事一覧を取得」などをしたいときのコードです。

基本コード

処理内にベタで書く用のコードです。

$startDate = '2023-01-01 00:00:00';
$endDate = '2023-12-31 23:59:59';

$args = [
    'post_type'      => 'post', // 投稿タイプを指定
    'date_query'     => [
        [
            'after'     => $startDate,
            'before'    => $endDate,
            'inclusive' => true, // 範囲の開始と終了を含む
        ],
    ],
    'posts_per_page' => -1, // すべての投稿を取得(ページネーションなし)
];

$query = new WP_Query($args);
$postData = [];

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        $title = get_the_title(); // 投稿タイトル
        $content = get_the_content(); // 文章
        array_push($list,[
            'title' => $title,
            'content' => $content,
        ]);
        
    }
    wp_reset_postdata();
} else {
    echo '投稿が見つかりませんでした。';
}

$startDateと$endDate内に投稿された記事一覧を取得し、記事のタイトルと本文を取得します。

繰り返し使いたい場合

繰り返し使いたい場合は関数化してfunctions.phpに記載します。

function getPostFromYear($year = -1){
    if($year == -1){
        $year = date('Y');
    }
    $startDate = $year.'-01-01 00:00:00';
    $endDate = $year.'-12-31 23:59:59';
    
    $args = [
        'post_type'      => 'post', // 投稿タイプを指定
        'date_query'     => [
            [
                'after'     => $startDate,
                'before'    => $endDate,
                'inclusive' => true, // 範囲の開始と終了を含む
            ],
        ],
        'posts_per_page' => -1, // すべての投稿を取得(ページネーションなし)
    ];
    
    $query = new WP_Query($args);
    $postData = [];
    
    if ($query->have_posts()) {
        while ($query->have_posts()) {
            $query->the_post();
            $title = get_the_title(); // 投稿タイトル
            $content = get_the_content(); // 文章
            array_push($list,[
                'title' => $title,
                'content' => $content,
            ]);
            
        }
        wp_reset_postdata();
    } else {
        echo '投稿が見つかりませんでした。';
    }
    
    return $postData;
}

これで指定した年があった場合は指定した年の記事を取得して配列として返します。
年が指定されなかった場合は現在の年の記事を取得して配列として返します。

今回は以上です。