自定义漫游:如何在函数START_LVL中获取ID

时间:2012-08-16 作者:Robert Bouten

我正在制作第一个定制手风琴菜单的助行器。首先,我使用了以下示例:http://bitacre.com/2025/custom-nav-menu-walker-for-wordpress-themes

有两个功能。首先启动\\u lvl,然后启动\\u el。

在start\\u el中,ID get由$item->ID实现。有人知道我如何在start\\u lvl中实现这一点吗?我需要给(周围较低级别的导航)一个ID,以便触发它在手风琴菜单中折叠。

我试图生成的是这样的内容:

<a href="#collapse2">Titel 2</a>
<ul id="collapse2">Lower Level Menu 2</ul>
<a href="#collapse3">Titel 3</a>
<ul id="collapse3">Lower Level Menu  3</ul>
start\\u lvl函数的我的代码:

// add id\'s and classes to ul sub-menus
function start_lvl( &$output, $depth, $item ) {
    // depth dependent classes
    $indent = ( $depth > 0  ? str_repeat( "\\t", $depth ) : \'\' ); // code indent
    $display_depth = ( $depth + 1); // because it counts the first submenu as 0
    $pgid = ; // How to get ID in here??
    $classes = array(
        \'sub-menu\',
        ( $display_depth == 1  ? \'accordion-body collapse\' : \'\' ),
        ( $display_depth % 2  ? \'menu-odd\' : \'menu-even\' ),
        ( $display_depth >=2 ? \'sub-sub-menu\' : \'\' ),
        \'menu-depth-\' . $display_depth
        );
    $ids = array(
        \'collapse\' . $pgid
        );
    $class_names = implode( \' \', $classes );
    $id_name = implode( \' \', $ids );

    // build html
    $output .= "\\n" . $indent . \'<ul id="\' . $id_name . \'" class="\' . $class_names . \'">\' . "\\n";
}

3 个回复
SO网友:Lane

我只是在我的一个主题中这样做。。。由于您在Walker的那个阶段没有访问$item变量的权限,因此您可能希望在您确实有权访问当前项目时,将其存储在更全局的范围内。下面的代码将更有意义。。。注意:除了相关代码之外,我已经删除了所有内容。

class ThemeTruck_Nav_Walker extends Walker_Nav_Menu {
   private $curItem;

  // retrieve the curItem
  function start_lvl(&$output, $depth = 0, $args = array()) {
    var_dump($this->curItem );
  }

  // store the curItem
  function start_el(&$output, $item, $depth = 0, $args = array(), $id = 0) {
    $this->curItem = $item;
  }

 }

SO网友:Nabajit Roy

您可以在start_el 函数并将参数grub放入start_lvl 作用

apply_filters( \'walker_nav_menu_start_lvl\', $item_output, $item, $depth, $args->myarg=$item->title );
请让我知道它是否有效。

SO网友:AlxVallejo

您只需将$page添加到自定义walker的参数中:

class My_Custom_Walker extends Walker_page {
    function start_el(&$output, $page, $depth, $args, $current_page) {
        if ( $depth )
            $indent = str_repeat("\\t", $depth);
        else
            $indent = \'\';

        extract($args, EXTR_SKIP);

        $output .= $indent . 
            \'<li>
            <a style="color:red" href="\' . get_page_link($page->ID) . \'" title="\' . 
            esc_attr( wp_strip_all_tags( apply_filters( \'the_title\', $page->post_title, $page->ID ) ) ) . \'">\' . 
            $link_before . apply_filters( \'the_title\', $page->post_title, $page->ID ) . $link_after . \'</a>\';
尝试上述操作,然后在调用wp\\u list\\u pages()之前,添加自定义walker类:

$MyWalker = new My_Custom_Walker();
然后,在wp\\u list\\u页面的参数中:

wp\\u list\\u页面(\'walker\'=>$MyWalker)

检查助行器的输出是否为红色。

结束

相关推荐

Bidding site plugin

我必须使招标网站像敖德克,自由职业者类型。wordpress中是否有任何对工作、承包商、用户、项目和付款管理有用的插件,因为这些是本项目的主要任务?其次,在wordpress中构建它是好的还是定制的?