Добавить дочерние страницы родителя в navbar PHP

Я использую функцию в настраиваемой теме, которая автоматически заполняет навигацию всеми дочерними страницами каждого родителя. Я нашел код на этом сайте

Это работает хорошо, но единственное, что эта функция не делает для меня, – это заказать страницы с порядком, установленным в разделе «Страницы» в WordPress. Я думаю, мне нужно использовать что-то вроде «sort_column = menu_order & title_li = & child_of =» где-то в следующем коде, но не может, чтобы жизнь меня работала где?

/** * auto_child_page_menu * * class to add top level page menu items all child pages on the fly * @author Ohad Raz <admin@bainternet.info> */ class auto_child_page_menu { /** * class constructor * @author Ohad Raz <admin@bainternet.info> * @param array $args * @return void */ function __construct($args = array()){ add_filter('wp_nav_menu_objects',array($this,'on_the_fly')); } /** * the magic function that adds the child pages * @author Ohad Raz <admin@bainternet.info> * @param array $items * @return array */ function on_the_fly($items) { global $post; $tmp = array(); foreach ($items as $key => $i) { $tmp[] = $i; //if not page move on if ($i->object != 'page'){ continue; } $page = get_post($i->object_id); //if not parent page move on if (!isset($page->post_parent) || $page->post_parent != 0) { continue; } $children = get_pages( array('child_of' => $i->object_id) ); foreach ((array)$children as $c) { //set parent menu $c->menu_item_parent = $i->ID; $c->object_id = $c->ID; $c->object = 'page'; $c->type = 'post_type'; $c->type_label = 'Page'; $c->url = get_permalink( $c->ID); $c->title = $c->post_title; $c->target = ''; $c->attr_title = ''; $c->description = ''; $c->classes = array('','menu-item','menu-item-type-post_type','menu-item-object-page'); $c->xfn = ''; $c->current = ($post->ID == $c->ID)? true: false; $c->current_item_ancestor = ($post->ID == $c->post_parent)? true: false; //probbably not right $c->current_item_parent = ($post->ID == $c->post_parent)? true: false; $tmp[] = $c; } } return $tmp; } } new auto_child_page_menu(); 

Solutions Collecting From Web of "Добавить дочерние страницы родителя в navbar PHP"

$items которые передаются этой функции, уже отсортированы (см. здесь ). Поэтому вы должны заказать их еще раз, самостоятельно, перед return $tmp;

В конце концов я нашел исправление для тех, кто имеет такую ​​же проблему:

  /** * auto_child_page_menu * * class to add top level page menu items all child pages on the fly * @author Ohad Raz <admin@bainternet.info> */ class auto_child_page_menu { /** * class constructor * @author Ohad Raz <admin@bainternet.info> * @param array $args * @return void */ function __construct($args = array()){ add_filter('wp_nav_menu_objects',array($this,'on_the_fly')); } /** * the magic function that adds the child pages * @author Ohad Raz <admin@bainternet.info> * @param array $items * @return array */ function on_the_fly($items) { global $post; $tmp = array(); foreach ($items as $key => $i) { $tmp[] = $i; //if not page move on if ($i->object != 'page'){ continue; } $page = get_post($i->object_id); //if not parent page move on if (!isset($page->post_parent) || $page->post_parent != 0) { continue; } $children = get_pages( array('child_of' => $i->object_id, 'sort_column' => 'menu_order') ); foreach ((array)$children as $c) { //set parent menu $c->menu_item_parent = $i->ID; $c->object_id = $c->ID; $c->object = 'page'; $c->type = 'post_type'; $c->type_label = 'Page'; $c->url = get_permalink( $c->ID); $c->title = $c->post_title; $c->target = ''; $c->attr_title = ''; $c->description = ''; $c->classes = array('','menu-item','menu-item-type-post_type','menu-item-object-page'); $c->xfn = ''; $c->current = ($post->ID == $c->ID)? true: false; $c->current_item_ancestor = ($post->ID == $c->post_parent)? true: false; //probbably not right $c->current_item_parent = ($post->ID == $c->post_parent)? true: false; $tmp[] = $c; } } return $tmp; } } new auto_child_page_menu();