Автоматически Добавлять Дочерние Страницы В Меню Навигации

  • Автор темы Alexz8551
  • Обновлено
  • 19, Oct 2024
  • #1

Я создал в Wordpress собственное меню, содержащее ссылки на сообщения и страницы. Я добавляю его в свой заголовок, используя эту строку кода:

 depth => 0 

Моя проблема в том, что если я добавляю дочернюю страницу к страницам верхнего уровня в меню, они не отображаются автоматически в качестве подссылок в навигации. Я знаю, что могу каждый раз создавать их вручную, перестраивая меню, но я хотел бы иметь возможность просто добавить дочернюю страницу в раздел страниц и отобразить ее в навигации без необходимости идти в меню и создавать ее там. и еще, имеет ли это смысл?

Я пробовал использовать <?php wp_nav_menu( array( 'theme_location' => 'primary', 'depth' => 0, 'menu_class' => 'nav-menu', ) ); ?> , but that didn't work. Is there a way to have child pages show up without having to build it into the custom menu?

#меню #страницы

Alexz8551


Рег
11 Apr, 2020

Тем
78

Постов
226

Баллов
636
  • 25, Oct 2024
  • #2

вот как:

 /**
* auto_child_page_menu
* 
* class to add top level page menu items all child pages on the fly
* @author Ohad Raz <[email protected]>
*/
class auto_child_page_menu
{

/**

* class constructor

* @author Ohad Raz <[email protected]>

* @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 <[email protected]>

* @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();
 
 

Wewt


Рег
27 Jul, 2014

Тем
73

Постов
176

Баллов
571
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно