Создать область виджетов на панели навигации для фреймворка темы Genesis?


( Примечание модератора: Оригинальное название было "Как я могу создать область виджетов на панели навигации (специфично для Genesis)?"(

Я пытаюсь создать область виджетов на панели навигации. Я пытаюсь адаптировать это из превосходного учебника Билла Эриксона здесь по добавлению статического контента на панель навигации.

Это код, который я добавил в свой 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>?

Author: MikeSchinkel, 2010-10-06

1 answers

Вы добавляете фильтр, а не действие. Я не знаю, как работает крючок Genesis, но native wp_nav_menu_items передает (и ожидает возврата) разметку пользовательских пунктов меню.

Вместо того, чтобы повторять ваши дополнительные материалы, вы должны добавить их для ввода и возврата.

Ясно, как это делается в учебнике, на который вы ссылаетесь:

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

Upd. Забыл добавить о боковой панели. Поскольку боковые панели повторяются по определению, вам, вероятно, придется буферизировать их вывод для использования таким образом. Может быть, вместо того, чтобы делать виджет буквально внутри меню, лучше поискать крючок, который позволяет это сделать поблизости?

 2
Author: Rarst, 2010-10-08 17:04:19