誰かが Walker Class がどのように機能するのかを説明できますか?クラス内のメソッドは常に親メソッドをオーバーロードする必要がありますか?
私はウォーカークラスについて調べて読みました。私はテストを実行し、私はコードのまわりで遊んだそして私はついにそれを理解するようになった。これが他の人にも役立つことを願っています。
これには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