在WordPress中将搜索栏添加到导航菜单

4

http://www.lundarienpress.com/(这是一个WordPress网站)

这是我的网站,我想要在导航菜单中添加一个搜索栏并将其放置在右侧。有什么好的想法吗?

我还没有找到方法。希望论坛上的某个人能帮助我。


分享你已经尝试过的内容。如果你遇到了某个具体的问题,我们会帮助你解决。请参考以下链接以提出合适的问题:(http://stackoverflow.com/help/how-to-ask)、(http://stackoverflow.com//help/mcve) 和 (http://sscce.org)。 - Panther
我不知道该怎么做,我想在这里寻求帮助。 - Elroy Fernandes
我正在使用一个插件,所以我只需要对其进行样式设计。 - Elroy Fernandes
您也可以使用此插件https://wordpress.org/plugins/add-search-to-menu来实现它。 - Vinod Dalvi
3个回答

12

@rockmandew是正确的 - 如果不将get_search_form()设置为false,这段代码就不能正常工作。但即使进行了这样的更改,该函数仍然无法正常工作。

我最初通过将以下内容添加到我的功能文件中,在我的导航菜单中添加了一个搜索表单:

/**
 * Add search box to nav menu
 */
function wpgood_nav_search( $items, $args ) {
    $items .= '<li>' . get_search_form( false ) . '</li>';
    return $items;
}
add_filter( 'wp_nav_menu_items','wpgood_nav_search', 10, 2 );

如果你只有一个菜单或想要在所有菜单中添加搜索框,那么这是一个很好的解决方案。在我的情况下,我只想在主菜单中添加一个搜索框。为了实现这个目标,我选择了以下方法:

/**
 * Add search box to primary menu
 */
function wpgood_nav_search($items, $args) {
    // If this isn't the primary menu, do nothing
    if( !($args->theme_location == 'primary') ) 
    return $items;
    // Otherwise, add search form
    return $items . '<li>' . get_search_form(false) . '</li>';
}
add_filter('wp_nav_menu_items', 'wpgood_nav_search', 10, 2);

值得注意的是,我的主导航在functions文件中被命名为“primary”。这可能因主题而异,因此需要相应更改,例如改为“main”或像初始解决方案中的“header_menu”。


1
在2017年的版本中,它被称为“top”,我花了整整一个小时才找到。 - Michael Rogers

6

Function.php 代码:

function add_last_nav_item($items, $args) {
  if ('header_menu' === $args->menu_id) {
        $homelink = get_search_form(false);
        $items .= '<li>'.$homelink.'</li>';
        return $items;
  }
  return $items;
}
add_filter( 'wp_nav_menu_items', 'add_last_nav_item', 10, 2 );

这里的 get_search_form() 是一个用于获取搜索框的函数。


我应该将这个添加到function.php文件中吗? - Elroy Fernandes
1
是的,你可以将这个添加到function.php文件中。 - Dr.Tricker
欢迎您,批准有效的回复是对其他人有帮助的。 - Dr.Tricker
3
这实际上不应该正常工作,你需要将get_search_form()设置为false,才能生成正确的标记。 - rockmandew

0

两个答案都让我找到了正确的方向,但似乎args的值取决于Wordpress版本(我运行的是5.5),或者主题(我正在使用https://underscores.me/)或其他任何东西(我不是超级WP专家,在开始研究这些WP主题之前)。

如果上述方法对您无效,则有助于转储args并相应地修改代码。

我的args值:

stdClass::__set_state(array( 'menu' => WP_Term::__set_state(array( 'term_id' => 7, 'name' => 'Menu 1', 'slug' => 'menu-1', 'term_group' => 0, 'term_taxonomy_id' => 7, 'taxonomy' => 'nav_menu', 'description' => '', 'parent' => 0, 'count' => 5, 'filter' => 'raw', )), 'container' => 'div', 'container_class' => '', 'container_id' => '', 'container_aria_label' => '', 'menu_class' => 'menu', 'menu_id' => 'primary-menu', 'echo' => true, 'fallback_cb' => 'wp_page_menu', 'before' => '', 'after' => '', 'link_before' => '', 'link_after' => '', 'items_wrap' => '
%3$s
', 'item_spacing' => 'preserve', 'depth' => 0, 'walker' => '', 'theme_location' => 'menu-1', ))

所以我进行了检查分类法(还清理了一下代码):

function add_last_nav_item($items, $args) {
    // just to show you how to dump it out - remove that line afterwards ofcs
    var_export($args);

    // If this is the menu you are looking for, add search form
    if (isset($args->menu->taxonomy) && $args->menu->taxonomy === 'nav_menu') {
        $items .= '<li>' . get_search_form(false) . '</li>';
    }
    return $items;
}
add_filter( 'wp_nav_menu_items', 'add_last_nav_item', 10, 2);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接