使用自定义对象而不是WordPress数据库对象实现Walker

时间:2019-01-30 作者:Dave M

我正在尝试实现一个自定义的Walker,以便在对象的层次结构中导航。当我做var_dump$item 中的变量start_el 函数我看到的是wordpress数据库对象(博客、页面等),而不是我的自定义数据对象。

如何设置Walker以接受菜单层次结构和导航的自定义对象?

谢谢Dave

1 个回复
SO网友:Alexander Holsgrove

可能不是你想要的,但你可以看看Bootstrap Nav Walker implementation.

documentation, 还有一个例子manually calling your own walker 类,如果您还没有这样做的话,可能值得一读。

class Walker_Quickstart_Menu extends Walker {

    // Tell Walker where to inherit it\'s parent and id values
    var $db_fields = array(
        \'parent\' => \'menu_item_parent\', 
        \'id\'     => \'db_id\' 
    );

    /**
     * At the start of each element, output a <li> and <a> tag structure.
     * 
     * Note: Menu objects include url and title properties, so we will use those.
     */
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        $output .= sprintf( "\\n<li><a href=\'%s\'%s>%s</a></li>\\n",
            $item->url,
            ( $item->object_id === get_the_ID() ) ? \' class="current"\' : \'\',
            $item->title
        );
    }
}
然后打电话给步行者:

// 1. Fetch the menu (we\'ll assume it has an id of 2)...
$menu = wp_get_nav_menu_object(2);

// 2. Create an empty $menu_items array
$menu_items = array();

// 3. Get menu objects (this is our tree structure)
if ( $menu && ! is_wp_error($menu) && empty($menu_items) ) {
    $menu_items = wp_get_nav_menu_items( $menu );
}

// 4. Create a new instance of our walker...
$walk = new Walker_Quickstart_Menu();

// 5. Walk the tree and render the returned output as a one-dimensional array
print_r( $walk->walk( $menu_items, -1 ) );

相关推荐

menu customization

我正在我的页面上使用高级主题。该主题在整个站点中只接受一个菜单。该网站是一个单页网站。主题的工作方式是,我们必须建立一个主页,然后使用菜单项来制作网站的各个部分。因此,我创建了一个菜单,其中包含我想要的所有部分,使用我创建的页面已经设置为部分。例如:我有主页、照片、视频等。这些都是单独的页面,但当我将它们作为菜单的一部分时,它们将在一个页面中显示在另一个页面的下方,菜单项将滚动到该页面上的锚定位置。许多主题都是这样工作的。My problem is :我需要翻译菜单或设置另一个页面(不是作为节,而是一个正