start_lvlはCustom walker_nav_menuで無視されます


8

これはWordPressに関する最初のプロジェクトで、フッターメニュー用のカスタムウォーカーを作成しようとして立ち往生しました。

基本的にメニューを<ul> <li></li> </ul>構造から構造に変えたいです<p> <span></span> </p>

メニューとものはファイルを表示していて、私は問題なくstart_elend_el機能を調整することができたので、今これを取得します:

<ul> <span>*link*</span> <span>*link*</span> </ul>

明らかに途中ですが、以下に示すようにstart_lvl()and end_lvl()タグを記述しましたが、それらはWordPressによって無視されます-私がそれらに入れたものは何もdie()実行されません(少し疑わしいです)が、クラスが呼び出されていることはわかっていますstart_el()機能。

function start_lvl(&$output, $depth = 0, $args = array()) {
    $output = "\n<p class=\"sub-menu\">\n";
}

function end_lvl(&$output, $depth = 0, $args = array()) {
    $output .= "\n</p>\n";
}

なぜこれが起こっているのか誰か知っていますか?本当に明白なものを見逃しましたか?

5.3.6それが役に立った場合、私はPHPを備えたApacheで最新バージョンのWordPressを実行しています。

前もって感謝します、

フェリックス:)


1
あなたが示したことに基づいて、すべての明白なものは正しいように見えます。
totels

回答:


8

my_extended_walkerクラスは問題ありませんが、wp_nav_menu関数を呼び出すときはitems_wrapパラメータを使用します。

wp_nav_menu( array( 'items_wrap' => '<p>%3$s</p>', 'walker'=>new my_extended_walker() ) );

start_lvlは子要素に使用されます。


2
start_lvlは子要素に使用されます。あなたは私の人生で多くのことを保存しました
アシュトシュ2016

3

わかりました、これを投稿したときに何が間違っていたかわかりませんが、クラス全体は次のようになります:

class my_extended_walker extends Walker_Nav_Menu {
    function start_lvl(&$output, $depth = 0, $args = array()) {
        $output .= "\n<p class=\"sub-menu\">\n";
    }

    function end_lvl(&$output, $depth = 0, $args = array()) {
        $output .= "\n</p>\n";
    }
}

そして、あなたが呼び出すときにパラメータとして「ウォーカー」を渡します wp_nav_menu

wp_nav_menu( array( 'walker'=>new my_extended_walker() ) );

あなたがそれを持っているなら、あなたは大丈夫なはずです。私はまさにそれを行う作業コードを見ています。私は<p>そこにタグを置くことについては知りません。無効なマークアップを取得する可能性があります。


こんにちは、ええ、私は以下を実行しました。これはフルクラスです
fenfe1 '11

class BB_Nav_Footer_Walker extends Walker_Nav_Menu {function start_lvl(&$ output、$ depth = 0、$ args = array()){$ output = "\ n <p class = \" sub-menu \ "> \ n"; } function end_lvl(&$ output、$ depth = 0、$ args = array()){$ output。= "\ n </ p> \ n"; }}
fenfe1 2012年

これらの関数で何かを実行できるかどうかを確認する<div>代わりに使用してみました<p>が、これまでのところ喜びはありません:(
fenfe1

ウォーカーを壊すべきではありませんが、無効なマークアップにつながるかもしれません。あなたは持っていないあなたに。それは問題を引き起こしている可能性があります。それはあなたが投稿した完全なウォーカーですか?<div><p>$output =$output .=start_lvl
s_ha_dum 2012年

こんにちは、ええ、私は固定.=これは今完全なクラスである(私は削除ビットをstart_lvl()してend_lvl()、彼らは違いをしたかどうかを確認するための機能を) - pastebin.com/zfcBxHd8
fenfe1

2

組み込み関数を使用してすべてのナビゲーションメニュー項目をフェッチしwp_get_nav_menu_items();、コンテンツを手動で出力することを考えましたか?

例::シンプルなメニューリストの作成

    // Get the nav menu based on $menu_name (same as 'theme_location' or 'menu' arg to wp_nav_menu)
    // This code based on wp_nav_menu's code to get Menu ID from menu slug

    $menu_name = 'custom_menu_slug';

    if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {
    $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );

    $menu_items = wp_get_nav_menu_items($menu->term_id);

    $menu_list = '<ul id="menu-' . $menu_name . '">';

    foreach ( (array) $menu_items as $key => $menu_item ) {
        $title = $menu_item->title;
        $url = $menu_item->url;
        $menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>';
    }
    $menu_list .= '</ul>';
    } else {
    $menu_list = '<ul><li>Menu "' . $menu_name . '" not defined.</li></ul>';
    }
    // $menu_list now ready to output
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.