web-dev-qa-db-ja.com

メニューウォーカーにパラメータを渡す

メニューウォーカーにパラメータを渡す方法はありますか? BEMスタイルのウォーカーを作成しようとしていますが、ウォーカーを介してメニューリンクに適用するクラスを渡したいと思います。何かのようなもの:

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

@toschoが言ったように、あなたはやったようにパラメータを使ってwalkerクラスを呼ぶことができます:

new BEMwalker( 'mobile' )

BEMwalkerのコンストラクタは(PHPの他の関数やメソッドのように)引数を取るので、$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
        );
    }

}

さらに読むこと: WordPress BEM Menu と呼ばれるGitHubリポジトリもあります。これはBEMのような構文を実装するのに役立つかもしれません。

4
Sven