web-dev-qa-db-ja.com

wp_nav_menuはliからclassとidを削除します

私はワードプレスに不慣れで、テーマを作ることを通して私のやり方を学ぶことを試みています。今私は私のメニューを生成するのにwp_nav_menuを使っています

ただし、メニューのデフォルト生成は次のようになります。

<div id="navi">
<div class="menu-primary-container">  
  <ul id="menu-primary" class="menu">
    <li id="menu-item-14" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-14"></li>
    <li id="menu-item-16" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-16"></li>
    <li id="menu-item-20" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20"></li>
    <li id="menu-item-15" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-15"></li>
    <li id="menu-item-17" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-17"></li>
  </ul>
</div>
</div>

LiとulからすべてのクラスとIDを削除したいです。私はしばらくグーグルしています。さまざまな方法を試してみたが、運が悪い。どんな助けでも大いに感謝されるでしょう。私は現在Wordpress 3.1を使っています

前もって感謝します!

5
eddyward

wp_nav_menu() function を見ると、アイテムは walk_nav_menu_tree() によって書かれています。これは Walker_Nav_Menu を呼び出して作業を行うためのものです)。 method start_el() 各メニュー項目に対して呼び出されます。この関数では、クラスがnav_menu_css_classでフィルタリングされ、idがnav_menu_item_idでフィルタリングされていることがわかります。したがって、これらのフックに独自のコードをアタッチするとあなたが欲しいものに。

サブメニュー 常にメインラッパーである<ul class="sub-menu"> でラップされています menu_idおよびmenu_class引数 で変更できます。

4
Jan Fabry

nav_menu_item_idおよびnav_menu_css_classフィルタフックを使用して、各項目のIDとクラスを次のように変更できます。

add_filter('nav_menu_item_id', 'clear_nav_menu_item_id', 10, 3);
function clear_nav_menu_item_id($id, $item, $args) {
    return "";
}

add_filter('nav_menu_css_class', 'clear_nav_menu_item_class', 10, 3);
function clear_nav_menu_item_class($classes, $item, $args) {
    return array();
}

これは<li id="" class="">という項目になります。同じメカニズムを使用して、IDをページスラッグなどの便利なものに設定できます。

3
Marcus Downing
function wp_nav_menu_remove_attributes( $menu ){
    return $menu = preg_replace('/ id=\"(.*)\" class=\"(.*)\"/iU', '', $menu );
}
add_filter( 'wp_nav_menu', 'wp_nav_menu_remove_attributes' );
1
zeo

この解決策は wp3layout に投稿されました。これをあなたのテーマのfunction.phpに追加してください。

 
関数remove_css_id_filter($ var){
 return is_array($ var)? array_intersect($ var、array( '現在のメニュー項目')): ''; 
} 
 add_filter( 'page_css_class'、 'remove_css_id_filter'、100、1); 
 add_filter( 'nav_menu_item_id'、 'remove_css_id_filter'、100、1); 
 add_filter( 'nav_menu_css_class'、 'remove_css_id_filter'、100、1); 

お役に立てれば。

0
Richy