問題描述

有沒有辦法將由 Wordpress 本身生成的<ul class="sub-menu"> 子程序改為自定義類名?

我知道父母可以使用'menu_class' => 'newname'刪除或更改名稱

我找不到… 試過'submenu_class' => 'customname':D 對我來説似乎是邏輯,但顯然這是不對的。

有任何想法嗎?

最佳解決方案

沒有此選項,但您可以擴展 Wordpress 用於創建菜單 HTML 的’walker’ 對象。只有一種方法需要被覆蓋:

class My_Walker_Nav_Menu extends Walker_Nav_Menu {
  function start_lvl(&$output, $depth) {
    $indent = str_repeat("t", $depth);
    $output .= "n$indent<ul class="my-sub-menu">n";
  }
}

那麼你只是將你的步行者的一個實例作為參數傳遞給 wp_nav_menu,就像這樣:

'walker' => new My_Walker_Nav_Menu()

次佳解決方案

替換類:

echo str_replace('sub-menu', 'menu menu_sub', wp_nav_menu( array(
    'echo' => false,
    'theme_location' => 'sidebar-menu',
    'items_wrap' => '<ul class="menu menu_sidebar">%3$s</ul>' 
  ) )
);

第三種解決方案

這是 Richard 做了什麼的更新,增加了一個”depth” 指標。輸出為 0,level-1,level-2 等。

class UL_Class_Walker extends Walker_Nav_Menu {
  function start_lvl(&$output, $depth) {
    $indent = str_repeat("t", $depth);
    $output .= "n$indent<ul class="level-".$depth."">n";
  }
}

第四種方案

您可以使用 WordPress preg_replace 過濾器 (在您的主題 functions.php 文件中) 示例:

function new_submenu_class($menu) {    
    $menu = preg_replace('/ class="sub-menu"/','/ class="yourclass" /',$menu);        
    return $menu;      
}

add_filter('wp_nav_menu','new_submenu_class'); 

第五種方案

像它一直是,在寫了一些東西到網站之後找了好長時間,就在我貼在這裏之後的一分鐘,我找到了我的解決方案。

它以為我會在這裏分享,以便其他人能找到它。

//Add "parent" class to pages with subpages, change submenu class name, add depth class

    class Prio_Walker extends Walker_Nav_Menu {
    function display_element( $element, &$children_elements, $max_depth, $depth=0, $args, &$output ){
        $GLOBALS['dd_children'] = ( isset($children_elements[$element->ID]) )? 1:0;
        $GLOBALS['dd_depth'] = (int) $depth;
        parent::display_element( $element, $children_elements, $max_depth, $depth, $args, $output );
    }

     function start_lvl(&$output, $depth) {
    $indent = str_repeat("t", $depth);
    $output .= "n$indent<ul class="children level-".$depth."">n";
  }
}

add_filter('nav_menu_css_class','add_parent_css',10,2);
function  add_parent_css($classes, $item){
     global  $dd_depth, $dd_children;
     $classes[] = 'depth'.$dd_depth;
     if($dd_children)
         $classes[] = 'parent';
    return $classes;
}

//Add class to parent pages to show they have subpages (only for automatic wp_nav_menu)

function add_parent_class( $css_class, $page, $depth, $args )
{
   if ( ! empty( $args['has_children'] ) )
       $css_class[] = 'parent';
   return $css_class;
}
add_filter( 'page_css_class', 'add_parent_class', 10, 4 );

這是我找到解決方案的地方:Solution in WordPress support forum

第六種方案

我不得不改變:

function start_lvl(&$output, $depth)

至:

function start_lvl( &$output, $depth = 0, $args = array() )

因為我有一個不兼容的錯誤:

Strict Standards: Declaration of My_Walker_Nav_Menu::start_lvl() should be compatible with Walker_Nav_Menu::start_lvl(&$output, $depth = 0, $args = Array)

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。