在前端显示发布修订的历史记录

时间:2021-01-29 作者:Derek

我正在开发一个内部知识库,我想在前端显示帖子历史记录(包括作者、日期和差异)。

我第一次降落在wp_get_post_revision() (https://developer.wordpress.org/reference/functions/wp_get_post_revision/) 经过进一步搜索,我发现wp_list_post_revisions() (https://developer.wordpress.org/reference/functions/wp_list_post_revisions/) 看起来更接近我想要的。

然而,在处理这个问题时,我在更新帖子时遇到了错误(更新失败。响应不是有效的JSON响应)当我返回短代码时,我在前端没有看到任何东西。我希望有一个插件,但由于我找不到一个,我正在创建一个快速的。我做错了什么?实现这一目标的最佳方式是什么?

以下是我尝试过的:

function history_shortcode() {
    //global $wpdb;
    //$revisions = $wpdb->get_results("select * from {$wpdb->posts} where post_parent={$post_id} and post_type=\'revision\'");

    $revisions = wp_list_post_revisions(get_the_ID());
    return $revisions;

}
add_shortcode( \'history\', \'history_shortcode\' );

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

您的快捷码调用wp_list_post_revisions() 它响应输出(修订列表),因此您得到;更新错误;。

要解决此问题,可以使用output buffering 像这样:

ob_start();
wp_list_post_revisions( get_the_ID() );
$revisions = ob_get_clean();
或者你可以使用wp_get_post_revisions() 并手动构建HTML列表。下面是一个基于wp_list_post_revisions():

$output = \'\';

if ( ! $revisions = wp_get_post_revisions( get_the_ID() ) ) {
    return $output;
}

$rows = \'\';
foreach ( $revisions as $revision ) {
    if ( ! current_user_can( \'read_post\', $revision->ID ) ) {
        continue;
    }

    $rows .= "\\t<li>" . wp_post_revision_title_expanded( $revision ) . "</li>\\n";
}

$output .= "<ul class=\'post-revisions hide-if-no-js\'>\\n";
$output .= $rows;
$output .= \'</ul>\';

// At the end of your shortcode function, make sure to..
return $output;