自定义 post 类型活动菜单项
Custom post type active menu item
我创建了一个名为“团队”的自定义 post 类型,并将 link 添加到 WP 菜单的存档页面。
一旦用户点击它,他就会看到所有团队成员,并且当前页面在菜单中突出显示。
但是当我点击个别团队成员时,他的页面打开并且菜单中的“团队”不再突出显示,应该是。
这是打开团队页面时的显示方式:
<li id="menu-item-17" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item active”>
<a href="http://localhost:8888/site/team/">Team</a>
</li>
这是我打开个人会员页面时在菜单中看到的内容:
<li id="menu-item-17" class="menu-item menu-item-type-custom menu-item-object-custom”>
<a href="http://localhost:8888/site/team/">Team</a>
</li>
由于我不是 PHP 开发人员,我不知道如何让它工作,任何建议将不胜感激:)
我从 here 获取并编辑了这个对我有用的东西。我 'bonsai' 将其更改为您的自定义 post 类型。在我放置 'menu-item-299' 的位置,将其更改为要突出显示的菜单项的 ID。
function change_page_menu_classes($menu)
{
global $post;
if (get_post_type($post) == 'bonsai')
{
$menu = str_replace( 'current-menu-item', '', $menu ); // remove all current_page_parent classes
$menu = str_replace( 'menu-item-299', 'menu-item-299 current-menu-item', $menu ); // add the current_page_parent class to the page you want
}
return $menu;
}
add_filter( 'nav_menu_css_class', 'change_page_menu_classes', 10,2 );
如果您有问题请告诉我,因为它们可能会影响到我:)
可以用 functions.php 中的一个非常简单的过滤器来完成
请确保您在注册 CPT 或使用 register_post_type()
时使用了参数 has_archive => true
//ADDING AN ACTIVE CLASS TO THE CUSTOM POST-TYPE MENU ITEM WHEN VISITING ITS SINGLE POST PAGES
function custom_active_item_classes($classes = array(), $menu_item = false){
global $post;
$classes[] = ($menu_item->url == get_post_type_archive_link($post->post_type)) ? 'current-menu-item active' : '';
return $classes;
}
add_filter( 'nav_menu_css_class', 'custom_active_item_classes', 10, 2 );
希望这对某人有所帮助,如果对您有帮助,请发表评论并投票。
没有get_post_type_archive_link
函数的更简单的方法:
function custom_active_item_classes( $classes = [], $menu_item = false ) {
global $post;
$classes[] = ( in_array( 'menu-item-object-' . $post->post_type, $classes ) ) ? 'current-menu-item active' : '';
return $classes;
}
add_filter( 'nav_menu_css_class', 'custom_active_item_classes', 10, 2 );
我创建了一个名为“团队”的自定义 post 类型,并将 link 添加到 WP 菜单的存档页面。 一旦用户点击它,他就会看到所有团队成员,并且当前页面在菜单中突出显示。 但是当我点击个别团队成员时,他的页面打开并且菜单中的“团队”不再突出显示,应该是。
这是打开团队页面时的显示方式:
<li id="menu-item-17" class="menu-item menu-item-type-custom menu-item-object-custom current-menu-item active”>
<a href="http://localhost:8888/site/team/">Team</a>
</li>
这是我打开个人会员页面时在菜单中看到的内容:
<li id="menu-item-17" class="menu-item menu-item-type-custom menu-item-object-custom”>
<a href="http://localhost:8888/site/team/">Team</a>
</li>
由于我不是 PHP 开发人员,我不知道如何让它工作,任何建议将不胜感激:)
我从 here 获取并编辑了这个对我有用的东西。我 'bonsai' 将其更改为您的自定义 post 类型。在我放置 'menu-item-299' 的位置,将其更改为要突出显示的菜单项的 ID。
function change_page_menu_classes($menu)
{
global $post;
if (get_post_type($post) == 'bonsai')
{
$menu = str_replace( 'current-menu-item', '', $menu ); // remove all current_page_parent classes
$menu = str_replace( 'menu-item-299', 'menu-item-299 current-menu-item', $menu ); // add the current_page_parent class to the page you want
}
return $menu;
}
add_filter( 'nav_menu_css_class', 'change_page_menu_classes', 10,2 );
如果您有问题请告诉我,因为它们可能会影响到我:)
可以用 functions.php 中的一个非常简单的过滤器来完成
请确保您在注册 CPT 或使用 register_post_type()
has_archive => true
//ADDING AN ACTIVE CLASS TO THE CUSTOM POST-TYPE MENU ITEM WHEN VISITING ITS SINGLE POST PAGES
function custom_active_item_classes($classes = array(), $menu_item = false){
global $post;
$classes[] = ($menu_item->url == get_post_type_archive_link($post->post_type)) ? 'current-menu-item active' : '';
return $classes;
}
add_filter( 'nav_menu_css_class', 'custom_active_item_classes', 10, 2 );
希望这对某人有所帮助,如果对您有帮助,请发表评论并投票。
没有get_post_type_archive_link
函数的更简单的方法:
function custom_active_item_classes( $classes = [], $menu_item = false ) {
global $post;
$classes[] = ( in_array( 'menu-item-object-' . $post->post_type, $classes ) ) ? 'current-menu-item active' : '';
return $classes;
}
add_filter( 'nav_menu_css_class', 'custom_active_item_classes', 10, 2 );