WordPress自定义主题 - 在footer.php中调用菜单未显示

5
我是一个有用的助手,可以翻译文本。
我正在尝试为WordPress创建自定义网站主题,但遇到了一些问题。我在网站的页眉和页脚部分使用了两个完全相同的菜单。
调用:
wp_nav_menu(array('theme_location' => 'header'));

在header.php中工作正常,菜单可以正常打印出来,但如果我在footer.php文件中做相同的事情,菜单不会打印出来,并且var_dump(wp_nav_menu(array('theme_location' => 'header')));打印false。
我尝试了一些在Google上找到的解决方法,修改functions.php文件,但它们都没有帮助我解决这个问题。我的functions.php文件现在只包含一行。
register_nav_menus( array( 'header' => 'Header menu', 'footer' => 'Footer menu' ) );

而且,是的,我尝试使用

wp_nav_menu(array('theme_location' => 'footer'))

同样的结果也可以通过在header.php中调用相同的函数来实现。
wp_nav_menu(array('theme_location' => 'footer'))

菜单运作良好。
2个回答

14

您已成功注册了两个导航菜单。我通常会在我的主题初始设置挂钩中进行这样的操作,该挂钩被挂接到after_setup_theme挂钩上。因此,在您的functions.php文件中,我会像这样做:

function pietergoosen_theme_setup() {
  register_nav_menus( array( 
    'header' => 'Header menu', 
    'footer' => 'Footer menu' 
  ) );
 }

add_action( 'after_setup_theme', 'pietergoosen_theme_setup' );

请记住,您不一定非得用这种方式。以下方法也可以使用。

register_nav_menus( array( 
        'header' => 'Header menu', 
        'footer' => 'Footer menu' 
      ) );

如果有菜单存在,您现在应该在后台的“外观->菜单->管理位置”下看到两个菜单。

菜单截图

为了页脚菜单,在需要显示菜单的页脚中添加以下代码:

<nav id="footer-navigation" class="site-navigation footer-navigation" role="navigation">
       <?php wp_nav_menu( array( 'theme_location' => 'footer', 'menu_class' => 'nav-menu', 'fallback_cb' => false ) ); ?>
</nav>

在这个阶段,什么都不会显示,我认为你也卡在了这里。原因是没有将任何项分配给菜单,如果没有将任何内容分配给菜单,则不会显示任何内容。因此,我们必须插入一些要显示的内容。

在后台,转到“外观>菜单>编辑菜单”。在“菜单名称”字段中,输入菜单的名称,然后单击“创建菜单”。现在您可以在菜单屏幕中添加菜单了。

菜单截图

现在,您可以从左侧选择要插入菜单的项目。您还可以设置菜单的位置,在本例中位于页脚。我选择在页脚中显示类别。完成后,请单击“保存菜单”。

已保存菜单的截图

现在,您应该能够在前端看到您的导航菜单了。

页脚菜单截图

现在,您只需要为您的导航栏添加样式即可。对于头部导航菜单,您将执行完全相同的操作,只是在header.php中添加菜单调用。希望您会发现这有用。


1
非常棒的回答 - 你在这里超出了职责范围。 - tpbapp
1
谢谢你的回答,这很有帮助。我按照你的步骤做了同样的事情,但可能跳过了其中一个步骤,所以它没有起作用。我再次按照你的步骤重新创建了整个菜单,现在它可以正常工作了。 - Dominik Havlicek

0

我正在制作我的第二个WP主题,但遇到了一个问题。除了页面顶部的标准导航菜单外,页脚元素还包含三个单独的子菜单,可以加载各自的条目。它们分为三个区域:产品范围、行业类型和服务。因此,footer.php上的源代码如下:

<div class="col-sm-3" style="float:left">
    <h3>Product Range</h3>
    <?php wp_nav_menu( array( 'footer' => 'product-range', 'container_class' => 'footer-menu' ) ); ?>
</div>
<div class="col-sm-3" style="float:left">
    <h3>Industry Type</h3>
    <?php wp_nav_menu( array( 'footer' => 'industry-type', 'container_class' => 'footer-menu' ) ); ?>
</div>
<div class="col-sm-3" style="float:left">
    <h3>Services</h3>
    <?php wp_nav_menu( array( 'footer' => 'services', 'container_class' => 'footer-menu' ) ); ?>
</div>

在 functions.php 中,我已经包含了以下内容:
*Add footer Menus
*/
    function register_my_menus() {
    register_nav_menus(
        array(
           'product-range' => __( 'Product Range' ),
           'industry-types' => __( 'Industry Types' ),
           'services' => __( 'Services' )
        )
     );
}

add_action('init','register_my_menus');

所有三个菜单的输出都是相同的,这不是我想要的:

Product Range

COVID19 Policy
Latest and Greatest
About Us
Contact us1
Customer Service
Our Guarantee

Industry Type

COVID19 Policy
Latest and Greatest
About Us
Contact us1
Customer Service
Our Guarantee

Services

COVID19 Policy
Latest and Greatest
About Us
Contact us1
Customer Service
Our Guarantee 

我在CMS中添加的前两个项目,其余的是从其他地方自动生成的?

怎么回事?


这并没有真正回答问题。如果您有不同的问题,可以通过点击提问来提出。如果您想在此问题获得新的答案时得到通知,您可以关注此问题。一旦您拥有足够的声望,您还可以添加悬赏以吸引更多关注。- 来自审核 - Dom

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