カスタム投稿タイプ "Book"の階層構造(たとえば)。
私達がPost 2-95
にいるとき、私は知りたいです:
Post 1-31
)がいますか?Post 3-19
、Post 3-10
)。それがあれば:
投稿オブジェクト$p
で表される投稿を考えると、投稿31が親であるかどうかを調べることができます。
if($p->post_parent == 31){
// it is!
} else {
// it isn't
}
両親を把握するには、次のようにします。
$posts = get_posts(array(
'post_parent' => $p->ID,
'post_type' => $p->post_type
));
// if there are children, they will be contained in `$posts`
最後に、自分の階層の深さがいくつあるかを判断するには、階層の$p->parent_post == 0
を再帰し、それを実行するのに必要な回数を数える必要があります。
例えば.
$level = 1;
while($parent->parent_post != 0){
$level++;
$parent = get_post($parent->parent_post);
}
我々がそうであるならば、我々は機能でチェックします...
Functions.phpファイルにすべての関数を貼り付けるすべての.
function wpse52285_is_post_in_range( $post, int $range_from, int $range_to )
{
// If we're IN the LOOP @link http://codex.wordpress.org/Function_Reference/in_the_loop
if ( ! in_the_loop() )
return false;
// Abort if not in the allowed range
if ( ! in_array( $post->ID, range( $range_from, $range_to ) ) )
return false;
return true;
}
我々がチェックすれば...
何も見つからなかった場合はfalse
を返すので、チェックを簡単にすることができます。
function wpse52285_get_children_in_range( $post, int $range_from, int $range_to, $post_type = 'post' )
{
if ( ! in_the_loop() )
return false;
// get_children() @link http://codex.wordpress.org/Function_Reference/get_children
$children = get_children( "post_parent={$post->ID}&post_type={$post_type}" );
if ( 0 < count( $children ) )
{
foreach ( $children as $child )
{
in_array( $id, range( $range_from, $range_to ) ) AND $in_range[] = $child;
}
if ( 0 < count( $in_range ) )
return $in_range;
}
return false;
}
確認したら...
何も満たさない場合は、再びfalse
を返します。
function wpse52285_get_ancestors_in_range( $post, int $range_from, int $range_to )
{
if ( ! in_the_loop() )
return false;
// get_post_ancestors @link http://codex.wordpress.org/Function_Reference/get_post_ancestors
$ancestors = get_post_ancestors( $post->ID );
foreach ( $ancestors as $ancestor )
{
in_array( $ancestor->ID, range( $range_from, $range_to ) ) AND $in_range[] = $ancestor;
}
if ( 0 < count( $in_range ) )
return $in_range;
return false;
}
これで、これを次のような任意のテンプレートで使用できます。
// The loop
if have_posts() : while( have_posts() ): the_post();
global $post;
// Is our current post in range?
if ( wpse52285_is_post_in_range( $post, 2, 95 ) )
{
// Are any child posts in range?
$children = wpse52285_get_children_in_range( $post, 3, 19 );
if ( $children )
{
// Do stuff with the children
}
// Are any ancestors in range?
$ancestors = wpse52285_get_ancestors_in_range( $post, 1, 31 );
if ( $ancestors )
{
// Do stuff with the ancestors
}
}
endwhile;
endif;