概要
get_post_ancestors
関数は、特定の投稿の先祖の投稿IDを取得するために使用されます。主に、カスタム投稿タイプや階層型投稿(ページ)を利用する際に、その階層構造を把握するために使用されます。以下のようなシナリオでよく使用されます。
- ページの親ページを取得する。
- 階層的な投稿構造を表示する際に親子関係を確認する。
- ナビゲーションメニューの生成において、対象投稿の先祖を考慮する。
- SEO対策として、サイト内のリンク構造を理解する。
- テンプレートの条件分岐で、親ページに応じたコンテンツ表示を行う。
- レビューや評価システムにおいて、親投稿絡みのデータ整理を行う。
- アーカイブページの表示時に、関連する親投稿を表示する。
- ウィジェットやサイドバーに関連する先祖投稿を表示する。
構文
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)が存在する場合にメッセージを表示します。