wp_nav_menuでULを削除するにはどうすればよいですか?


18

このサイトで検索すると、この質問に対する多くの回答が見つかりました。それらのほとんどは私のテーマに取り組んでいません。

ここに私が見つけた1つの解決策あり、それは私のニーズに応じて機能しています。

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

このコードはul、の最初と最後で削除されwp_nav_menu()ます。だから私のテーマでは

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

しかし、管理者経由でメニューを追加したりアクティブにしたりしないと、問題が再び発生します。 http://domain.com/wp-admin/nav-menus.php

質問 :

<div><ul>**</ul></div>メニューがアクティブかどうかを削除するにはどうすればよいですか。お知らせ下さい


最後に私はそれが働いた:) functions.php

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'default_page_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function default_page_menu() {
   wp_list_pages('title_li=');
} 

header.php

<ul class="primary-nav">
<?php  wp_nav_menu_no_ul(); ?>
</ul>

とにかく再度追加したときに、なぜULを削除したいのですか?menu_classおよびmenu_idパラメータを使用して、ULのクラスおよび/またはid属性を設定できます。

スーパーフィッシュを使いたいです。menu_classそして、menu_idメニューがアクティブになっている場合にのみ作業します。メニューは存在しない場合menu_classmenu_id通りではありません<ul>が、と<div>。だからこそ、wp_nav_menu()あなたについてのあまりにも多くの質問がそれをテストするかもしれない:)
ハハ

回答:


11

関数wp_nav_menuは、メニューが存在しない場合に実行される関数の名前であるfallback_cbの引数を取ります。コードを次のように変更します。

function wp_nav_menu_no_ul()
{
    $options = array(
        'echo' => false,
        'container' => false,
        'theme_location' => 'primary',
        'fallback_cb'=> 'fall_back_menu'
    );

    $menu = wp_nav_menu($options);
    echo preg_replace(array(
        '#^<ul[^>]*>#',
        '#</ul>$#'
    ), '', $menu);

}

function fall_back_menu(){
    return;
}

コンテナをメニューから削除し、wp_nav_menu関数に送信される引数を使用して他の操作を行うこともできます。

お役に立てれば。


@בנייתאתרים-ご説明いただきありがとうございます。しかし、私はここでぼやけています。にfalseを設定した場合nav-menu-template.php fallback_cb - If the menu doesn't exists, a callback function will fire. Defaults to 'wp_page_menu'. Set to false for no fallbackwp_nav_menu_no_ul()動作させるには何を置き換える必要がありfallback_cbますか?とりあえず空白を返すからです。
ハハ

今理解しました:)どうもありがとうございましたבנייתאתרים。ところで、どのようにあなたのニックネームを発音するのですか?私ha ha
ハハ

笑、行ってよかった。
Bainternet

私はそれが好奇心の外に、正確な翻訳がどうなるか、私が想定し、ヘブライ語を、だ、同じことを不思議に思っていました... :)
t31os

:)はい、ヘブライ語とそのニックネームは、しばらくの間、適切に翻訳されれば「ウェブデザイン」のような意味を持ちます。
-Bainternet

57

実際、WordPressはデフォルトでこれをサポートしています:

wp_nav_menu(array(
    'items_wrap' => '%3$s'
));

のデフォルトはitems_wrapです<ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>


3
これは正解です。プログラムによる検索を行う&取り除くために置き換えるの他の回答<ul>が既に追加された後は、ちょうど逆方向にある
mikemike

'container' => falseラッピング<div>も削除したい場合。
ジョージディミトリアディス

デフォルトでWordPressで設定可能です。ありがとう!
アブダラアルバブ

ベストアンサー、ハックの必要なし
Eman

これは、WP 5.2に私のために働いていない
rafaelphp


3

<a>タグのみを印刷する場合は、次の方法を使用できます。

$primaryMenu = array(
    'theme_location'  => 'primary',
    'menu'            => '',
    'container'       => '',
    'container_class' => false,
    'container_id'    => '',
    'menu_class'      => 'menu',
    'menu_id'         => 'primary-menu',
    'echo'            => false,
    'fallback_cb'     => 'wp_page_menu',
    'before'          => '',
    'after'           => '',
    'link_before'     => '',
    'link_after'      => '',
    'depth'           => 0,
    'walker'          => ''
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' );

これは私にとって完璧で、 '' items_wrap '=>'%3 $ s '`のみを設定してもwp 5.2で効果がありません
rafaelphp

2

私にとってはこれがうまくいった:

<?php wp_nav_menu( array(
       'container' => '',
       'items_wrap' => '%3$s' 
) ); ?>

それが役に立てば幸い。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.