web-dev-qa-db-ja.com

ページタイトル、親タイトル、祖父母のタイトル

私はページ階層を使用しています、そして、私は両親と祖父母のページ(もしあれば)のタイトルを見せたいです。

構造は次のようなものです

スタートページ

スタートページ> 2ページ目

スタートページ> 2ページ目> 3ページ目

スタートページ> 2ページ目> 3ページ目> 4ページ目

タイトルは、4ページ目の「4ページ目 - 3ページ目 - 2ページ目 - スタートページ」のようになります。3ページ目:「3ページ目 - 2ページ目 - スタートページ」

私が見つけた解決策はそれほど良くない:

<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>

セカンドページレベルでは、そのページのタイトルは2倍になります... "セカンドページ - セカンドページ - スタートページ"

誰でも?

6
Erikm

おそらく 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;
6
Michael

これが解決策です。これは、 get_ancestors() 関数を使用します。これは、現在のページの最上位から最上位までの階層の配列を返します。

私はあなたがそれを表示したい順番を実際には得られなかったので(最低から最高まで、または最高から最低まで)、順序を変更するために$ reverseパラメータを設定しました(デフォルト: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.

3
Vidal Quevedo