当前页面的上一子导航/下一子导航?

时间:2012-06-07 作者:Phife Dawz

如何获得只导航当前页面的子页面的上一个/下一个导航?

我指的是url。com/页/child1, url。com/页/child2 等等

我一直在四处寻找,但还是迷路了。

看起来你不能按照wordpress (他们推荐插件。)

7 个回复
最合适的回答,由SO网友:Phife Dawz 整理而成

好了,就在这里,一切正常:

<?php
$pagelist = get_pages("child_of=".$post->post_parent."&parent=".$post->post_parent."&sort_column=menu_order&sort_order=asc");
$pages = array();
foreach ($pagelist as $page) {
   $pages[] += $page->ID;
}

$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>

<div class="navigation">
<?php if (!empty($prevID)) { ?>
<div class="previous">
<a href="<?php echo get_permalink($prevID); ?>" title="<?php echo get_the_title($prevID); ?>">Previous</a>

</div>
<?php }
if (!empty($nextID)) { ?>
<div class="Next">
<a href="<?php echo get_permalink($nextID); ?>" title="<?php echo get_the_title($nextID); ?>">Next</a>
</div>
<?php } ?>
</div>
One little cosmetic thing needs to get fixed, 也就是说,“上一页”和“下一页”链接应该始终显示出来,无论是否还有其他页面。。。

SO网友:Mars

很棒的黑客,它做到了我想要的。我想你们中的一些人可能会被问到我补充的东西,那就是:替代链接

当您浏览父页面时,导航到第一个子页面当您浏览第一个子页面时,导航在不必要时不显示,样式适合应用于后期导航的第十三个主题。

<?php // display nav only if there are child pages
if ($post->post_parent) { // applies only to child pages 
$pagelist = get_pages("child_of=".$post->post_parent."&parent=".$post->post_parent."&sort_column=menu_order&sort_order=asc");
$pages = array();
foreach ($pagelist as $page) {
$pages[] += $page->ID;
}
$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>

<nav class="navigation post-navigation" role="navigation">
<div class="nav-links">
    <?php if (!empty($prevID)) { /* if we are browsing first child, then link to parent page*/ ?>
        <a rel="prev" href="<?php echo get_permalink($prevID); ?>" title="<?php echo get_the_title($prevID); ?>"><span class="meta-nav">&larr;</span> <?php echo get_the_title($prevID); ?></a>
    <?php }
    else { // else, link to previous child ?>
        <a rel="prev" href="<?php echo get_permalink($post->post_parent); ?>"><span class="meta-nav">&larr;</span> <?php echo get_the_title($post->post_parent); ?></a>
    <?php }

    if (!empty($nextID)) { ?>
    <a rel="next" href="<?php echo get_permalink($nextID); ?>" title="<?php echo get_the_title($nextID); ?>"><?php echo get_the_title($nextID); ?> <span class="meta-nav">&rarr;</span></a>
    <?php } ?>
</div>
</nav>                      
                    <?php }
                    else { // if we are browsing parent page, then link to first child
$child_pages = get_pages("child_of=".$post->ID."&parent=".$post->ID."&sort_column=menu_order&sort_order=asc");
$first_child = $child_pages[0]; ?>
<?php if (!empty($first_child)) { ?>
<nav class="navigation post-navigation" role="navigation">
<div class="nav-links">
    <a rel="next" href="<?php echo get_permalink($first_child->ID); ?>"><?php echo get_the_title($first_child->ID); ?> <span class="meta-nav">&rarr;</span></a>

</div>

SO网友:fdsa

您可以使用post->parent\\u page查找当前帖子的父页面,然后将其插入get_page_children,获取父页的所有同级元素,然后在返回的数组中查找下一个和上一个元素。

SO网友:Dave Romsey

如果你愿意走插件路线,我个人也支持这种方式,插件Ambrosite Next/Previous Page Link Plus 真是太棒了。它支持您正在寻找的功能,以及更多功能。

SO网友:Stephen Harris

未经测试,但这应该可以:

首次使用get_pages 查找与当前页面具有相同父级的所有其他页面(或CPT)。然后查找“上一页”和“下一页”。

function wpse5422_the_page_siblings(){
    $post_id = get_the_ID();
    $parent_id = wp_get_post_parent_id($post_id);
    $post_type = get_post_type($post_id);

    $sibling_list = get_pages(array(
         \'sort_column\'=>\'menu_order\',
         \'sort_order\' =>\'asc\',
         \'child_of\' =>$parent_id,
         \'post_type\'=> $post_type
    ));

    if( !$sibling_list || is_wp_error($sibling_list) )
        return false;

    $pages = array();
    foreach ($sibling_list as $sibling ) {
         $pages[] = $sibling->ID;
     }

    $current = array_search($post_id, $pages);
    $prevID = isset($pages[$current-1]) ? $pages[$current-1] : false;
    $nextID = isset($pages[$current+1]) ? $pages[$current+1] : false;

    echo wpse5422_display_prev_next($prevID, $nextID);
 }
上述函数必须在循环中使用-它接受当前页面(或任何层次文章类型),并根据菜单顺序查找上一个和下一个同级页面(即与当前页面相同的父页面)(可以更改为日期或标题)。

然后,它使用以下函数,该函数以两个ID作为参数,只负责生成输出:

 function wpse5422_display_prev_next($prevID=false, $nextID=false){
    if( empty($prevID) && empty($nextID) )
       return false;

    $html = \'<div class="navigation">\';

    if( !empty($prevID) ){
         $html .= \'<div class="alignleft">\';
         $html .= \'<a href="\'.get_permalink($prevID).\'">Previous</a>\';
         $html .= \'</div>\';
     }

    if( !empty($nextID) ){
         $html .= \'<div class="alignright">\';
         $html .= \'<a href="\'.get_permalink($nextID).\'">Next</a>\';
         $html .= \'</div>\';
     }

    $html .= \'</div><!-- .navigation -->\';

    return $html;
}
理想情况下,您应该从中创建一个插件。它将在功能中工作。php——但实际上,它不应该住在那里。

循环内的用法,是否要显示页面链接:wpse5422_the_page_siblings();.

SO网友:Chris

要显示下一个和上一个链接,而不依赖于是否存在更多页面,您需要添加一些条件语句:(编辑了无意义的elseif内容)

<div class="navigation">
<?php if (!empty($prevID)) : ?>
<div class="previous">
<a href="<?php echo get_permalink($prevID); ?>" 
title="<?php echo get_the_title($prevID); ?>">Previous</a>
</div>
<?php else : ?>
<div class="previous disabled">
<a href="#">Previous</a>
</div>
<?php endif; ?>
<?php if (!empty($nextID)) : ?>
<div class="next">
<a href="<?php echo get_permalink($nextID); ?>" 
title="<?php echo get_the_title($nextID); ?>">Next</a>
</div>
<?php else : ?>
<div class="next disabled">
<a href="#">Next</a>
</div>
<?php endif; ?>
</div>

SO网友:Purple Tentacle

\'wpse5422_the_page_siblings()\' 解决方案效果很好,我无法发表评论,因为我的代表级别太低,但我唯一的改变是:

\'sort_column\'=>\'menu_order\',
为此:

\'sort_column\'=>\'menu_order title\',
这样,如果用户将每个页面的排序顺序保留为0,它将默认按页面标题的字母顺序排序。

谢谢

结束

相关推荐

Thesis -style Navigation

我正在研究一个主题,我希望用户能够像论文一样选择要在主题选项页面中显示的页面。我已经在谷歌上搜索了几个小时的逆向工程论文,但还没有找到一个很好的解决方案。我想知道是否有人做过这件事或看过教程。