ワードプレスのget_post_ancestors関数の使用方法・解説

概要

get_post_ancestors 関数は、特定の投稿の先祖の投稿IDを取得するために使用されます。主に、カスタム投稿タイプや階層型投稿(ページ)を利用する際に、その階層構造を把握するために使用されます。以下のようなシナリオでよく使用されます。

  1. ページの親ページを取得する。
  2. 階層的な投稿構造を表示する際に親子関係を確認する。
  3. ナビゲーションメニューの生成において、対象投稿の先祖を考慮する。
  4. SEO対策として、サイト内のリンク構造を理解する。
  5. テンプレートの条件分岐で、親ページに応じたコンテンツ表示を行う。
  6. レビューや評価システムにおいて、親投稿絡みのデータ整理を行う。
  7. アーカイブページの表示時に、関連する親投稿を表示する。
  8. ウィジェットやサイドバーに関連する先祖投稿を表示する。

構文

array get_post_ancestors( int|WP_Post $post );

パラメータ

  • post (int|WP_Post): 対象投稿のIDまたは投稿オブジェクト。省略可能で、デフォルトではグローバルな投稿が使用されます。

戻り値

  • 先祖の投稿IDの配列。該当する投稿の先祖がない場合は空の配列が返されます。

関連する関数

対応するワードプレスバージョン

get_post_ancestors 関数は、WordPress 2.0.0以降で使用可能です。

コアファイルのパス

wp-includes/post.php

この関数のアクションでの使用可能性

アクション 使用例
mu_plugin_loaded
registered_post_type
plugins_loaded
wp_roles_init
setup_theme
after_setup_theme
set_current_user
init
register_sidebar
wp_loaded
send_headers
parse_query
pre_get_posts
wp
template_redirect
get_header
wp_head

サンプルコード

サンプルコード 1: 親ページの取得

$post_id = 42; // 取得したい投稿のID
$ancestors = get_post_ancestors( $post_id );
print_r( $ancestors );

このコードは、投稿IDが42の投稿の先祖の投稿IDを取得し、配列として出力します。

サンプルコード 2: 先祖のIDをループ表示

$post_id = 42; 
$ancestors = get_post_ancestors( $post_id );
if ( !empty( $ancestors ) ) {
    foreach ( $ancestors as $ancestor_id ) {
        echo get_the_title( $ancestor_id ) . '<br>';
    }
}

このコードは、先祖の投稿IDをループし、それぞれの投稿タイトルを表示します。

サンプルコード 3: ページの親を判定

$current_post = get_post();
if ( $current_post->post_parent ) {
    $parent = get_post( $current_post->post_parent );
    echo '親ページ: ' . $parent->post_title;
}

このコードは、現在の投稿の親ページが存在する場合、そのタイトルを表示します。

サンプルコード 4: 先祖情報を利用したナビゲーション

$ancestors = get_post_ancestors( get_the_ID() );
if ( $ancestors ) {
    echo '<nav><ul>';
    foreach ( $ancestors as $ancestor_id ) {
        echo '<li><a href="' . get_permalink( $ancestor_id ) . '">' . get_the_title( $ancestor_id ) . '</a></li>';
    }
    echo '</ul></nav>';
}

このコードは、現在の投稿の先祖をナビゲーションメニューとしてリスト表示します。

サンプルコード 5: 先祖に基づく条件分岐

$ancestors = get_post_ancestors( get_the_ID() );
if ( in_array( 10, $ancestors ) ) { // ID 10の先祖が存在するか
    echo 'この投稿は特定の先祖を持っています。';
}

このコードは、特定の先祖ID(ここでは10)が存在する場合にメッセージを表示します。

この関数について質問する


上の計算式の答えを入力してください