• 解決済 baritone

    (@baritone)


    いつもお世話になります。
    フォーラムに投稿されている記事にいつも助けられています。ありがとうございます。
    今回もいろいろと探してみましたが、解決できずにいるので、投稿させていただきます。

    サイドバーに「日付アーカイブ」を表示しているのですが、どこのページにいるのかを分かりやすくする為、該当する「日付アーカイブ」ページを表示した際に、サイドバーに表示されている「日付アーカイブ」のリンクの色を変更したいと思っています。

    【例】
    過去のニュース
    → 2011年3月
    → 2011年2月
    → 2010年12月
    (2011年3月のアーカイブページが表示されている場合、サイドバーの2011年3月のリンクの色を変更したい)

    現在はWordpress3.1で構築しており、現在のソースは以下となります。

    【sidebar.php】

    <div id="right_area" class="news">
    <ul>
    <li>過去のニュース</li>
    <li><ul>
    <?php wp_get_archives( 'type=monthly' ); ?>
    </ul></li>
    </ul>
    </div>

    【表示されるHTML】

    <div id="right_area" class="news">
    <ul>
    <li>過去のニュース</li>
    <li><ul>
    <li><a href='リンクURL' title='2011年3月'>2011年3月</a></li>
    <li><a href='リンクURL' title='2010年8'>2010年8月</a></li>
    <li><a href='リンクURL' title='2008年3月'>2008年3月</a></li>
    </ul></li>
    </ul>
    </div>

    分岐条件を使って、liタグにclassを付ければ良いのかなと思いますが、PHPがまったくの素人の為、どのファイルにどの様に書けば良いのかわかりません…。
    そもそも無理な事なのでしょうか?

    解決にご協力いただけると助かります。
    よろしくお願い致します。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • モデレーター jim912

    (@jim912)

    baritoneさん、こんにちは。

    get_archives_linkにフックし、正規表現でマッチングさせて置換を行うことで可能と思われます。

    1. is_monthがtrueの時だけ書き換え
    2. $_SERVER[‘REQUEST_URI’]とリンクのアドレスが一致したら、liタグをclassを付加したものに置換

    という流れになります。

    モデレーター jim912

    (@jim912)

    このコードで試してみて下さい。

    function add_archive_current_class( $link_html ) {
        $regex = '/^\t<(link |option |li>)/';
        if ( preg_match( $regex, $link_html, $m ) ) {
            switch ( $m[1] ) {
            case 'option ' :
                $search = '<option';
                $replace = '<option selected="selected"';
                $regex = "/^\t<option value='([^']+)'>[^<]+<\/option>/";
                break;
            case 'li>' :
                $search = '<li>';
                $replace = '<li class="current-arichive-item">';
                $regex = "/^\t<li><a href='([^']+)' title='[^']+'>[^<]+<\/a><\/li>/";
                break;
            default :
                $search = '';
                $replace = '';
                $regex = '';
            }
        }
        if ( is_month() && $regex && preg_match( $regex, $link_html, $m ) ) {
            if ( preg_match( '/' . preg_quote( $_SERVER['REQUEST_URI'], '/' ) . '$/', $m[1] ) ) {
                $link_html = str_replace( $search, $replace, $link_html );
            }
        }
        return $link_html;
    }
    add_filter( 'get_archives_link', 'add_archive_current_class' );
    トピック投稿者 baritone

    (@baritone)

    jim912さん、こんにちは。
    ご協力いただき、ありがとうございます!!

    教えていただいたコードをfunctions.phpに入れてみたところ、希望通りになりました。
    コードを教えていただいた前のお返事の内容をいろいろ調べていたのですが、完全に迷路に迷い込んでいましたので、とても助かりました。
    教えていただいたコードを参考に、内容も理解していきたいと思います。

    本当に助かりました。
    ありがとうございます。

3件の返信を表示中 - 1 - 3件目 (全3件中)
  • トピック「サイドバー 日付アーカイブのリンクの色を変更したい」には新たに返信することはできません。