サポート » テーマ » 年別パラメータを判断してカレント表示させたい

  • 解決済 mkya18

    (@mkya18)


    年別ごとに見られるように、プルダウンメニューで年別リストを作成しております。
    年別を選択すると「/news/?y=2020」といったようにパラメータがつきます。
    パラメータの年を判断して、該当の<li>タグに「class=”selected”」を入れたいのですが、
    どのように記述したらよろしいでしょうか。

    何卒よろしくお願いいたします。

    <?php
    $y = $_GET[ 'y' ];
    $m = 1; // 年度の開始月
    // 一番古い投稿を取得
    $args_oldest_post = array(
      'post_type' => 'post',
      'posts_per_page' => 1,
      'order' => 'ASC',
      'orderby' => 'date',
    );
    $oldest_post = new WP_Query( $args_oldest_post );
    if ( $oldest_post->have_posts() ):
      while ( $oldest_post->have_posts() ): $oldest_post->the_post();
    // 一番古い投稿の年、月を取得
    $oldest_post_y = get_the_date( 'Y' );
    $oldest_post_m = get_the_date( 'n' );
    endwhile;
    endif;
    wp_reset_postdata();
    
    // ナビの開始年を設定
    if ( $m > $oldest_post_m ) {
      $start = $oldest_post_y - 1;
    } else {
      $start = $oldest_post_y;
    }
    // 現在の年、月を取得
    $endYear = date( 'Y' );
    $endMonth = date( 'n' );
    // ナビの終了年を設定
    if ( $m <= $endMonth ) {
      $end = date( 'Y' );
    } else {
      $end = date( 'Y' ) - 1;
    }
    
    // ナビを出力
    echo '<ul class="news__select_list">';
    echo '<li class="selected"><a href="/news/">すべて</a></li>';
    for ( $i = $end; $i >= $start; $i-- ) {
      echo '<li><a href="/news/?y=' . $i . '">' . $i . '年</a></li>';
    }
    echo '</ul>';
    ?>
    • このトピックはmkya18が1ヶ月、 2週前に変更しました。
3件の返信を表示中 - 1 - 3件目 (全3件中)
  • syntarou

    (@syntarou)

    こんにちは、

    最後のほうのforループ内で、$yと$iを比較して、出力を切り替えてはいかがでしょうか?
    $issel = “”;
    if ( $i == $y ) {
    $issel = “selected”;
    }
    として、<li class=”$issel ….”> などですかね~。

    私も勉強中です。

    Aki Hamano

    (@wildworks)

    wp_get_archives を使うのはどうでしょうか。

    <?php
    $archives = wp_get_archives(
    	array(
    		'type'   => 'yearly',
    		'echo'   => false,
    	)
    );
    $archives = str_replace( '</a>', '年</a>', $archives );
    ?>
    <ul class="news__select_list">
    	<?php echo $archives; ?>
    </ul>

    より少ないコードで実装できますし、現在表示している年アーカイブページと合致している場合、 a タグにaria-current="page" 属性が付与されるので、スタイリングのセレクタとして使用出来ます。

    ただし、どうしても li にクラスを付与しないとスタイリング出来ない時は、この方法は使えません。

    トピック投稿者 mkya18

    (@mkya18)

    @syntarou @wildworks
    ありがとうございます!
    おかげさまで解決できました!

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • このトピックに返信するにはログインが必要です。