问题描述

我正在使用页面层次结构,我想显示父母和父母页面的标题 (如果有的话) 。

结构就是这样

首页

起始页> 第二页

起始页> 第二页> 第三页

起始页> 第二页> 第三页> 第四页

标题应该是第四页:「第四页 – 第三页 – 第二页 – 开始」 第三页:「第三页 – 第二页 – 开始」

我发现的解决方案不是那么好:

<title><?php

if(is_page()){

$parent = get_post($post->post_parent);
$parent_title = get_the_title($parent);
$grandparent = $parent->post_parent;
$grandparent_title = get_the_title($grandparent);
    if ($parent) {
        if ($grandparent) {
            echo wp_title('') . " - " . $parent_title . " - " . $grandparent_title . " - ";
        }
        else {
            echo wp_title('') . " - " . $parent_title . " - ";
        }
    }

    else {
        echo wp_title('') . " - ";
    }
}?>  Startpage</title>

在第二页级别,该页面的标题获得双倍…「第二页 – 第二页 – 起始页」

任何人?

最佳解决思路

可能建立在 get_ancestors()上;

例:

if( is_page() ) :
    echo $post->post_title;
    if( $ancs = get_ancestors($post->ID,'page') ) {
        foreach( $ancs as $anc ) {
        echo ' -> ' . get_page( $anc )->post_title;
        }
    }
endif;

次佳解决思路

这是一个解决方案。它使用 get_ancestors()函数,该函数将当前页面的祖先的数组从最低层次返回到最高层。

由于我没有真正按照你想显示的顺序 (从最低到最高或最高到最低),我设置了一个 $ reverse param(默认值:false) 来更改顺序。

<?php

function print_page_parents($reverse = false){
  global $post;

  //create array of pages (i.e. current, parent, grandparent)
  $page = array($post->ID);
  $page_ancestors = get_ancestors($post->ID, 'page');
  $pages = array_merge($page, $page_ancestors);

  if($reverse) {
    //reverse array (i.e. grandparent, parent, current)
    $pages = array_reverse($pages);
  }

  for($i=0; $i<count($pages); $i++) {
    $output.= get_the_title($pages[$i]);
    if($i != count($pages) - 1){
      $output.= " &raquo; ";
    }
  }
    echo $output;
}

//print lowest to highest
print_page_parents();

//print highest to lowest
print_page_parents($reverse = true);

?>

我希望它有帮助!

VQ 。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。