добавление пунктов меню в вордпресс

Я использую wp_nav_menu() и хочу добавить окно поиска как часть меню.

У меня возникли проблемы с пониманием этого, и я надеялся на некоторую помощь:

Мой код:

        <?php 
        $args = array('theme_location' => 'primary', 'container' => false);
        wp_nav_menu( $args ); 
        ?>

Теперь я хочу добавить дополнительный элемент ‹li› в конец меню ‹ul›, и все, что я хочу в ‹li›, это вывод:

        <?php get_search_form();?>

Можно ли это сделать?

functions.php:

add_action('init', 'register_top_menu');

function register_top_menu() {
    register_nav_menu('primary', __('Top Menu', 'leeaenergy'));
}


add_filter('wp_nav_menu_items','add_search', 10, 2);

function add_search($items, $args) {

    if( $args->theme_location == 'primary' )
    return $items . '<li>'.get_search_form().'</li>';
}

person php-b-grader    schedule 25.02.2012    source источник


Ответы (1)


Да, нужно использовать фильтр. Добавьте следующий код в файл functions.php. Измените theme_location на то, что настроено для вашей текущей темы:

add_filter( 'wp_nav_menu_items', 'add_search', 10, 2 );

function add_search( $items, $args ) {
    if ( $args->theme_location == 'primary' ) {
        return $items . '<li>' . get_search_form() . '</li>';
    }
}
person Lee    schedule 25.02.2012
comment
попробовал, но ничего не изменилось, что еще мне нужно? - person php-b-grader; 26.02.2012
comment
Это все, что вам нужно. Попробуйте удалить оператор if и посмотреть, добавит ли он его во все меню. - person Lee; 26.02.2012
comment
проблема в том, что меню не регистрируется ... Я думаю, что оно просто отображало все страницы - я, наконец, как бы зарегистрировал меню, и я нашел другой способ сделать это, но это также создает проблемы ... чертовски больно !!! В любом случае, я буду бороться... спасибо - person php-b-grader; 26.02.2012
comment
Кстати, я не могу проверить это, пока не разберусь с этим меню, поэтому я не могу подтвердить или опровергнуть, что это работает. - person php-b-grader; 26.02.2012
comment
Вы должны использовать get_search_form(false), чтобы предотвратить эхо. - person Metalshark; 21.04.2013