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; });