给定此层次结构:
第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;