Intereting Posts
многопользовательский детектор Фильтруемый портфолио в WordPress с использованием изотопа jQuery Установка WordPress в другую установку? Как добавить мета-поля в страницы Неправильный канал RSS Могу ли я проверить, какие пользователи запускали какие обновления? Какая область действия – $ blog_url = get_bloginfo () внутри функции добавлять пользовательские записи в пункты меню Различные категории для пользовательских типов сообщений Любой крючок для предварительного обновления плагина – либо массовое, либо одиночное обновление плагина Post OrderBy медленная производительность Как я могу сделать ссылку меню видимой только для администраторов (без плагинов)? Как я могу выбрать другую тему для входа в систему пользователей и гостей? Разработка плагинов: удаление опций при обновлении до новой версии Удалять размер изображений без использования

Пользовательский тип сообщения и пользовательское меню Walker для добавления настраиваемого класса для активных типов сообщений

У меня есть интересная проблема, которую я пытаюсь решить здесь в отношении пользовательского навигационного меню.

По сути, я создал пользовательский класс walker для моего навигационного меню, и я вручную добавил запись в меню, направляющую пользователей в «/ articles», который является страницей архива пользовательского типа сообщений. (BTW, насколько я знаю, нет способа, чтобы эти пользовательские страницы архива типа ввода были включены в выбор левой руки?)

Во всяком случае … поэтому, я добавил запись в меню, используя диалоговое окно пользовательской ссылки, и мой пользовательский ходок правильно подчеркивает эту запись в навигационном меню, когда вы нажимаете на нее / на странице «/ articles».

Проблема, с которой я столкнулась, заключается в том, что при выборе одного из новостей эта ссылка «/ articles» больше не выбрана. Таким образом, здесь возникает вопрос: что мне нужно изменить в моем пользовательском классе walker (код, который я использую, приведен ниже), чтобы добавить класс в меню, когда вы используете эти почтовые страницы.

Мне кажется, что эта функциональность должна быть встроена в wordpress для пользовательских типов сообщений. Например, класс «current_page_parent» добавляется к родительской странице, если вы посещаете одну из подстраниц. Я думал, что будет что-то вроде «current_post_parent» или «current_custom_post_parent», но это, похоже, не существует, насколько я могу судить.

Итак, команда, любая идея, как я могу добавить эту функциональность?

Мое пользовательское меню Walker

// COMPANY - RIGHT MENU - CUSTOM MENU WALKER class Company_Menu_Bar_Walker extends Walker_Nav_Menu { function start_el(&$output, $item, $depth, $args) { global $wp_query; $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $current_indicators = array('current-menu-item', 'current-menu-parent', 'current_page_item', 'current_page_parent'); $newClasses = array(); foreach($classes as $original_class) { //check if it's indicating the current page, otherwise we don't need the class if (in_array($original_class, $current_indicators)) { array_push($newClasses, $original_class); } } $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $newClasses), $item ) ); if($class_names!='') $class_names = ' class="'. esc_attr( $class_names ) . '"'; $output .= "\t" . '<li' . $value . $class_names .'>'; $attributes = ! empty( $item->attr_title ) ? ' title="' . esc_attr( $item->attr_title ) .'"' : ''; $attributes .= ! empty( $item->target ) ? ' target="' . esc_attr( $item->target ) .'"' : ''; $attributes .= ! empty( $item->xfn ) ? ' rel="' . esc_attr( $item->xfn ) .'"' : ''; $attributes .= ! empty( $item->url ) ? ' href="' . esc_attr( $item->url ) .'"' : ''; if($depth != 0) { //option to store things like sub-menus } $item_output = $args->before; $item_output .= '<a'. $attributes .'>'; $item_output .= $args->link_before .apply_filters( 'the_title', $item->title, $item->ID ); $item_output .= '</a>'; $item_output .= $args->after; $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args ); } } 

Код шаблона, который вызывает пользовательский ходок *

 <div class="rightbar-widgets" id="submenu"> <span id="title">select a page</span> <?php wp_nav_menu( array( 'theme_location' => 'company-menu', 'container' => '', 'container_class' => '', 'container_id' => '', 'menu_class' => '', 'menu_id' => '', 'echo' => true, 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'fallback_cb' => '', 'items_wrap' => '<ul id="company-right-menu">' . "\n" . '%3$s</ul>' . "\n", 'depth' => 2, 'walker' => new Company_Menu_Bar_Walker )); ?> </div> 

Solutions Collecting From Web of "Пользовательский тип сообщения и пользовательское меню Walker для добавления настраиваемого класса для активных типов сообщений"

Когда я хочу добавить классы current-menu-item и current-page-ancestor, я всегда использую wp_nav_menu без какого-либо пользовательского ходока. Я только создаю свой собственный ходок, если я хочу изменить, вместо этого скажем, что классы похожи на «sel».

Поэтому я добавляю следующее меню:

 <?php wp_nav_menu( array( 'theme_location' => 'company-menu', 'container' => false, 'menu_class' => '', 'echo' => true, 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'depth' => 2, 'items_wrap' => '<ul id="company-right-menu">' . "\n" . '%3$s</ul>' . "\n" ) ); ?> 

И затем я добавляю это действие в свой файл functions.php:

 function additional_active_item_classes($classes = array(), $menu_item = false){ global $wp_query; if( in_array('current-menu-item', $menu_item->classes) ){ $classes[] = 'current-menu-item'; } // add class current-menu-item to archive if ( $menu_item->post_name == 'my_custom_post' && is_post_type_archive('my_custom_post') ) { $classes[] = 'current-menu-item'; } // add class current-menu-item to single if ( $menu_item->post_name == 'my_custom_post' && is_singular('my_custom_post') ) { $classes[] = 'current-menu-item'; } return $classes; } add_filter( 'nav_menu_css_class', 'additional_active_item_classes', 10, 2 ); 

Если это в правильном направлении, я могу помочь вам больше, если вы захотите.