Lately, I’ve been doing a lot of work with WordPress themes. On one particular site, the navigation menu is built dynamically, combining pages and categories in the navigation scheme. I needed to find a way to determine which page or category was currently being viewed so I could apply a special class to the item in the navigation menu, indicating that the link is active.
After a bit of research, I found a couple of useful WordPress functions that helped me determine which page the visitor is currently viewing.
Home Page
First, let’s look at a function that indicates whether or not the visitor is currently viewing the home page of your blog. The function is called “is_home.” Therefore, for the home page navigation item, you can use code like $class = (is_home()) ? 'active' : '';
to assign a class of “active” to your home navigation item.
Current Page
Now, if you have a bunch of pages (not posts) on your WordPress blog, you can use some code similar to the following to create a new link for each page and assign a class of “active” to the page that’s currently being viewed.
foreach(get_pages('childof=0') as $p) {
if($p->post_parent == 0) {
$lc = ($p->ID == $wp_query->post->ID) ? ' class="active"' : '';
echo '
<li><a href="'.get_permalink($p->ID).'" title="'.$p->post_title.'"'.$lc.'>'.$p->post_title.'</a></li>';
}
}
In this case, we’re simply comparing the ID of the page for which we’re building the navigation item to the $wp_query->post->ID
, which is the ID of the current page.
Because I was building a custom navigation menu, I used the get_pages()
function; however, if you just want a pre-built navigation menu (complete with a class of “current_page_item” for the current item being viewed), you could simply use the wp_list_pages()
function.
Current Category
Finally, if you’re building a navigation menu with a list of the categories, you can use code similar to the following.
foreach(get_categories('exclude=1') as $p) {
if($p->parent == 0) {
$lc = (is_category($p->cat_name)) ? ' class="active"' : '';
echo '
<li><a href="'.get_bloginfo('url').'/'.$p->category_nicename.'" title="'.$p->cat_name.'"'.$lc.'>'.$p->cat_name.'</a></li>';
}
}
In this case, the is_category()
function is the key. That function simply checks to see if the page currently being viewed is a category page. If you feed a category ID or category name into that function, WordPress checks to see if that’s the category page that’s currently being viewed.
Again, because I was building a custom navigation menu, I used the get_categories()
function to retrieve a list of all of the categories. I chose to exclude the category with an ID of “1,” as the first category in a WordPress blog is always “Uncategorized,” which would not look very attractive in a navigation menu.
Post Your Comment