Written by Anonymous
add_shortcode('month_archive_dropdown', function() {
global $wpdb;
// 過去の投稿から年月データを取得
$results = $wpdb->get_results("
SELECT DISTINCT YEAR(post_date) AS year, MONTH(post_date) AS month
FROM {$wpdb->posts}
WHERE post_status = 'publish'
AND post_type = 'post'
ORDER BY post_date DESC
");
if (empty($results)) {
return '<p>アーカイブがありません。</p>';
}
// ドロップダウンHTML生成
$html = '<form action="" method="get" id="month-archive-dropdown">';
$html .= '<select name="archive-dropdown" onchange="if(this.value) window.location.href=this.value;">';
$html .= '<option value="">年月を選択してください</option>';
foreach ($results as $result) {
$year = $result->year;
$month = $result->month;
// 年月の最初の投稿を取得
$query = new WP_Query([
'year' => $year,
'monthnum' => $month,
'posts_per_page' => 1,
'orderby' => 'date',
'order' => 'DESC',
]);
if ($query->have_posts()) {
$query->the_post();
$first_post_url = get_permalink(); // 最初の投稿のURL
$month_label = date_i18n('Y年 F', strtotime("$year-$month-01"));
$html .= sprintf(
'<option value="%s">%s</option>',
esc_url($first_post_url),
esc_html($month_label)
);
}
wp_reset_postdata();
}
$html .= '</select>';
$html .= '</form>';
return $html;
});