前提・実現したいこと
月別アーカイブページへ移動した後に、セレクトボックスの値をページごとに動的に変更したいです。
例):「example.com/news/date/2021/5/」ページであれば、「2021.5」が初期値で選択されている状態にしたい。
wordpressのカスタム投稿にてセレクトボックスでページ移動する、月別アーカイブを作成しました。
カスタム投稿スラッグ:news
タクソノミー :news_category
▼archive-news.php/date.php↓
archive
1<?php 2$cat_slug = 'news'; //アーカイブしたいカテゴリーのスラッグ 3$taxonomy_slug = 'news_category'; // アーカイブで取得したいタクソノミーを指定 4$home_url = get_bloginfo('url'); 5$prev_year = null; // 値「null」をセット 6$args = array( 7 'post_type' => $cat_slug, 8 'posts_per_page' => -1, //カテゴリーの記事を全部出力 9); 10$the_query = new WP_Query($args); //上記アーカイブクエリを実行 11?> 12<?php while ($the_query->have_posts()) : $the_query->the_post(); ?> 13 <?php $archive_list[get_the_time('Y/n', $post->ID)][] = $post->post_title; //年月ごとに記事情報を格納 14 ?> 15<?php endwhile; ?> 16<?php wp_reset_postdata(); ?> 17 18 19<?php if ($archive_list) : ?> 20 <select id="date_link"> 21 <option>月を選択</option> 22 <?php foreach ($archive_list as $year_month => $archive) : 23 $year_month_arr = explode('/', $year_month); 24 ?> 25 <option value="<?php echo esc_url(home_url('news/date/' . $year_month)) ?>"> 26 <!-- 特定のカテゴリーのアーカイブのURLを value に格納 --> 27 <?php echo $year_month_arr[0] . '.' . $year_month_arr[1] . '' ?> 28 <!-- [<?php echo count($archive) ?>] --> 29 </option> 30 <?php endforeach; ?> 31 </select> 32<?php endif; ?> 33 34<script type="text/javascript"> 35 (function() { 36 var dropdown = document.getElementById("date_link"); //selectタグに付与したIDでターゲットのselectタグを取得 37 function onSelectChange() { 38 if (dropdown.options[dropdown.selectedIndex].value !== '') { //optionにvalueが格納されていれば 39 document.location.href = this.options[this.selectedIndex].value; //valueの値を location.hrefの値に格納 40 } 41 } 42 dropdown.onchange = onSelectChange; 43 })(); 44</script>
出力結果↓
<select id="date_link"> <option>月を選択</option> <option value="/news/date/2021/6"> 2021.6 </option> <option value="/news/date/2021/5"> 2021.5 </option> <option value="/news/date/2021/4"> 2021.4 </option> <option value="/news/date/2021/2"> 2021.2 </option> <option value="/news/date/2020/12"> 2020.12 </option> </select>
月別アーカイブページへ移動した後に、セレクトボックスの値をページごとに動的に変更したいです。
(現状は「<option>月を選択</option>」が選択された状態で表示されています。)
例):example.com/news/date/2021/5/ページであれば、「2021.5」が選択されている状態にしたい。
選択された状態にするにはselectedをoptionに付与する様にすれば良いかと思うのですが、
動的にページごとに付与する方法がわからずこちらで質問をさせていただきました。
どうぞ、宜しくお願い致します。
$_SERVERのREQUEST_URIについて
追記↓
<?php if ($archive_list) : ?> <?php $url = $_SERVER['REQUEST_URI']; ?> <?php if (strstr($url, $year_month)) : ?> <select id="date_link"> <option>月を選択</option> <?php foreach ($archive_list as $year_month => $archive) : $year_month_arr = explode('/', $year_month); ?> <option value="<?php echo esc_url(home_url('news/date/' . $year_month)) ?>"> <!-- 特定のカテゴリーのアーカイブのURLを value に格納 --> <?php echo $year_month_arr[0] . '.' . $year_month_arr[1] . '' ?> <!-- [<?php echo count($archive) ?>] --> </option> <?php endforeach; ?> </select> <?php endif; ?> <?php endif; ?>
上記URLに月日がついている場合は取得できそうなのですが、
「URLに入っている、月日のoptionにselectedを付与する」という書き方がわかりませんでした。。。
回答2件
あなたの回答
tips
プレビュー