Wordpressのテーマにナビゲーションメニューを挿入する機能を作成しました。それをより良く、おそらくより小さくする方法についてのあなたの提案をお願いします。ここにあります:
function cosmos_nav_menu($theme_location, $type) {
switch ( $type ) {
case 'basic-tabs' :
$menu_class = 'nav nav-tabs';
$wrap_before = '';
$wrap_after = '';
break;
case 'stacked-tabs' :
$menu_class = 'nav nav-tabs nav-stacked';
$wrap_before = '';
$wrap_after = '';
break;
case 'basic-pills' :
$menu_class = 'nav nav-pills';
$wrap_before = '';
$wrap_after = '';
break;
case 'stacked-pills' :
$menu_class = 'nav nav-pills nav-stacked';
$wrap_before = '';
$wrap_after = '';
break;
case 'list' :
$menu_class = 'nav nav-list';
$wrap_before = '';
$wrap_after = '';
break;
case 'navbar' :
$menu_class = 'nav';
$wrap_before = "<div class=\"navbar\">\n<div class=\"navbar-inner\">\n<div class=\"container\">\n";
$wrap_before .= "<a class=\"btn btn-navbar\" data-toggle=\"collapse\" data-target=\".nav-collapse\">\n";
$wrap_before .= "<span class=\"icon-bar\"></span>\n<span class=\"icon-bar\"></span>\n<span class=\"icon-bar\"></span>\n</a>\n";
$wrap_before .= "<div class=\"nav-collapse\">\n";
$wrap_after = "\n</div>\n</div>\n</div>\n</div>";
break;
case 'navbar-brand' :
$menu_class = 'nav';
$wrap_before = "<div class=\"navbar\">\n<div class=\"navbar-inner\">\n<div class=\"container\">\n";
$wrap_before .= "<a class=\"btn btn-navbar\" data-toggle=\"collapse\" data-target=\".nav-collapse\">\n";
$wrap_before .= "<span class=\"icon-bar\"></span>\n<span class=\"icon-bar\"></span>\n<span class=\"icon-bar\"></span>\n</a>\n";
$wrap_before .= "<a class=\"brand\" href=\"" . home_url('/') . "\">" . esc_html(get_bloginfo('name', 'display')) . "</a>\n";
$wrap_before .= "<div class=\"nav-collapse\">\n";
$wrap_after = "\n</div>\n</div>\n</div>\n</div>";
break;
}
echo $wrap_before;
wp_nav_menu(array(
'theme_location' => $theme_location,
'container' => false,
'menu_class' => $menu_class,
'walker' => new Bootstrap_Walker()
));
echo $wrap_after;
}
これは基本的に、wordpressのwp_nav_menu()関数のラッパーです。$ type変数に基づいてwp_nav_menu()関数を呼び出す前後にいくつかのhtmlコードを追加します。なしの最初の5つのケースの前後のコード。また、最後の2つのケースでは、かなりのコードの重複があります。$ type変数に指定された文字列がどのケースとも一致しない場合も含めて、それに応じてメッセージをエコーします。
私は当初、この関数を「case」ではなく多くの「if」ステートメントでコーディングしましたが、どちらも見栄えがよくありませんでした。
どんな助けでもありがたいです。