web-dev-qa-db-ja.com

ウォーカークラスはどのように機能しますか?

誰かが Walker Class がどのように機能するのかを説明できますか?クラス内のメソッドは常に親メソッドをオーバーロードする必要がありますか?

6
Karun

私はウォーカークラスについて調べて読みました。私はテストを実行し、私はコードのまわりで遊んだそして私はついにそれを理解するようになった。これが他の人にも役立つことを願っています。

これにはwalkerクラスを実装する必要があります。

これは簡単な例です。

$defaults = array(
        'theme_location'  => 'primary',
        'container'       => 'ul',
        'menu_class'      => 'nav navbar-nav main-nav',
        'walker'          => new Primary_Walker_Nav_Menu()
);

wp_nav_menu( $defaults );

上記のコードブロックでは、wp_nav_menu()関数は引数として$defaultsを取ります。配列$defaultsでは、最後のキーはwalkerです。 walkerキーの値はクラスPrimary_Walker_Nav_Menuのオブジェクトです。 functions.phpファイルに次のコードを実装します。

class Primary_Walker_Nav_Menu extends Walker_Nav_Menu {
    function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
        if ( array_search( 'menu-item-has-children', $item->classes ) ) {
            $output .= sprintf( "\n<li class='dropdown %s'><a href='%s' class=\"dropdown-toggle\" data-toggle=\"dropdown\" >%s</a>\n", ( array_search( 'current-menu-item', $item->classes ) || array_search( 'current-page-parent', $item->classes ) ) ? 'active' : '', $item->url, $item->title );
        } else {
            $output .= sprintf( "\n<li %s><a href='%s'>%s</a>\n", ( array_search( 'current-menu-item', $item->classes) ) ? ' class="active"' : '', $item->url, $item->title );
        }
    }

    function start_lvl( &$output, $depth ) {
        $indent = str_repeat( "\t", $depth );
        $output .= "\n$indent<ul class=\"dropdown-menu\" role=\"menu\">\n";
    }
}

start_el()メソッドは、単一のツリー項目(<li><span><a>など)の開始HTMLタグを$outputに追加するために使用されます。

start_lvl()メソッドは、walkerがツリー構造内の新しい "branch"の始まりに到達したときに実行されます。一般に、このメソッドはコンテナのHTML要素の開始タグ(<ol><ul><div>など)を$outputに追加するために使用されます。

上記の実装の出力は、次のhtmlコードブロックになります。

<ul id="menu-main-navigation" class="nav navbar-nav main-nav">
   <li class="dropdown ">
      <a href="http://karunshakya.com.np/services/" class="dropdown-toggle">Services</a>
      <ul class="dropdown-menu" role="menu">
         <li><a href="http://karunshakya.com.np/services/selection-et-recrutement/">Sélection et recrutement</a></li>
         <li><a href="http://karunshakya.com.np/services/mise-disposition-de-personnel/">Mise disposition de personnel</a></li>
         <li><a href="http://karunshakya.com.np/services/gestion-de-salaire/">Gestion de salaire</a></li>
      </ul>
   </li>
   <li><a href="http://karunshakya.com.np/news/">News</a></li>
   <li><a href="http://karunshakya.com.np/medias/">Medias</a></li>
   <li class="last-child"><a href="http://karunshakya.com.np/contactez-nous/">Contactez-nous</a></li>
</ul>

下記のリンクは、walkerクラスの使い方を説明しています http://code.tutsplus.com/tutorials/understanding-the-walker-class--wp-25401

9
Karun