WordPressデフォルトのCSSクラス出力の例:
<li id="menu-item-55" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-55">
<li class="page_item page-item-37">
メニューとページのリストアイテムには、さまざまな独自のli class
およびid
が付属しています。
メニューおよびページリストのfunctions.php
ファイルでそれらを削除する方法?
いくつかのフィルターにフックして、新しいクラスやIDではなく空の配列または文字列を返すことで、それらを削除できるはずです。
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
add_filter('page_css_class', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
return is_array($var) ? array() : '';
}
特定のクラスを保持したい場合は、次のようにすることができます。
function my_css_attributes_filter($var) {
return is_array($var) ? array_intersect($var, array('current-menu-item')) : '';
}
これは、Richardの回答に追加するものです。
current-menu-itemクラスを別のクラスに変更する場合。
add_filter('nav_menu_css_class', 'my_css_attributes_filter', 100, 1);
add_filter('nav_menu_item_id', 'my_css_attributes_filter', 100, 1);
function my_css_attributes_filter($var) {
if(is_array($var)){
$varci= array_intersect($var, array('current-menu-item'));
$cmeni = array('current-menu-item');
$selava = array('selectedmenu');
$selavaend = array();
$selavaend = str_replace($cmeni, $selava, $varci);
}
else{
$selavaend= '';
}
return $selavaend;
}
単にadd_filter('nav_menu_item_id', '__return_false');
for menu item id
Liを削除する最良の方法は、テストおよび検証済みです。
<?php
$menuParameters = array(
'theme_location' => 'header-menu-top',
'container' => false,
'echo' => false,
'items_wrap' => '%3$s',
'depth' => 0,
);
echo strip_tags(wp_nav_menu( $menuParameters ), '<a>' );
?>
ここに私が思いついた修正があります。 wp_nav_menuからすべてのIDとクラスを削除しますが、クラスやIDの独自の「承認済み」リストを作成できます。また、長い "current-menu-item"を "active"に変更します。デフォルトのWordPress CSSスタイルを維持する場合は、コードのそのセクションを削除してください。この投稿を最小限に抑えるために、コードを含むPastebinへのリンクを次に示します。
http://Pastebin.com/W16cxDfY -functions.phpファイル用
http://Pastebin.com/CGx4aprf -テンプレートの場合、メニューのどこにでも
すべてのリストクラスとIDを削除するだけの場合は、これをfunctions.phpに追加します。
add_filter('nav_menu_item_id', 'filter_menu_id');
add_filter( 'nav_menu_css_class', 'filter_menu_li' );
function filter_menu_li(){
return array('');
}
function filter_menu_id(){
return;
}
Richardの回答への追加:残された空のクラスをクリーンアップする必要があります。
//Strip Empty Classes
add_filter ('wp_nav_menu','strip_empty_classes');
function strip_empty_classes($menu) {
$menu = preg_replace('/ class=(["\'])(?!active).*?\1/','',$menu);
return $menu;
}
私の解決策:
$defaults = array(
'theme_location' => '',
'menu' => '',
'container' => '',
'container_class' => '',
'container_id' => '',
'menu_class' => '',
'menu_id' => '',
'echo' => false, // param important
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'items_wrap' => '',
'depth' => -1,
'walker' => ''
);
ob_start();
echo preg_replace( '#<li[^>]+>#', '<li>', wp_nav_menu( $defaults ) );
$mainNav = ob_get_clean();
// In the page :
echo $mainNav;