如果没有子页面,则不显示父页面

时间:2014-02-25 作者:AndrettiMilas

这是codex中最常用于侧栏菜单的代码。它显示顶级祖先和祖先本身的子页面。

这段代码有一点我想更改——如果没有子级,我不想显示顶级祖先!有一个指向自身的单链接菜单没有多大意义。

如何编辑此代码以实现此目的?我以前也问过类似的问题,但从未得到正确的答案。给出的所有答案还列出了父母子女的子女(第二级子女页面)。

在函数中。php

// Sub-pages menu
if(!function_exists(\'get_post_top_ancestor_id\')){
/**
 * Gets the id of the topmost ancestor of the current page. Returns the current
 * page\'s id if there is no parent.
 * 
 * @uses object $post
 * @return int 
 */
function get_post_top_ancestor_id(){
    global $post;

    if($post->post_parent){
        $ancestors = array_reverse(get_post_ancestors($post->ID));
        return $ancestors[0];
    }

    return $post->ID;
}}
称之为:

<ul class="subpages">
    <?php wp_list_pages( array(\'title_li\'=>\'\',\'include\'=>get_post_top_ancestor_id()) ); ?>
    <?php wp_list_pages( array(\'title_li\'=>\'\',\'depth\'=>1,\'child_of\'=>get_post_top_ancestor_id()) ); ?>
</ul>
此代码检查页面是否有子级,我很好奇是否可以将其与上面的代码合并以创建正确的代码:

$children = get_pages(\'child_of=\'.$post->ID);?>
if( count( $children ) != 0 ) { show list as normal }
else { show "no parent" text }

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

就个人而言,我认为这是最简洁、最不密集(数据库查询)的解决方案:

<?php
$parentid = $post->post_parent ? @ array_pop( get_post_ancestors( $post ) ) : $post->ID;
$children = wp_list_pages(
    array(
        \'child_of\' => $parentid,
        \'title_li\' => \'\',
        \'echo\'     => false,
    )
);

if ( $children ) : ?>

    <ul class="subpages">
        <li><a href="<?php echo get_permalink( $parentid ) ?>"><?php echo get_the_title( $parentid ) ?></a></li>
        <?php echo $children ?>
    </ul>

<?php else : ?>

    Nothing!

<?php endif ?>

SO网友:Howdy_McGee

这可能不是你想要的,但我使用弗兰肯斯坦的方法,它完成了工作:

首先,让我们检查是否需要显示子页面,这将确保此页面具有子页面或是子页面,并且我们不在404页面上-如果为true,我们将获得祖先(父)ID,然后运行两次WP\\U List\\U页面,以便我们在同一列表中显示父和子页面。

<?php if((hasChildren($post->ID) || $post->post_parent) && !is_404()) : $ancestorID = getAncestorID(); ?>
<ul class="subpages">
    <?php wp_list_pages(array(\'title_li\' => \'\', \'include\' => $parentID, \'echo\' => 1)); ?>
    <?php wp_list_pages(array(\'title_li\' => \'\', \'child_of\' => $parentID, \'echo\' => 1)); ?>
</ul>
<?php endif; ?>

Into your functions.php File

/** Function to get Ancestor ID **/
function getAncestorID(){
    global $post;
    $id = $post->ID;

    if ($post->post_parent){
        $ancestors=get_post_ancestors($post->ID);
        $root=count($ancestors)-1;
        $id = $ancestors[$root];
    } 
    else if(is_singular(\'post\') || is_archive() || (is_home() && !is_front_page())){
        $id = get_option(\'page_for_posts\');
    }

    return $id;
}

/** Check if page Has Children **/
function hasChildren($pid) {
    $children = get_pages(\'child_of=\'.$pid);
    if($children)
        return true;
    else
        return false;
}

结束

相关推荐