web-dev-qa-db-ja.com

Genesis Theme Frameworkのナビゲーションバーにウィジットエリアを作成しますか?

モデレータのメモ:元のタイトルは「ナビゲーションバーにウィジェット領域を作成するにはどうすればよいですか(創世記固有)」(

ナビゲーションバーにウィジェット領域を作成しようとしています。私はBill Ericksonの素晴らしいチュートリアル ここ ナビゲーションバーに静的コンテンツを追加することでこれを修正しようとしています。

これは、ウィジェット領域を登録して配置するためにfunctions.phpファイルに追加したコードです。

    genesis_register_sidebar(array(
    'name'=>'Nav Right',
    'description' => 'This is the right section of the navbar.',
    'before_widget' => '<div id="%1$s" class="widget %2$s">', 'after_widget'  => '</div>',
    'before_title'=>'<h4 class="widgettitle">','after_title'=>'</h4>'
));

//Adding the widget area to the navbar
add_filter('genesis_nav_items','navbar_widget',10,1);
add_filter('wp_nav_menu_items','navbar_widget',10,1);
function navbar_widget() {
    ?>
    <div class="nav_right">
    <?php if (!dynamic_sidebar('Nav Right')) : ?>
            <div class="widget">
            <h4><?php _e("Nav Right", 'genesis'); ?></h4>
            <p><?php _e("This is a widgeted area which is called Nav Right.", 'genesis'); ?></p>
        </div>
    <?php endif; ?>
    </div><!-- end .nav-right -->
    <?php
}

しかし、私が最後になるのはこれです:

alt text

ナビゲーションバーの外側のウィジェット領域(およびナビゲーションバーから削除されたリンク - [ホーム]および[バージョン情報]リンクがあるはずです)。

これはhtmlです(私がページのソースを見るとき):

<body class="home blog logged-in content-sidebar"> 
 <div id="wrap"> 
<div id="header"><div class="wrap"><div id="title-area"><h1 id="title"><a href="http://travisnorthcutt.com/gateway/" title="Research Valley International Gateway">Research Valley International Gateway</a></h1><p id="description">Just another WordPress site</p></div><!-- end #title-area --><div class="widget-area"></div><!-- end .widget_area --></div><!-- end .wrap --></div><!--end #header--> 
   <div class="nav_right">
                <div class="widget">
            <h4>Nav Right</h4>
            <p>This is a widgeted area which is called Nav Right.</p>
        </div>
        </div><!-- end .nav-right -->
  <div id="nav"><div class="wrap"></div></div>

作成された新しいウィジェット領域を<div id="nav"></div>内に収める方法についての提案はありますか?

3

アクションではなく、フィルタを追加しています。 Genesisフックがどのように機能するかはわかりませんが、ネイティブのwp_nav_menu_itemsはカスタムメニュー項目のマークアップを渡します(そして戻します)。

追加のものをエコーする代わりに、それをinputとreturnに追加するべきです。

これは明らかにあなたがリンクしたチュートリアルで行われる方法です:

add_filter('wp_nav_menu_items','follow_icons',10,1);
function follow_icons($output) {
    $follow = 'some stuff';
    return $output.$follow;
}

更新します。 サイドバー部分の追加を忘れていました。サイドバーは定義により反映されているので、そのような方法で使用するにはおそらくその出力をバッファする必要があります。たぶん、メニューの中にウィジェットの領域を文字通りに作るよりは、近くでこれを可能にするフックを探すほうが良いのでしょうか?

2
Rarst