アトリエロワ

サイドバーの年月アーカイブからカテゴリーを絞った記事一覧をcategory.phpで出力

下記のURLにリンクする年月別アーカイブ

https://test.com/?cat=1
https://test.com/2021/?cat=1
https://test.com/2021/01/?cat=1

サイドバーに下記を記載 カテゴリーID 1 の例

下記の「 ?cat=1 」は絞りたいカテゴリースラッグに変更
例は スラッグ:news カテゴリーID:1

この場合、category.phpを使う

●件数も出る

2023年5月(4)
2023年4月(5)
2023年(9)
2022年(15)

<?php
$args = array(
    'category' => 1,       // カテゴリーIDが1の記事のみを取得
    'posts_per_page' => -1 // すべての記事を表示
);

$posts_in_category = get_posts($args);
$archive_counts_monthly = array();
$archive_counts_yearly = array();

foreach ($posts_in_category as $post) {
    setup_postdata($post);
    
    // 月別アーカイブ
    $archive_month = get_the_date('Y年n月');
    $archive_month_link = get_month_link(intval(get_the_date('Y')), intval(get_the_date('n')));
    if (!isset($archive_counts_monthly[$archive_month])) {
        $archive_counts_monthly[$archive_month] = array(
            'link' => $archive_month_link,
            'count' => 1
        );
    } else {
        $archive_counts_monthly[$archive_month]['count']++;
    }
    
    // 年別アーカイブ
    $archive_year = get_the_date('Y年');
    $archive_year_link = get_year_link(intval(get_the_date('Y')));
    if (!isset($archive_counts_yearly[$archive_year])) {
        $archive_counts_yearly[$archive_year] = array(
            'link' => $archive_year_link,
            'count' => 1
        );
    } else {
        $archive_counts_yearly[$archive_year]['count']++;
    }
}

echo '<h2>月別アーカイブ</h2>';
echo '<ul>';
foreach ($archive_counts_monthly as $archive_month => $data) {
    echo '<li><a href="' . $data['link'] . '?cat=1">' . $archive_month . ' (' . $data['count'] . ')</a></li>';
}
echo '</ul>';

echo '<h2>年別アーカイブ</h2>';
echo '<ul>';
foreach ($archive_counts_yearly as $archive_year => $data) {
    echo '<li><a href="' . $data['link'] . '?cat=1">' . $archive_year . ' (' . $data['count'] . ')</a></li>';
}
echo '</ul>';

wp_reset_postdata();
?>

月別アーカイブのみ過去12ヶ月分にしたいとき

<?php
$args = array(
    'category' => 1,       // カテゴリーIDが1の記事のみを取得
    'posts_per_page' => -1 // すべての記事を表示
);

$posts_in_category = get_posts($args);
$archive_counts_monthly = array();
$archive_counts_yearly = array();

foreach ($posts_in_category as $post) {
    setup_postdata($post);
    
    // 月別アーカイブ
    $archive_month = get_the_date('Y年n月');
    $archive_month_link = get_month_link(intval(get_the_date('Y')), intval(get_the_date('n')));
    if (!isset($archive_counts_monthly[$archive_month])) {
        $archive_counts_monthly[$archive_month] = array(
            'link' => $archive_month_link,
            'count' => 1
        );
    } else {
        $archive_counts_monthly[$archive_month]['count']++;
    }
    
    // 年別アーカイブ
    $archive_year = get_the_date('Y年');
    $archive_year_link = get_year_link(intval(get_the_date('Y')));
    if (!isset($archive_counts_yearly[$archive_year])) {
        $archive_counts_yearly[$archive_year] = array(
            'link' => $archive_year_link,
            'count' => 1
        );
    } else {
        $archive_counts_yearly[$archive_year]['count']++;
    }
}

echo '<ul>';
$months_displayed = 0; // 表示した月の数を追跡
foreach ($archive_counts_monthly as $archive_month => $data) {
    if ($months_displayed >= 12) {
        break; // 12ヶ月を表示したらループを抜ける
    }
    echo '<li><a href="' . $data['link'] . '?cat=1">' . $archive_month . ' (' . $data['count'] . ')</a></li>';
    $months_displayed++;
}
echo '</ul>';

echo '<ul>';
foreach ($archive_counts_yearly as $archive_year => $data) {
    echo '<li><a href="' . $data['link'] . '?cat=1">' . $archive_year . ' (' . $data['count'] . ')</a></li>';
}
echo '</ul>';

wp_reset_postdata();
?>

HOME > wordpress設計術 > サイドバーの年月アーカイブからカテゴリーを絞った記事一覧をcategory.phpで出力

wordpress設計術

wordpress設計術