WordPressで固定ページの一番上の親を取得したいときがあるかと思います。get_postなどで得られる固定ページの情報には親のIDしかなく、さらにさかのぼった情報はありません。そのため、孫まで行ってしまったときに祖父を言い当てるのには少々工夫が必要です。
functions.phpに関数を作る
先祖をさかのぼり、最も上の親ページを取得する関数を作成し、functions.phpに記載することでテーマ内で利用できます。
以下をテーマの中のfunctions.phpに記載します。
1 2 3 4 5 6 7 8 9 10 11 12 |
function get_most_parent_pageID($current_id = ''){ global $post; if($current_id == '') $current_id ==$post->ID; $par_id = get_post($current_id)->post_parent; $most_par_id = $current_id; while($par_id!= 0) : $par_post = get_post($par_id); $most_par_id = $par_post->ID; $par_id = $par_post->post_parent; endwhile; return $most_par_id; } |
使い方
初期設定は現在の投稿の最上の親、引数にIDを渡せばその投稿の最上の親のIDを取得できます。
現在の固定ページの最上親のIDを取得できます。
1 2 |
$most_post_id = get_most_parent_pageID(); //最上親のIDを取得する $most_post = get_post($most_post_id); //投稿を取得 |
投稿オブジェクトで取得する場合
上記の使い方ではIDを返してそのIDから投稿オブジェクトを取得していますが、それをまとめた関数です。
1 2 3 4 5 6 7 8 9 10 11 12 |
function get_most_parent_page($current_id = ''){ global $post; if($current_id == '') $current_id ==$post->ID; $current_post = get_post($current_id); $par_id = $current_post->post_parent; while($par_id!= 0) : $par_post = get_post($par_id); $current_post = $par_post; $par_id = $par_post->post_parent; endwhile; return $current_post; } |
使用例:固定ページ毎に最上の親のスラッグのクラスを入れる
例えばpage.php内でスラッグのクラスを入れてCSSで背景画像などを変化させたい時、子ページの場合は親ページの、孫ページの場合は祖父ページのスラッグを入れたいときがあるかと思います。
1 2 3 4 5 6 7 |
<?php //関数によりスラッグを取得 $most_par_post = get_most_parent_page(); $most_par_slug = $most_par_post->post_name; ?> <div id="page" class="<?php echo $most_par_slug; ?>"> <!--ここに内容を記述--> </div> |
[…] WordPress 固定ページの最上親ページを取得する […]