使用If语句基于父页面生成子菜单

时间:2018-01-02 作者:Beau Beau

我需要根据网站的父页面(或部分)拉一个子菜单。我有三个部分(我们的客栈、餐厅、活动),每个部分都需要一个单独的子菜单,我的客户可以通过WordPress的原生菜单部分进行编辑。

这是我的header.php 拉动菜单。

<?php 
if (is_front_page()) {
    wp_nav_menu( array(
        \'theme_location\'  => \'our-inn-menu\',
        \'menu_id\'         => \'sub-menu\',
        \'container_class\' => \'sub-menu\',
    ) );
} elseif ($post->post_parent == 4) {
    //Parent is Our Inn
    wp_nav_menu( array(
        \'theme_location\'  => \'our-inn-menu\',
        \'menu_id\'         => \'sub-menu\',
        \'container_class\' => \'sub-menu\',
    ) );
} elseif ($post->post_parent == 6) {
    // Restaurant Page 
    wp_nav_menu( array(
        \'theme_location\'  => \'our-restaurant-menu\',
        \'menu_id\'         => \'sub-menu\',
        \'container_class\' => \'sub-menu\',
    ) );
} elseif ($post->post_parent == 8) {
    // Activities Page 
    wp_nav_menu( array(
        \'theme_location\'  => \'activities-menu\',
        \'menu_id\'         => \'sub-menu\',
        \'container_class\' => \'sub-menu\',
    ) );
} else {
    //Everything Else
    wp_nav_menu( array(
        \'theme_location\'  => \'our-inn-menu\',
        \'menu_id\'         => \'sub-menu\',
        \'container_class\' => \'sub-menu\',
    ) );
}
问题是,当我在后端分配每个菜单时,它只显示else 条款,无其他规定。当我移除else 子句,它显示一个空白div.

1 个回复
SO网友:WebElaine

您是否已将菜单分配给wp admin中的主题位置?如果查看“外观”>“菜单”,每个菜单都有一个菜单设置部分,您应该在“显示位置”下选中正确的主题位置

您还可以尝试简化代码。也许出于某种原因,WordPress在代码运行之前还没有识别出它所在的页面/帖子/内容。当事情发生横向变化时,我喜欢将其分解,例如:

<?php
if (is_front_page()) {
    echo \'Front Page\';
} elseif ($post->post_parent == 4) {
    echo \'Child of Our Inn\';
} elseif ($post->post_parent == 6) {
    echo \'Child of Restaurant\';
} elseif ($post->post_parent == 8) {
    echo \'Child of Activities\';
} else {
    echo \'WP did not identify what content it was on\';
}
?>
使用简单的回声,而不是进入您的实际功能,您可以确定您的条件是否得到满足。如果这些条件从未得到满足,那么出于某种原因,WP还不知道它正在提取什么内容,这可能只是意味着页面上有多个循环或类似性质的内容。

此时,我会将if/else语句移动到一个单独的主题文件中,比如page.php - 在模板的主循环中进行验证,一旦成功,您可以将wp_nav_menu 回拨到位,确保他们出现。

您可能希望使用查询调试插件来找出为什么WP不知道在您尝试添加代码的地方显示的是什么内容。可能是将代码移到下面wp_header() 如果它还没有低于标准,它可能会有所帮助。

结束

相关推荐

Use menus with anchors

我有一个CPT归档页面,我想创建一个导航菜单,该菜单将跳转到表单中的锚定<a name=\"post-slug\" http=\"{the permalink goes here}>The CPT Title</a>我已经能够在模板文件中创建锚定,所以这不是问题对于页面顶部的链接本身,我可以手动创建它们,也可以使用WordPress菜单系统中的自定义链接。。。。但是有很多,所以我宁愿尝试在WordPress菜单系统中创建一个常规菜单。问题是,我需要以某种方式调整它的输出,以更改常规