web-dev-qa-db-ja.com

start_lvlカスタムwalker_nav_menuでは無視されます

これはWordPressを含む私の最初のプロジェクトで、私はフッターメニューのためのカスタムウォーカーを作成しようとして動けなくなりました。

私は基本的にメニューを<ul> <li></li> </ul>構造体から<p> <span></span> </p>構造体に変更したいと思います。

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

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

start_lvl()タグと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";
}

誰がこれが起こっているのか知っていますか - 私は本当に明白なことを逃したことがありますか??

私はそれが助けになればPHP 5.3.6でApache上でWordPressの最新版を実行しています。

前もって感謝します、

フェリックス:)

8
fenfe1

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は子要素に使用されます。

8
stillatmylinux

さて、私がこれを投稿したときに私が間違って読んだものがわからないが、あなたのクラス全体はこのようなものであるべきです:

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 を呼び出すときに 'walker'をパラメータとして渡します。

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

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

3
s_ha_dum

組み込み関数 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
2
Michael Ecklund