Skip to content

Instantly share code, notes, and snippets.

@travislopes
Last active August 29, 2015 14:00
Show Gist options
  • Save travislopes/5ec6cb703264045cd7d7 to your computer and use it in GitHub Desktop.
Save travislopes/5ec6cb703264045cd7d7 to your computer and use it in GitHub Desktop.
WordPress filter for setting the proper CSS classes on post type archive menu items
<?php
/*
* Archive page in menu fix
* (requires menu item URL to be "/slug/")
*/
add_filter('nav_menu_css_class', function($classes, $item) {
global $wp_query;
// Loop through all the post types
foreach(get_post_types(null, 'objects') as $name => $post_type) {
// Check if rewrite slug is set
if(isset($post_type->rewrite) && $item->url === '/'. $post_type->rewrite['slug'] .'/') {
// Set CSS classes to appropriate item
$classes = array('menu-item', 'menu-item-type-post_type', 'menu-item-object-page');
// If on archive page, add appropriate CSS class
if(is_post_type_archive($name)) $classes[] = 'current_page_item';
// If on single post page, add appropriate CSS class
if(is_singular($name)) $classes[] = 'current_page_parent';
}
}
// Remove active class on blog menu item if CPT
if(get_option('page_for_posts') == $item->object_id && !is_singular('post')) {
for($i = 0; $i < count($classes); $i++) {
if($classes[$i] === 'current_page_parent')
unset($classes[$i]);
}
}
return $classes;
}, 10, 2);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment