【wordpress】固定ページが特定の親ページを持つかどうか判断する

親ページや、親の親ページに特定のページが含まれているかどうか判断したかったので関数を作りました。特定のページ配下だけレイアウトを変えたり、出力を変えたりするのに便利です。

//$post : 投稿ID、または投稿オブジェクト
//$search : 判断したいページのslug名
//$flg : フラグ

function search_parent($post, $search, &$flg)
{
	$parents_id = get_post_ancestors($post);//指定した投稿の先祖の投稿 ID を配列で取得
	$flg = false;
	foreach ($parents_id as $id) {
		$parent_slug = get_post($id)->post_name; // 親スラッグ
		if ($parent_slug === $search) {
			$flg = true;
			return $flg;
		}
	}
	return $flg;
}

使い方

使いたい場所で関数を叩きます。

<?php 
$flg;
global $post;
$post_ID = $post->ID;

if (search_parent($post_ID, 'demo', $flg)) :
	//もし今見ているページが親や祖先に「demo」というスラッグ名のページがあったらtrue
	echo 'demoページが親に含まれている';
else :
	echo 'demoページは親に含まれていない';
endif;

?>

参考サイト

関数リファレンス/get post ancestors – WordPress Codex 日本語版

  • コーダーのための計算機