'container' => false
の設定や theme_location の登録、フォーラムの検索など、いくつかのオプションを試してみましたが、wp_nav_menuに含まれる "div"を削除することはできません。
<?php get_nav_menu();?>
function get_nav_menu() {
$navMenuDefaults = array(
'theme_location' => 'header-nav',
'menu' => '',
'container' => false,
'container_class' => '',
'container_id' => '',
'menu_class' => '',
'menu_id' => '',
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'depth' => 0,
'walker' => ''
);
return wp_nav_menu($navMenuDefaults);
}
そしてfunctions.phpでは:
function register_top_nav() {
register_nav_menu('header-nav',__( 'Header Nav' ));
}
add_action( 'init', 'register_top_nav' );
次のような出力が得られる理由はわかりません。
<div class="">
<ul>
<li class="page_item page-item-2">
<a href="url">Sample Page</a>
</li>
</ul>
</div>
次のようにするにはどうすればよいですか。
<ul class="abc">
<li>
<a href="#">dfdf</a>
</li>
</ul>
ありがとう。
参考:container => ''
は文字列操作で、デフォルトはdiv
で設定されています。true or false like bool expression
は使用できません。
container => 'ul'
を変更するだけで、見たいものが手に入ります。詳細についてはこれを読んでください: https://developer.wordpress.org/reference/functions/wp_nav_menu/
ありがとうムーサ
WordPress管理ダッシュボードのAppearance > Menus
パネルにメニューを作成していません 。
私の推論は、以下の条件下で起こるバグに基づいています。
wp_nav_menu()
がデフォルトの'fallback_cb'
引数'wp_page_menu'
で呼び出されました'container'
引数でwp_nav_menu()
が呼び出されました( empty()
関数 がtrue
を返すもの)次のいずれかで<div>
コンテナを削除する必要があります。
Appearance > Menus
パネルにメニューを作成します。新しいメニューを登録済みの<div>
テーマの場所に関連付けなくても、余分な'header-nav'
は消えます。'fallback_cb'
引数を、デフォルトのマークアップ(または空の文字列)を返すカスタム関数に変更します。
'fallback_cb' => function() { return ''; },
wp_nav_menu()
関数が指示されたメニューを見つけることができない場合、それはメニューマークアップを生成するためにさらに2つのことを試みます:
'fallback_cb'
引数で指定された関数によって生成されたメニューマークアップを表示します(デフォルトでは、 wp_page_menu()
)。投稿されたマークアップは投稿IDが2
でタイトルが "Sample Page"のpage
投稿タイプで、おそらく新しいWordPressインストールを示しているので、メニューが作成されていないと考えるのは妥当でしょう。これは、フォールバック関数がインストール内の任意の数のページから即時メニューを作成するため、wp_nav_menu()
呼び出しがwp_page_menu()
にフォールバックする可能性が高いことを示しています。
'fallback_cb'
関数が呼び出されると、wp_nav_menu()
に与えられたのと同じ引数が渡されます(デフォルトの引数とマージされます)。 WordPress 4.4.0以降、この関数は実際に'container'
引数を受け入れて処理するため、wp_page_menu()
関数に関するCodexのドキュメントは少し古くなっています。そのため、wp_page_menu()
に渡したのと同じ'container'
引数、''
(空の文字列リテラル)またはfalse
を使ってwp_nav_menu()
が呼び出されます。
問題の本質は、wp_page_menu()
内の これらの行 に由来する矛盾する動作です。
// Fallback in case `wp_nav_menu()` was called without a container.
if ( empty( $container ) ) {
$container = 'div';
}
そのため、empty()
はfalse
と''
の両方をtrue
に評価するので、このちょっとしたフェイルセーフはコンテナが欲しくないことに夢中になっていて、「for」に戻って追加します。
このシナリオで試すことができます。
ステップ1:
このコードをあなたのテーマのfunctions.php
ファイルに入れてください。
add_action( 'after_setup_theme', 'theme_nav_setup' );
if ( ! function_exists( 'theme_nav_setup' ) ){
function theme_nav_setup() {
register_nav_menu( 'header-nav_new', __( 'Main Menu', 'text-domain' ) );
}
}
ステップ2:
それからあなたがこのメニュー出力を見ることができるところでこれを呼び出してください:
wp_nav_menu( array(
'menu' => 'header-nav_new',
'theme_location' => 'header-nav_new',
'depth' => 6,
'container' => 'ul',
'fallback_cb' => 'wp_page_menu',
'menu_class' => 'abc'
)
);
私の経験上、登録済みのメニューの場所にmenuをまだ割り当てていない場合は、接頭辞container
を付けた引数設定はすべて機能しません。変更を確認する前に、作成したメニューを登録済みのメニューの場所に割り当てる必要があります。
はい、あなたはこのコードを使うことができます
$nav_menu = array(
'title_li' => '',
'container' => '',
'theme_location' => 'header-nav',
'menu_class' => '',
'menu_id' => '',
);
wp_nav_menu( $nav_menu );
上記のコードは、ulとliの両方のタグにクラスとIDを持たずに、メニューをulとliの形式で表示します。
"container"をfalseに設定すると、環境上のどこかにバグがあるか、何か他のものと衝突しない限り、これはうまくいくはずです。
実際、私はこれを二十五と私のテーマフォレストテーマの一つでテストしました。
変更をすぐに反映していない内部キャッシュがあるかどうかを確認できますか?
ありがとう