在wordpress的导航菜单中添加搜索栏

adding search bar to the nav menu in wordpress

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

这是我的网站,我正在尝试向导航菜单添加一个搜索栏并将其放在右侧。有任何想法吗 ?

我还没找到办法。我希望论坛中的某个人可以帮助我。

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()是获取搜索框的函数

@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);

值得注意的是,我的主导航在我的函数文件中被命名为 'primary'。这可能因主题而异,因此需要相应地进行更改,即 'main' 或在初始解决方案中,'header_menu'.

两个答案都让我走上了正确的道路,但 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', ))

所以我去检查 taxonomy(也稍微清理了代码):

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);