如果是单页,我想将当前菜单项类添加到li。 我试图通过使用wp_nav_menu_objects钩子与自定义函数,但不知道如何获取特定的菜单项并设置条件将类分配给它。 这是代码。
add_filter('wp_nav_menu_objects' , 'my_menu_class');
function my_menu_class($menu) {
//if it is a single post page of a particular post type (in this case 'property')
if( is_single() && is_post_type_archive( 'property' ) ) {
//get all the menu items
foreach($menu as $key => $item) {
// check if the menu item is "Commercial Property"
if($item == "Commercial Property") {
//assign the class to that menu item
$menu[$key]->classes[] = 'current-menu-item';
}
}
}
return $menu;
}
此代码仅用于表示逻辑。请建议使用此方法是否可以实现我需要的内容,或者有更好的方法。
感谢。
答案 0 :(得分:1)
在我的WP主题中,我想删除所有wordpess菜单类,添加我自己的和特定条件(例如,如果菜单有一个活动类)添加另一个类。这是我的代码
function add_custom_classes($classes){
$newClasses[] = "navigation__item";
if( in_array('current_page_item', $classes) ){
array_push($newClasses, "navigation__item-active");
}
return $newClasses;
}
add_filter('nav_menu_css_class', 'add_custom_classes', 100, 1);
add_filter('nav_menu_item_id', 'add_custom_classes', 100, 1);
add_filter('page_css_class', 'add_custom_classes', 100, 1);
您可以添加自己的条件
答案 1 :(得分:0)
is_single
实际上正在寻找一个帖子。您需要is_page
答案 2 :(得分:0)
Wordpress已提供课程如果是单页
current-post-ancestor
在任何帖子详细信息页面上,您可以检查您将找到该课程的菜单,以便以其他方式使用current-post-ancestor
课程来完成您需要做的事情
希望它有意义
答案 3 :(得分:0)
我已经使用HTTP_REFERER解决了它在同一个函数中设置条件。 不要觉得这是实现这一目标的最好方法,但它让我感到厌烦。
以下是其他人需要参考的代码。
function nav_menu_class($menu) {
//To dynamically get the directory path from the URL irrespective of the local or web server.
$ref = $_SERVER['HTTP_REFERER']; // prev page url.
$split_ref = pathinfo($ref); // splitting the url to seperate the directory (http://dev.calyxagency.com/horizoncapital/site-new/) from the file path.
$dir_path .= $split_ref[ "dirname" ]; // extracting the host + directory from the full path
$class = 'current-menu-item'; // class to be assigned.
foreach($menu as $key => $item) {
if( $menu[$key]-> ID == 101 ) { // check if the menu item matches this ID
if( $ref == $dir_path.'/properties-to-let/' || $ref == $dir_path.'/properties-for-sale/' || $ref == $dir_path.'/commercial-property/' ) {
$menu[$key]->classes[] = $class;
}
} elseif( $menu[$key]-> ID == 15 ) { // check if the menu item matches this ID
if( $ref == $dir_path.'/business-for-sale/' ) { // check if the single page has come from this page for assigning current class to only this menu item
$menu[$key]->classes[] = $class;
}
} elseif( $menu[$key]-> ID == 18 ) { // check if the menu item matches this ID
if( $ref == $dir_path.'/news/' ) { // check if the single page has come from this page for assigning current class to only this menu item
$menu[$key]->classes[] = $class;
}
}
}
return $menu;
}
add_filter('wp_nav_menu_objects' , 'nav_menu_class');