サポート » 使い方全般 » 日付アーカイブのカレント表示について

  • 解決済 numberniner

    (@numberniner)


    初めて質問させていただきます。

    「wp list categories」を使うと、該当のカテゴリーにいる場合にリストに「current-cat」クラスが付加され、カテゴリーのカレント表示はできるのですが、

    wp_get_archives(‘type=yearly’)で、該当の年にいるときに、カレント表示をしたいのですができません。

    何か方法はありますでしょうか?

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • wp_list_categoriesと違い、wp_get_archivesにはcurrent_categoryという引数がないため、新しく関数を作るか、既存のwp_get_archivesを変更するしかないでしょう。
    全くおすすめはできませんが、以下のように変更すれば、ご希望の形に近くはなります。

    general-template.phpを変更します。

    変更前

    function wp_get_archives($args = '') {
    …
    (中略)
    …
     } elseif ('yearly' == $type) {
       if ($arcresults) {
        $afterafter = $after;
         foreach ( (array) $arcresults as $arcresult) {
           $url = get_year_link($arcresult->year);
           $text = sprintf('%d', $arcresult->year);
           if ($show_post_count)
             $after = '&nbsp('.$arcresult->posts.')' . $afterafter;
               $output .= get_archives_link($url, $text, $format, $before, $after);
             }
           }
         } elseif ( 'daily' == $type ) {
    (以下略)

    変更後

    $after = '&nbsp('.$arcresult->posts.')' . $afterafter;
    if ($arcresult->year == get_year_link(get_the_time('Y')))){
      $before = $before . '<span class="current">';
      $after = '</span>' . $after;
    }
    $output .= get_archives_link($url, $text, $format, $before, $after);

    あくまで、ご参考まで。

    トピック投稿者 numberniner

    (@numberniner)

    >kurosquare様

    ご回答ありがとうございます。

    general-template.phpの該当する変更箇所は分かったのですが、教えて頂いた方法でなかなかうまくいきません。foreachのループがうまく配列になってくれないため、例えば2009年の年別アーカイブにいるときは2009だけアクティブにしたいのですが、2007や2008にもclass=”current”がついてしまう状況です。

    $arcresultをうまく配列にする方法はありますでしょうか。

    wp_get_archives(‘type=yearly’)で、該当の年にいるときに、カレント表示を

    functions.php に以下を記述すればOKです。

    function my_archives_link($link_html){
      if(preg_match_all('@<a .*>([0-9]+)</a>@i', $link_html, $matches))
        if(date('Y') == $matches[1][0])
          $link_html = preg_replace('@<li>@i', '<li class="current-year">', $link_html);
    
      return $link_html;
    }
    add_filter('get_archives_link', 'my_archives_link');
    トピック投稿者 numberniner

    (@numberniner)

    >kz様

    お世話になります。ご回答ありがとうございます!

    やってみたところ、確かにclass=”current”は追加できました。ただ、2009にしかつかず、2007,2008のときも2009にclass=”current”がついてしまいます。

    この場合はどのようにすればよろしいでしょうか。

    度々申し訳ないですがよろしくお願いいたします。

    あ、現在の年と比較してました。

    アーカイブ年なら get_query_var(‘year’) と比較すれば OK です。

    function my_archives_link($link_html){
      global $post;
      if(preg_match_all('@<a .*>([0-9]+)</a>@i', $link_html, $matches))
        if(get_query_var('year') == $matches[1][0])
          $link_html = preg_replace('@<li>@i', '<li class="current-year">', $link_html);
    
      return '<p>'.get_query_var('year').'</p>'.$link_html;
    }
    add_filter('get_archives_link', 'my_archives_link');
    トピック投稿者 numberniner

    (@numberniner)

    >kz様

    お世話になります。再度のご回答ありがとうございます。

    無事実装できました!!本当にありがとうございます。
    最終的に以下のソースになりましたのでフォーラムのために記述しておきます。

    本当にお世話になりました。また何かありましたら質問させて頂きたいと思います。

    function my_archives_link($link_html){
      if(preg_match_all('@<a .*>([0-9]+)</a>@i', $link_html, $matches))
        if(get_query_var('year') == $matches[1][0])
          $link_html = preg_replace('@<li>@i', '<li class="current">', $link_html);
    
      return $link_html;
    }
    add_filter('get_archives_link', 'my_archives_link');

    良かったです(余計なコードが混ざってましたね)。
    解決済でしたら、
    このページの右側のわかりにくい場所に
    「このトピックは」とありますので
    [未解決]を[解決済]に変更して
    [変更]ボタンをクリックしていただくと
    今年の運気がアップします。

    トピック投稿者 numberniner

    (@numberniner)

    >kz様

    お世話になります!

    解決済にいたしました。よろしくお願いいたします!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「日付アーカイブのカレント表示について」には新たに返信することはできません。