Get Ancestor featured image

时间:2019-10-03 作者:Justin

我一直在尝试让祖先的帖子ID在所有子页面上显示其特色图片,但我只能得到作为顶层和子页面的组合,而不能得到第三个页面。

当前设置为:

第1页

我希望第1页上的特色图像显示在第1页、子页和子页上。

这本书直接出自《法典》,其中写道:

global $post;
$parents = get_post_ancestors( $post->ID );
/* Get the ID of the \'top most\' Page if not return current page ID */
$id = ($parents) ? $parents[count($parents)-1]: $post->ID;
if(has_post_thumbnail( $id )) {
    get_the_post_thumbnail( $id, \'thumbnail\');
}
但像我所有的其他尝试一样,它只与直接的父级一起工作(例如第1页和子页,从不使用子子页)。

如何获得第三级页面来获取祖先的特色图像?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

给定此层次结构:

第1页第2页第3页第4页,其中$post 表示第4页:

$parents = get_post_ancestors( $post->ID );
将按以下顺序为这些页面返回3个ID:

因此,这一行:

$id = ($parents) ? $parents[count($parents)-1]: $post->ID;
等于:

$id = ($parents) ? $parents[2]: $post->ID;
这意味着它将只检查第1页是否有帖子缩略图。它将忽略第2页(&A);3、因为数组索引开始于0, count($parents)-1 意味着$id 将始终是列表中的最后一项,即顶级页面。

你要做的是循环$parents, 从直系父母到祖父母,再到曾祖父母,直到找到缩略图。然后中断循环并返回缩略图:

$thumbnail = \'\'; // We will replace this if/when we find a thumbnail.
$parents   = get_post_ancestors( null ); // null will get the current post.

foreach ( $parents as $post_id ) { // Loop through parent pages.
    if ( has_post_thumbnail( $post_id ) ) { // Check if this ancestor has a thumbnail.
        $thumbnail = get_the_post_thumbnail( $id, \'thumbnail\' ); // If it does, get it...
        break; // ...then stop looping.
    }
}

echo $thumbnail;
这段代码的问题是,如果当前页面有缩略图,它将无法显示,因为我们只在父页面之间循环。解决此问题的最简单方法是将当前页面ID添加到我们循环使用的ID列表中:

$thumbnail = \'\'; // We will replace this if/when we find a thumbnail.
$parents   = get_post_ancestors( null ); // null will get the current post.

array_unshift( $parents, get_the_ID() ); // Add the current page to the list of pages we\'re checking.

foreach ( $parents as $post_id ) { // Loop through parent pages.
    if ( has_post_thumbnail( $post_id ) ) { // Check if this ancestor has a thumbnail.
        $thumbnail = get_the_post_thumbnail( $id, \'thumbnail\' ); // If it does, get it...
        break; // ...then stop looping.
    }
}

echo $thumbnail;

相关推荐