web-dev-qa-db-fra.com

Passer un paramètre à un menu

Est-il possible de passer un paramètre à un menu Walker? J'essaie d'écrire un marcheur de style BEM et j'aimerais pouvoir réussir un cours à appliquer aux liens de menu via le marcheur. Quelque chose comme:

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

Comme @toscho l'a dit, vous pouvez appeler la classe de marcheur avec des paramètres comme vous l'avez fait:

new BEMwalker( 'mobile' )

Le constructeur de BEMwalker prendra les arguments (comme toute autre fonction ou méthode en PHP) afin que vous puissiez accéder au (x) paramètre (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
        );
    }

}

Lectures supplémentaires: Il existe également un référentiel GitHub appelé WordPress BEM Menu qui pourrait vous aider à implémenter une syntaxe de type BEM.

4
Sven