将<li>附加到wordpress主导航自定义菜单</li>

时间:2014-07-19 08:13:38

标签: wordpress search menu nav

我正在努力学习,但很明显我用PHP吮吸 - 如何添加:

<?php get_search_form(); ?>

到此结尾(作为最后一个列表元素<li>)???

<?php if(has_nav_menu('primary_navigation')): wp_nav_menu(array( > 'theme_location' => 'primary_navigation' )); endif; ?>

1 个答案:

答案 0 :(得分:0)

在代码中未提及

wp_nav_menu_items,因此没有关于如何使用它的具体描述。

wp_nav_menu_items可以在

的第347行找到
  

WP-包括/ NAV-菜单的template.php

$items = apply_filters( 'wp_nav_menu_items', $items, $args );
wp_nav_menu

codex中,它声明了以下内容

  

显示在外观→菜单面板中创建的导航菜单。

因此,这意味着wp_nav_menu_items仅在存在“菜单”面板中创建的导航菜单时触发,而不是在默认导航菜单上触发。在我看来,这是一个设计缺陷。 wp_nav_menu_items实际上也应该包含在默认菜单中。这也是我测试的任何教程中都没有提到的一个方面。

我测试过的另一个过滤器wp_list_pages似乎按预期工作。

您的代码也存在问题。当我将它添加到默认导航栏时,我所做的任何搜索都会将我发送到我的数据库。实际上又来了。我无法得到适当的例子来工作。我最终在一个名为search-box-on-navigation-menu的插件中找到了这段代码。

<?php
add_filter('wp_nav_menu_items','add_search_box', 10, 2);
function add_search_box($items, $args) {

        ob_start();
        get_search_form();
        $searchform = ob_get_contents();
        ob_end_clean();

        $items .= '<li>' . $searchform . '</li>';

    return $items;
    }
?>

要使此代码在默认导航栏上运行,只需将以下行添加到代码add_filter('wp_list_pages','add_search_box', 10, 2);,以便您的结束代码为

<?php
add_filter('wp_list_pages','add_search_box', 10, 2);
add_filter('wp_nav_menu_items','add_search_box', 10, 2);
function add_search_box($items, $args) {

        ob_start();
        get_search_form();
        $searchform = ob_get_contents();
        ob_end_clean();

        $items .= '<li>' . $searchform . '</li>';

    return $items;
}    
?> 

希望这个帮助