使用wp_nav_menu_items更改wordpress菜单项的位置

时间:2016-08-05 17:56:04

标签: wordpress menu

我在wordpress主菜单的顶部添加了一个搜索框和一个“加入电子邮件列表”按钮。搜索框按预期显示,但电子邮件按钮显示在菜单的UL中 - 我可以在完整菜单中通过定位进行补偿,但在响应式移动菜单出现时它会完全隐藏按钮。不确定如何正确地将它从UL中取出。

我发现如果您需要将电子邮件按钮作为外部文件,它将显示在UL之外 - 但这也会导致在非移动版本的主菜单之前显示“1”。令人费解...

这是我的代码,显示了字符串方法和require方法(已注释掉)。

add_filter('wp_nav_menu_items','add_search_box_to_menu', 10, 2);
function add_search_box_to_menu( $items, $args ) {
    if( $args->theme_location == 'main-nav-menu' ) {
        $search_form = get_search_form();
//      $email_button = require_once('emailbutton.php');
        $email_button = '<button id="btn_emaillist">Join Our Email List</button>';
        $items = $search_form . $email_button . $items;
    }
    return $items;
}

你可以在http://example.wdev05.com/看到这个。如何使按钮显示在UL之外,以便在桌面和桌面上都可以看到它。移动,没有任何奇怪的副作用?

1 个答案:

答案 0 :(得分:0)

wp_nav_menu_items将在UL中添加内容。

使用wp_nav_menu过滤器在ul

之外插入内容
function _wp_nav_m_filter( $nav, $args ) {
    if( $args->theme_location == 'main-nav-menu' ) {
        $search_form = get_search_form( false ); // do not echo the form
        $search_form .= '<button id="btn_emaillist">Join Our Email List</button>';
        return $search_form . $nav;
    }
    return $nav;
}
add_filter('wp_nav_menu', '_wp_nav_m_filter', 10, 2);

结帐https://core.trac.wordpress.org/browser/tags/4.5/src/wp-includes/nav-menu-template.php#L451