web-dev-qa-db-ja.com

トップレベルページの親タイトルを取得

訪問者が現在アクセスしているページの最上位の親ページのページタイトルを取得するにはどうすればよいですか。

説明させてください:

私はこのページ構造を持っています:

  • タイトル例1
    • 例タイトル1-1
      • タイトル例1-1-1
      • タイトル例1-1-2
    • タイトルの例1-2
  • タイトル例2
  • タイトル例3
  • タイトル例4

これが私が返したいものです。

  • ユーザーはExample Title 1にいますreturn Example Title 1
  • ユーザーはExample Title 1-1にいますreturn Example Title 1
  • ユーザーはExample Title 1-1-1にいますreturn Example Title 1
  • ユーザーはExample Title 2にいますreturn Example Title 2

通常、私がすることは$post->parentをチェックすることです、そして、もし0がページタイトルを返すならば、そうでなければ上記のページのタイトルを返します。問題は、$ post-> parentが1レベル戻るだけということです。私は$post->parent == 0まで戻り続けるある種の再帰関数を使う必要があります。

これで自分で管理できるようになりましたが、その都度考えられる唯一の方法は、毎回get_post()を使用することです。それは最終的にトップレベルに到達するために8ページをロードすることを含みます。誰かがこれを行うためのより良い方法がありますか?

6
Brady

このようにして見つけました:

if ( 0 == $post->post_parent ) {
    the_title();
} else {
    $parents = get_post_ancestors( $post->ID );
    echo apply_filters( "the_title", get_the_title( end ( $parents ) ) );
}

より良い方法を得た人は誰でも答えてください。

13
Brady

その効率的なこれがrecursive functionでできるかどうかわからない

function get_post_ancestor_title($post_id){
    $post = get_post($post_id)->post_parent;
    if ( 0 == $post->post_parent ) {
       return get_the_title();
    } else {
       get_post_ancestor_title($post->ID);
    }
}
4
Sisir