自定义邮寄类型中的邮寄祖先和子邮寄

时间:2012-05-16 作者:Vital

enter image description here

自定义帖子类型“Book”的层次结构(例如)

当我们开始时Post 2-95, 我想知道:

帖子是否有此帖子祖先(Post 1-31)? Post 3-19, Post 3-10)?

祖先帖子:检索此帖子的(对象)

2 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

给定由post对象表示的post$p, 您可以通过以下方式了解post 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, 然后数一数你需要做多少次。

e、 g。

$level = 1;
while($parent->parent_post != 0){
    $level++;
    $parent = get_post($parent->parent_post);
}

SO网友:kaiser

检查当前post是否在范围内,如果我们。。。

循环中斗杆all 函数中的函数。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;
    

  • 结束

    相关推荐

    Active Directory(AD)组身份验证以查看WordPress帖子?

    我正在尝试使用active directory身份验证设置wordpress站点。出现的一个问题是,能否将类别/帖子/博客阅读限制在特定的广告组。我从来没有见过这样做,我也没有找到任何插件,似乎承诺这一功能。似乎最好的选择是只给一群用户一个具有read\\u private\\u posts功能的角色,但我不确定这会起到什么作用。