Passa um parâmetro para um menu walker

4

Existe alguma maneira de passar um parâmetro para um menu walker? Eu estou tentando escrever um walker estilo BEM, e eu gostaria de poder passar uma classe para aplicar aos links de menu através do walker. Algo como:

<?php
wp_nav_menu(array(
    "container"      => false,
    "depth"          => 3,
    "items_wrap"     => "%3\$s",
    "theme_location" => "primary",
    "walker"         => new BEMwalker("mobile"),
));
?>
    
por JacobTheDev 05.05.2016 / 23:56

1 resposta

5

Como @toscho disse, você pode chamar a classe walker com parâmetros como você fez:

new BEMwalker( 'mobile' )

O construtor de BEMwalker receberá os argumentos (como qualquer outra função ou método no PHP) para que você possa acessar o (s) parâmetro (s) via $this :

class BEMwalker extends Walker_Nav_Menu {

    private $classes;

    public function __construct( $classes = '' ) {
        $this->classes = $classes;
    }

    public function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
       $output .= sprintf( "<li class=\"%s\"><a href=\"%s\">%s</a></li>",
            $this->classes,
            $item->url,
            $item->title
        );
    }

}

Outras leituras: Há também um repositório do GitHub chamado Menu BEM do WordPress que pode ajudá-lo a implementar um BEM- como sintaxe.

    
por Sven 06.05.2016 / 15:26

Tags