在开机自检中显示开机自检更改日志

时间:2021-04-15 作者:Mateusz Graczyk

我需要在帖子内容的末尾显示帖子更改(帖子修订)的历史记录。

我看到了有关“的提示”;上次修改人/日期“;功能,但我需要show the table of all changes (revisions) done on post (Date/author/content- if possible).

这是公共机构的正式要求,我有点惊讶谷歌上什么都没有。有没有办法做到这一点?

2 个回复
最合适的回答,由SO网友:Frank P. Walentynowicz 整理而成

有很多方法可以做到这一点,无需第三方插件:

短代码

Cons: 必须创建短代码,并将其添加到所有帖子中。

子主题模板

Cons: 主题相关,必须修改正确的模板。

子主题函数。php

Cons: 主题相关。

mu插件中的插件

Cons: 没有一个Pros: 不依赖主题,易于实现。

实施创建文件post-with-revisions.php, 并将其放置在wp-content/mu-plugins:

<?php
function wpse_single_post_with_revisions( $content ) {
 
    // Check if we\'re inside the main loop in a single Post.
    if ( is_singular() && in_the_loop() && is_main_query() ) {
        $content .= \'<h2>Revisions</h2>\';
        $revisions = wp_get_post_revisions();
        foreach ( $revisions as $rev ) {
            $date = $rev->post_date;
            $author = get_author_name( $auth_id = $rev->post_author );
            $content .= \'<h4>\' . $date . \' by \' . $author . \'</h4>\';
            $content .= $rev->post_content;
        }            
    }
    return $content;
}
add_filter( \'the_content\', \'wpse_single_post_with_revisions\' );
Note: 修订版本将仅在单个帖子中可见,而不在存档中可见。

更新

为了更容易识别修订之间的更改,我们可以显示修订之间的差异,而不是显示修订的内容。修改后的代码如下:

<?php
function wpse_single_post_with_revisions( $content ) {
    global $post;

    // Check if we\'re inside the main loop in a single Post.
    if ( is_singular() && in_the_loop() && is_main_query() ) {
        $content .= \'<h2>Revisions</h2>\';
        $revisions = wp_get_post_revisions();
        $ids_to_compare = array();
        foreach ( $revisions as $rev ) {
            $date = $rev->post_date;
            $author = get_author_name( $auth_id = $rev->post_author );
            $id = $rev->ID;
            array_push( $ids_to_compare, (int) $id );
            $content .= \'<strong>ID: \' . $id .\' - \' . $date . \' by \' . $author . \'</strong><br>\';
            //$content .= $rev->post_content;
        }
        $content .= \'<h2>Diffs</h2>\';

        require \'wp-admin/includes/revision.php\';

        for ( $i = 0; $i <= count( $ids_to_compare ) - 2; $i++ ) {
            $diffs =  wp_get_revision_ui_diff( $post, $ids_to_compare[$i], $ids_to_compare[$i + 1] );
            $content .= \'<h3>\' . $ids_to_compare[$i] . \' to \' . $ids_to_compare[$i + 1] . \'</h3>\';
            if ( is_array( $diffs ) ) {
                foreach ( $diffs as $diff ) {
                    $content .= $diff[\'diff\'];
                }
            }
            $content .= \'<hr>\';
        }
    }
    return $content;
}
add_filter( \'the_content\', \'wpse_single_post_with_revisions\' );

SO网友:Dave White

WordPress在本机上不会这样做。您可能想尝试简单历史记录之类的插件。

看看这个https://publishpress.com/blog/plugins-track-content-changes-wordpress/