3

I'm looking for how to get a class in the wp_get_archives functions to get the current month (when we are in a month archive) just like when we call wp_list_categories, the current category has a ".current-cat" selector for CSS or when we call wp_list_pages we have a '.current_page_item' selector.

3 Answers 3

4

Put the following function in your functions.php

function wpse_62509_current_month_selector( $link_html ) {
    $current_month = date("F Y");
    if ( preg_match('/'.$current_month.'/i', $link_html ) )
        $link_html = preg_replace('/<li>/i', '<li class="current-month">', $link_html );
    return $link_html;
}

And then add the following line just before calling wp_get_archives()

add_filter( 'get_archives_link', 'wpse_62509_current_month_selector' );

You might also want to remove the filter after calling wp_get_archives() so that it doesn't mess with other wp_get_archives() or get_archives_link() function calls.

remove_filter( 'get_archives_link', 'wpse_62509_current_month_selector' );
3
  • Youre on the right track, but what I'm asking is to find the current month of the archives. Maybe I'll try taking it from the URL (www.example.com/2012/08/) to get the values you use.
    – Fredy31
    Aug 27, 2012 at 13:50
  • Well after just a few modifications, that code worked. Thanks! The corrected code is in my answer below.
    – Fredy31
    Aug 27, 2012 at 14:06
  • The remove_filter() for some reason did not work for me. If I removed it, it worked fine. Jun 29, 2017 at 5:31
4

This function was created with the great help of Joshua Abenazer. Thanks! Basically, if is a monthly archive, go and get the current month watched, and add a class on the li. Worked great.

function wpse_62509_current_month_selector( $link_html ) {
    if (is_month()){
        $current_month = get_the_date("F Y");
        if ( preg_match('/'.$current_month.'/i', $link_html ) )
            $link_html = preg_replace('/<li>/i', '<li class="current-month">', $link_html );
    }
    return $link_html;
}

add_filter( 'get_archives_link', 'wpse_62509_current_month_selector' );
1

As of WordPress 5.3, <a> elements generated by wp_get_archives (etc) for links to the current page have the attribute aria-current="page" added to them. If you just want to style the current page link differently, you can now target this with CSS, assuming you are happy for the styles to all be on the <a>:

a[aria-current="page"] {
color: red;
}

…or even just:

a[aria-current] {
color: red;
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.