Intereting Posts
Как переопределить файлы шаблонов родительских тем? Общий тип пользовательских сообщений между сетевыми сайтами WP Как отобразить $ wpdb-> insert_id; значение на перенаправленной странице Структура сайта в отношении пользовательских типов сообщений и таксономий Сообщения на странице не возвращают правильный номер Все сообщения admin screen – показывать время под «Датой»? Определить постоянные ссылки для настраиваемого типа сообщений по таксономии в WP 3.4 Customiser `active_callback` не работает над управлением с помощью метода postMessage. Как сортировать категорию по пользовательскому значению поля Facebook og: проблемы с изображением после изменения https открытое графическое изображение будет перезаписано логотипом gravatar? Можете ли вы перейти от экрана обновлений во время обновления? Как удалить перенаправление RSS-канала? Усиление моей игры с помощью WordPress хостинга В противном случае файл не работает в дочерней теме?

$ args-> has_children не работает с start_el ()

Почему $ has_children здесь не работает?

class walker_name extends Walker_Nav_Menu{ function start_el(&$output, $item, $depth, $args) { $indent = ( $depth ) ? str_repeat( "\t", $depth ) : ''; $class_names = $value = ''; $classes = empty( $item->classes ) ? array() : (array) $item->classes; $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) ); $class_names = ' class="' . esc_attr( $class_names ) . '"'; $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $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 ) .'"' : ''; $item_output = $args->before; $item_output .= '<a'. $attributes .'>'; $item_output .= $args->link_before . apply_filters( 'the_title', $item->title, $item->ID ) . $args->link_after; $item_output .= '</a>'; $has_children = (is_object($args) && $args->has_children) || (is_array($args) && $args['has_children']); if ( $has_children ) { // not working } } } 

Я только что решил эту проблему! Уо! Дело в том, что использование var_dump($args) показывает много вещей вроде этого:

 object(stdClass)#152 (16) { ["menu"]=> object(WP_Term)#145 (10) { ["term_id"]=> int(2) ["name"]=> string(9) "Main menu" ["slug"]=> string(9) "main-menu" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(2) ["taxonomy"]=> string(8) "nav_menu" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(12) ["filter"]=> string(3) "raw" } ["container"]=> string(0) "" ["container_class"]=> string(0) "" ["container_id"]=> string(0) "" ["menu_class"]=> string(4) "menu" ["menu_id"]=> string(0) "" ["echo"]=> bool(true) ["fallback_cb"]=> string(12) "wp_page_menu" ["before"]=> string(0) "" ["after"]=> string(0) "" ["link_before"]=> string(0) "" ["link_after"]=> string(0) "" ["items_wrap"]=> string(4) "%3$s" ["depth"]=> int(0) ["walker"]=> object(themeslug_walker_nav_menu)#151 (4) { ["tree_type"]=> array(3) { [0]=> string(9) "post_type" [1]=> string(8) "taxonomy" [2]=> string(6) "custom" } ["db_fields"]=> array(2) { ["parent"]=> string(16) "menu_item_parent" ["id"]=> string(5) "db_id" } ["max_pages"]=> int(1) ["has_children"]=> bool(true) } ["theme_location"]=> string(0) "" } 

Просматривая этот дамп, вы можете четко видеть ["has_children"]=> bool(true) но дело в том, что оно не является частью объекта $args ! На самом деле это часть объекта, которая находится под "walker" . Это более очевидно, когда вы вставляете бит вывода следующим образом:

 object(stdClass)#152 (16) { ["menu"]=> object(WP_Term)#145 (10) { ["term_id"]=> int(2) ["name"]=> string(9) "Main menu" ["slug"]=> string(9) "main-menu" ["term_group"]=> int(0) ["term_taxonomy_id"]=> int(2) ["taxonomy"]=> string(8) "nav_menu" ["description"]=> string(0) "" ["parent"]=> int(0) ["count"]=> int(12) ["filter"]=> string(3) "raw" } ["container"]=> string(0) "" ["container_class"]=> string(0) "" ["container_id"]=> string(0) "" ["menu_class"]=> string(4) "menu" ["menu_id"]=> string(0) "" ["echo"]=> bool(true) ["fallback_cb"]=> string(12) "wp_page_menu" ["before"]=> string(0) "" ["after"]=> string(0) "" ["link_before"]=> string(0) "" ["link_after"]=> string(0) "" ["items_wrap"]=> string(4) "%3$s" ["depth"]=> int(0) ["walker"]=> object(themeslug_walker_nav_menu)#151 (4) { ["tree_type"]=> array(3) { [0]=> string(9) "post_type" [1]=> string(8) "taxonomy" [2]=> string(6) "custom" } ["db_fields"]=> array(2) { ["parent"]=> string(16) "menu_item_parent" ["id"]=> string(5) "db_id" } ["max_pages"]=> int(1) ["has_children"]=> bool(true) } ["theme_location"]=> string(0) "" } 

Теперь вы можете ясно видеть, что для доступа has_children свойству has_children вам нужно позвонить по этой строке:

 $args->walker->has_children 

Я не уверен, почему вы думаете, что $args->has_children (или $args['has_children'] ) существует вообще. Я не нахожу это в своих тестах и не вижу его в источнике .

Я думаю, что то, что вы хотите, – это $menu_item->menu_item_parent как показано в $menu_item->menu_item_parent Core .

 330 $sorted_menu_items = $menu_items_with_children = array(); 331 foreach ( (array) $menu_items as $menu_item ) { 332 $sorted_menu_items[ $menu_item->menu_order ] = $menu_item; 333 if ( $menu_item->menu_item_parent ) 334 $menu_items_with_children[ $menu_item->menu_item_parent ] = true; 335 }