start_lvl Ignorado no Custom walker_nav_menu

8

Este é o meu primeiro projeto envolvendo o WordPress e fiquei preso tentando criar um walker personalizado para um menu de rodapé.

Eu basicamente quero mudar o menu da estrutura <ul> <li></li> </ul> para <p> <span></span> </p> .

O menu e outras coisas estão exibindo o arquivo e eu consegui ajustar as funções start_el e end_el sem problemas, então agora recebo:

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

Que é obviamente a meio caminho, eu escrevi as tags start_lvl() e end_lvl() como mostrado abaixo, mas elas são ignoradas pelo WordPress - nada que eu coloquei nelas (mesmo die() ) é executado (o que é um pouco suspeito) mas eu sei que a classe está sendo chamada por causa da função 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";
}

Alguém sabe por que isso está acontecendo - perdi algo realmente óbvio?

Estou executando a versão mais recente do WordPress no Apache com PHP 5.3.6 , se ajudar.

Agradecemos antecipadamente

Felix:)

    
por fenfe1 15.11.2012 / 23:56

3 respostas

8

Sua classe my_extended_walker está OK, mas quando você chamar a função wp_nav_menu , use o parâmetro items_wrap .

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

O start_lvl é usado para elementos filhos.

    
por stillatmylinux 07.08.2013 / 17:36
3

Ok, não sei o que eu li errado quando postei isso, mas toda a sua turma deve ser algo assim:

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";
    }
}

Em seguida, passe o "walker" como um parâmetro quando você chamar wp_nav_menu

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

Se você tem que você deve estar bem. Eu estou olhando para o código de trabalho que faz exatamente isso. Eu não sei sobre colocar tags <p> lá. Você pode obter marcação inválida.

    
por s_ha_dum 16.11.2012 / 00:29
2

Já pensou em buscar todos os itens do menu de navegação usando a função integrada: wp_get_nav_menu_items(); e manualmente saída do conteúdo?

Exemplo: Criando uma lista de menus simples

    // 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
    
por Michael Ecklund 15.02.2013 / 23:58