自动将自定义POST类型的单曲放置到主导航菜单的子菜单中

时间:2016-11-21 作者:rudtek

我环顾四周,看到一些提示,说明我想做什么是可能的,但它只是不适合我。

我有一个定制的post type rt\\U医生。我正在努力做到这一点,这样我的主菜单中就会有一个动态的医生列表。

我想在Nav菜单中有一个菜单项医生,链接到我的医生自定义帖子类型的索引/归档页面,并从该菜单项中挂起一个子菜单项列表,每个子菜单项链接到医生自己的一个帖子。

看起来我可能需要使用定制助行器,但我似乎不太明白。

以下是我作为测试添加的代码:(我创建了一个名为Products2的页面,因为我的cpt正在将产品制作为归档页面。我也尝试了仅使用产品(我在制作cpt之前创建了该页面)

class Walker_rt_Submenu extends Walker_Nav_Menu {
    function end_el(&$output, $item, $depth=0, $args=array()) {
        if( \'Products2\' == $item->title ){
            $output .= \'<ul><li>Dynamic Subnav</li></ul>\';
        }
        $output .= "</li>\\n";  
    }
}
wp_nav_menu(
    array(
        \'theme_location\' => \'primary\',
        \'walker\' => new Walker_rt_Submenu
    )
);
但我有一个错误:

Call to a member function get_page_permastruct() on null in /home/randomnoises/public_html/wp-includes/link-template.php on line 355 
我只是用216作为测试的主题。

1 个回复
最合适的回答,由SO网友:Dan. 整理而成

Walker_Nav_Menu 这不是你想要的。

相反,请使用wp_get_nav_menu_items 滤器在我们开始之前,您需要某种方式允许代码识别您希望作为帖子列表父项的菜单项/页面。你可以用一个CSS类来实现这一点——在管理面板中给父菜单项一个CSS类,让我们称之为“医生父项”。

add_filter( \'wp_get_nav_menu_items\', \'my_theme_doctors_menu_filter\', 10, 3 );

function my_theme_doctors_menu_filter( $items, $menu, $args ) {
  $child_items = array(); // here, we will add all items for the single posts
  $menu_order = count($items); // this is required, to make sure it doesn\'t push out other menu items
  $parent_item_id = 0; // we will use this variable to identify the parent menu item

  //First, we loop through all menu items to find the one we want to be the parent of the sub-menu with all the posts.
  foreach ( $items as $item ) {
    if ( in_array(\'doctors-parent-item\', $item->classes) ){
        $parent_item_id = $item->ID;
    }
  }

  if($parent_item_id > 0){

      foreach ( get_posts( \'post_type=rt_doctors&numberposts=-1\' ) as $post ) {
        $post->menu_item_parent = $parent_item_id;
        $post->post_type = \'nav_menu_item\';
        $post->object = \'custom\';
        $post->type = \'custom\';
        $post->menu_order = ++$menu_order;
        $post->title = $post->post_title;
        $post->url = get_permalink( $post->ID );
        array_push($child_items, $post);
      }

  }

  return array_merge( $items, $child_items );
}
您的菜单现在将全部显示rt_doctors\'在给CSS类“医生”父项的菜单项下的子菜单中`

相关推荐

WordPress中声明SplitMenuWalker::Walk($Elements,$max_Depth)时出现警告

我开始在WordPress网站上收到以下错误:警告:SplitMenuWalker::walk($elements,$max\\u depth)的声明应与/home/relati67/public\\u html/wp content/themes/mentis/inc/mega menu/split menu中的walk::walk($elements,$max\\u depth,$args)兼容。php第0行我不知道在这里该怎么办。我发现了一个具有类似内容的线程,但错误指向特定行(不是第0行),并且不