日付アーカイブのカレント表示について
-
初めて質問させていただきます。
「wp list categories」を使うと、該当のカテゴリーにいる場合にリストに「current-cat」クラスが付加され、カテゴリーのカレント表示はできるのですが、
wp_get_archives(‘type=yearly’)で、該当の年にいるときに、カレント表示をしたいのですができません。
何か方法はありますでしょうか?
-
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 = ' ('.$arcresult->posts.')' . $afterafter; $output .= get_archives_link($url, $text, $format, $before, $after); } } } elseif ( 'daily' == $type ) { (以下略)
変更後
$after = ' ('.$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);
あくまで、ご参考まで。
>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');
>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');
>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');
良かったです(余計なコードが混ざってましたね)。
解決済でしたら、
このページの右側のわかりにくい場所に
「このトピックは」とありますので
[未解決]を[解決済]に変更して
[変更]ボタンをクリックしていただくと
今年の運気がアップします。>kz様
お世話になります!
解決済にいたしました。よろしくお願いいたします!
- トピック「日付アーカイブのカレント表示について」には新たに返信することはできません。