Wordpress get_search_form()似乎没有考虑参数

时间:2012-02-26 06:00:15

标签: wordpress search menu menuitem

我手动创建菜单并尝试包含搜索表单。

这是从http://codex.wordpress.org/Function_Reference/wp_get_nav_menu_items的Wordpress文档“构建一个简单的菜单列表”中获取的。

我添加了额外的< li>在完成菜单并添加搜索表单之前的元素。

            // Get the nav menu based on $menu_name (same as 'theme_location' or 'menu' arg to wp_nav_menu)
            // This code based on wp_nav_menu's code to get Menu ID from menu slug

            $menu_name = 'main-menu';

            if ( ( $locations = get_nav_menu_locations() ) && isset( $locations[ $menu_name ] ) ) {

                $menu = wp_get_nav_menu_object( $locations[ $menu_name ] );

                $menu_items = wp_get_nav_menu_items($menu->term_id);

                $menu_list = '<ul id="menu-' . $menu_name . '">';

                foreach ( (array) $menu_items as $key => $menu_item ) {
                    $title = $menu_item->title;
                    $url = $menu_item->url;
                    $menu_list .= '<li><a href="' . $url . '">' . $title . '</a></li>';
                }
                $menu_list .= '<li>' . get_search_form(false) . '</li>';
                $menu_list .= '</ul>';
            } else {
                $menu_list = '<ul><li>No Menu</li></ul>';
            }
            echo $menu_list;

问题在于输出。

&lt; div class =“mainnav”role =“navigation”&gt;

<form role="search" method="get" id="searchform" action="/">
  <input type="text" value="" name="s" id="s" size="40" placeholder="Search" alt="Site Search">
  <input type="submit" id="searchsubmit" value="Search">
</form>
<ul id="menu-main-menu">
  <li><a href="#">Home</a></li>
  <li><a href="#">Sample Page</a></li>
  <li></li>
</ul>

&LT; / DIV&GT;

有人可以告诉我为什么搜索在菜单之前打印,即使我指定echo = false?

2 个答案:

答案 0 :(得分:2)

如果您的主题有searchform.php,那么您可能会点击Ticket #16541get_search_form() ignores $echo if searchform.php exists

如果您只是回显搜索表单,那么您的解决方法很好,但如果您需要在变量中捕获输出,则可以使用output buffering解决此问题:

<?php
ob_start();
get_search_form();
$my_search_form = ob_get_clean();
?>

答案 1 :(得分:1)

我通过从回显中取出get_search_form()并将其打印在自己的php块中来修复此问题。

我有一种感觉(没有完全理解),我正在回应一个首先被回应的陈述的事实引起了这种有趣的行为。将它放在自己的php块中,而不是回应但只是直接调用它来修复问题:

<?php get_search_form(); ?>

欢迎任何有关已发生事件的想法,建议或指导?