概要
get_ancestors
関数は、指定された投稿の先祖のIDをまとめて取得するための関数です。この関数は、ワードプレスの階層構造を持つ投稿タイプ(ページやカスタム投稿タイプなど)の親子関係を把握する際に特に有用です。たとえば、ページ階層のナビゲーションメニューや、親ページへのリダイレクトを実装する際などに活用されます。
この関数は以下のような場面でよく使われます:
1. 階層型のナビゲーションメニューを作成する場合
2. ページのクラムブレッドナビゲーションを表示する場合
3. 親または子ページの一覧を表示する場合
4. アーカイブページでの関連ページの取り扱い
5. 特定のページの先祖を取得して情報を表示する場合
6. SEO対策としての構造的なデータ取得
7. テーマやプラグインにおけるカスタムクエリの構築
8. ユーザー体験を向上させるための動的コンテンツ表示
構文
get_ancestors( $post_id, $post_type );
パラメータ
$post_id
(int) : 先祖を取得したい投稿のIDです。$post_type
(string) : 取得する先祖の投稿タイプ。デフォルトは ‘page’ 。
戻り値
指定した投稿IDの先祖のIDの配列を返します。
関連する関数
使用可能なバージョン
- この関数は、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: 先祖のIDを取得する基本的な例
$post_id = 42; // 取得したい投稿のID
$ancestors = get_ancestors( $post_id, 'page' );
foreach ( $ancestors as $ancestor_id ) {
echo 'Ancestor ID: ' . $ancestor_id . '<br>';
}
このサンプルコードでは、投稿ID 42の先祖のIDを取得し、それを出力しています。
サンプル2: 先祖の数をカウントする例
$post_id = 42; // 取得したい投稿のID
$ancestors = get_ancestors( $post_id );
$count = count( $ancestors );
echo "This post has $count ancestors.";
このコードでは、取得した先祖の数をカウントし、その結果を表示しています。
サンプル3: 先祖のタイトルを取得する例
$post_id = 42; // 取得したい投稿のID
$ancestors = get_ancestors( $post_id );
foreach ( $ancestors as $ancestor_id ) {
$ancestor_title = get_the_title( $ancestor_id );
echo 'Ancestor Title: ' . $ancestor_title . '<br>';
}
このサンプルでは、先祖のタイトルを取得し、その結果を出力しています。
サンプル4: 特定の投稿タイプの先祖を取得する例
$post_id = 42; // 取得したい投稿のID
$ancestors = get_ancestors( $post_id, 'custom_post_type' );
if ( !empty( $ancestors ) ) {
echo 'Ancestors found for the custom post type.';
}
この例では、カスタム投稿タイプ ‘custom_post_type’ の先祖を取得しています。
サンプル5: 先祖の階層を逆順で取得する例
$post_id = 42; // 取得したい投稿のID
$ancestors = array_reverse( get_ancestors( $post_id ) );
echo 'Ancestors in reverse order:';
foreach ( $ancestors as $ancestor_id ) {
echo ' ' . $ancestor_id;
}
このコードでは、取得した先祖のIDを逆順にして表示しています。