首先我们看看wp_get_post_autosave
函数查看核心函数wp_get_post_autosave()
使用wp_get_post_revisions()
作用
它将循环遍历来自的所有修订
$revisions = wp_get_post_revisions(
$post_id,
array(
\'check_enabled\' => false
)
);
然后使用:
foreach ( $revisions as $revision ) {
if ( false !== strpos( $revision->post_name, "{$post_id}-autosave" ) ) {
if ( $user_id && $user_id != $revision->post_author )
continue;
return $revision;
}
}
返回包含
"{$post_id}-autosave"
以及
$user_id
可能与作者相符。
Alternative
现在
wp_get_post_revisions()
是的包装器
get_children()
, 所以我想知道为什么它必须先获取给定帖子的所有修订,然后再过滤掉一个。为什么不试着直接取它,只取需要的东西呢?当我们尝试以下操作时(PHP 5.4+):
$revisions = wp_get_post_revisions(
$post_id,
[
\'offset\' => 1, // Start from the previous change (ofset changed to offset)
\'posts_per_page\' => 1, // Only a single revision
\'name\' => "{$post_id}-autosave-v1",
\'check_enabled\' => false,
]
);
然后
posts_per_page
不会有任何影响。在玩了这个之后,我设法让以下内容与
posts_per_page
参数:
$revisions = wp_get_post_revisions(
$post_id,
[
\'offset\' => 1, // Start from the previous change
\'posts_per_page\' => 1, // Only a single revision
\'post_name__in\' => [ "{$post_id}-autosave-v1" ],
\'check_enabled\' => false,
]
);
仅获取上一版本现在我们可以调整以上内容以仅获取上一版本,即这不是自动保存:
$revisions = wp_get_post_revisions(
$post_id,
[
\'offset\' => 1, // Start from the previous change
\'posts_per_page\' => 1, // Only a single revision
\'post_name__in\' => [ "{$post_id}-revision-v1" ],
\'check_enabled\' => false,
]
);
在这里,我们的目标是
{$post_id}-revision-v1
鼻涕虫
请注意,此处我们使用v1
, 但如果以后需要,我们可以调整。
示例
为了最终回答您的问题,这里有一个建议:
$show = get_post_meta( get_the_ID(), \'somekey\', true );
if( $show )
{
// Template part
get_template_part( \'template-parts/content\' );
}
else
{
// Fetch the previous revision only
$revisions = wp_get_post_revisions(
get_the_ID(),
[
\'offset\' => 1, // Start from the previous change
\'posts_per_page\' => 1, // Only a single revision
\'post_name__in\' => [ sprintf( "%d-revision-v1", get_the_ID() ) ],
\'check_enabled\' => false,
]
);
if( $revisions )
{
$post = reset( $revisions );
setup_postdata( $post );
// Template part
get_template_part( \'template-parts/content\' );
wp_reset_postdata();
}
else
{
// Some fallback here
}
}
希望您可以根据自己的需要进行进一步调整!