Change menu items URL

时间:2014-03-12 作者:marcelo2605

我创建了一个单页网站,只在主菜单项上使用锚(#)。

现在,我需要在网站上添加第二个页面,并保留相同的菜单。

我正在使用根主题。然后,我使用以下方法构建菜单:

wp_nav_menu(array(\'theme_location\' => \'primary_navigation\')); 
但是如何将项目url从#contact更改为mywebsite。com。br/#仅在第二页上联系?

3 个回复
最合适的回答,由SO网友:gdaniel 整理而成

在你的模板中,你可以检查你是否在头版,然后呼出不同的菜单。

例如:

if(is_front_page() || is_home()){

 wp_nav_menu(array(\'theme_location\' => \'primary_navigation\'));

}else{

 wp_nav_menu(array(\'theme_location\' => \'secondary_navigation\'));

}
您还必须在功能中注册第二个菜单位置。php文件(如果尚未完成)。

要注册新菜单位置,请执行以下操作:

function register_my_menus() {

    register_nav_menus(array( 
        \'secondary-location\' => __(\'Secondary Location\'),
    ));

}

add_action( \'init\', \'register_my_menus\' );
缺点是您必须在后端管理两个菜单。如果菜单经常更改,这可能是一个问题,因为您必须更新两个菜单。

相反,您可以过滤wp\\u nav\\u菜单,并在打印菜单之前更改url。例如,这将包含在函数中。php

function change_menu($items){

if(!is_front_page()){

  foreach($items as $item){


    $item->url = get_bloginfo("url") . "/" .  $item->url;


  }

}

  return $items;

}

add_filter(\'wp_nav_menu_objects\', \'change_menu\');
上面的代码过滤wp\\u nav\\u menu\\u对象。如果你不在网站首页,它会添加完整的url。否则它只返回常规菜单。使用此方法,您不必在管理中创建第二个菜单。

SO网友:klausduraditz

如果您的菜单包含自定义锚定链接和页面链接(例如,指向第二页、主页、压印或其他任何页面),当您不在首页时,gdaniels change\\u菜单功能将断开这些页面链接。这就是boywonder遇到的问题,因为“change\\u menu”功能将网站url前置到所有菜单链接。但使用boywonders功能“lb\\u menu\\u锚定”,在锚定链接之间切换时,您最终会在首页刷新页面为了避免这种情况,只有当当前页面不是首页时,才能执行lb\\U菜单锚定:

function lb_menu_anchors($items, $args) {
// current page is NOT front page?
  if(!is_front_page()){
    // loop through menu-objects (the links)
    foreach ($items as $key => $item) {
        // check if link begins with \'#\'
        if ($item->object == \'custom\' && substr($item->url, 0, 1) == \'#\') {
            // if so, prepend site_url to link
            $item->url = site_url() . $item->url ;
        }
    }
    // return edited links
    return $items;
  }
  else {
    // return unedited links if current page IS front page
    return $items;
  }
  }

add_filter(\'wp_nav_menu_objects\', \'lb_menu_anchors\', 10, 2);
谢谢你的所有想法

SO网友:boywonder

我一直在使用gdaniel解决方案的一个修改版本,但最近遇到了一个问题,即当使用自定义菜单链接将菜单项指向外部链接时,网站URL在外部链接之前。

如果需要修改锚定链接,而不需要修改外部链接,那么下面的代码应该可以使用。

function lb_menu_anchors($items, $args) {
    foreach ($items as $key => $item) {
        if ($item->object == \'custom\' && substr($item->url, 0, 1) == \'#\') {
            $item->url = site_url() . $item->url;
        }
    }

    return $items;
}
add_filter(\'wp_nav_menu_objects\', \'lb_menu_anchors\', 10, 2);
所有道具归laubsterboy和faye所有:https://laubsterboy.com/blog/2014/09/wordpress-menu-anchor/https://laubsterboy.com/blog/2014/09/wordpress-menu-anchor/#comment-35170

结束

相关推荐

All pages are the same

我的wordpress网站有一个奇怪的问题。My configuration:<WordPress 3.7.1自定义模板3种自定义帖子类型The problem (front-end)<所有页面均相同(cpt帖子)所有导航菜单均消失The problem (back-end)这很奇怪,但自定义帖子类型部分下的所有帖子列表都显示了页面列表。此外,表上的统计数据适当参考了自定义职位类型。一些图片可以更好地解释这一点:唯一正确的表格:其他错误:When the problem occurred?我正