Conditional sidebar menu

时间:2012-03-21 作者:TheGuest

我已经为网站的每个部分创建了一个菜单,我希望侧栏只向部分中的页面显示相关菜单,因此“关于”页面及其子页面将接收“关于”菜单和“建议”页面及其子页面“建议”菜单,依此类推。

我已经把它用于父页面,但我不能让它用于他们的孩子。我尝试了互联网上的各种建议,但似乎没有什么是正确的。

此代码:

<?php if(is_page(\'advice\')){
        wp_nav_menu( array( \'theme_location\' => \'advice-menu\' ) );
} ?>
在正确的部分中获取正确的菜单,但我需要将其扩展到子页面。

所有菜单都在这两个功能中正确注册。php和外观>菜单以及父页面和子页面都使用相同的页面模板。

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

Bainternet的解决方案肯定会奏效,但如果您想使用页面slug而不是ID,可以将其放入函数中。php文件:

// GET PAGE ID FROM THE SLUG, HELPER FUNCTION FOR IS_TREE
function get_ID_by_slug($page_slug) {
    $page = get_page_by_path($page_slug);
    if ($page) {
        return $page->ID;
    } else {
        return null;
    }
}

// DETERMINE IF A PAGE IS IN A DESCENDANT TREE
function is_tree($pid) {      // $pid = The ID of the page we\'re looking for pages underneath
    global $post;         // load details about this page
    $pid = get_ID_by_slug($pid);
    if( is_page() && ($post->post_parent==$pid || is_page($pid) ) )
               return true;   // we\'re at the page or at a sub page
    else
               return false;  // we\'re elsewhere
};
然后将其用于侧栏中的条件语句。php或其他:

<?php if ( is_tree(\'advice\') ) { 
     wp_nav_menu( array( \'theme_location\' => \'advice-menu\' ) );
} elseif ( is_tree(\'another-page-slug\') ) { 
     wp_nav_menu( array( \'theme_location\' => \'another-page-menu\' ) );
} ?>
这将返回“树”中的任何页面,包括父页面本身及其下的所有子页面。希望这有帮助,祝你好运!

SO网友:Bainternet

我有一个功能,我做了一段时间,这将帮助您:

/**
 * Function to check if the current page/ custom is a child of a given one
 *
 * @param (int) - parent id to check
 *
 * @return (bool) - if it is a child true else it returns false
 */
function is_child_of($parent_id) {
    global $post;
    $ps = get_post_ancestors( $post );
    if (empty($ps)) return false;
    return (in_array($parent_id,$ps));
}
唯一的缺点是您必须知道父页面的ID,如果不知道的话,我还可以对其进行一些扩展,以便使用page slug。

无论如何,一旦您有了此功能,就可以将条件检查更改为如下内容:

<?php if(is_page(\'advice\') || is_child_of(12)){
        wp_nav_menu( array( \'theme_location\' => \'advice-menu\' ) );
} ?>
假设通知id为12:)

结束

相关推荐