是否有一个wordpress插件可以根据日期或位置一次恢复多个帖子的修订?
我有一个被黑的网站,每个帖子都在其中被更改。为了使所有内容整洁,我需要将所有帖子还原到5或6天前在线的任何修订版本。
谢谢!
答案 0 :(得分:0)
老实说,对于一个遭到黑客入侵的网站,最好的选择是从“干净”的时间恢复数据库/ MySQL备份,或者只是手动还原它们。
也就是说,WordPress确实允许您使用wp_get_post_revisions()
检索修订。
注意:这是复数函数,单数函数
wp_get_post_revision()
通过其ID进行修订。除非您知道所需的修订版ID是什么,否则您就不需要此函数。复数函数将获取帖子的所有修订版。
现在,在继续阅读之前-备份您的网站。
您备份了吗?
确保您有备份。
此外,请确保它可以正常工作。
现在,您已备份 ...
看看我想出的这个函数,它结合使用wp_get_post_revisions()
和wp_update_post()
。同样,请确保在运行此功能之前先进行备份。它会弄乱帖子和帖子内容,如果停顿/死掉,可能会变得混乱。 使用后果自负。
https://yoursite.com/?restore_revisions=so_50959583_restore_revisions
确保您希望运行此功能。它需要该查询字符串才能运行。posts
。注意,我省略了其他帖子类型,可以根据需要添加这些帖子类型。wp_update_post
将帖子更新为修订后的post_content
。so_50959583_restore_revisions_flag
选项标志,因此它将不再运行。register_activation_hook
开始运行该功能。因此,这是最好用于说明性目的的野兽,使用它的风险自负。
add_action( 'init', 'so_50959583_restore_revisions' );
function so_50959583_restore_revisions(){
if( isset( $_GET['restore_revisions'] ) && $_GET['restore_revisions'] == 'so_50959583_restore_revisions' ){
if( current_user_can( 'manage_options' ) ){
if( !get_option( 'so_50959583_restore_revisions_flag' ) ){
// This hasn't run before, run it now.
$args = array(
'post_type' => 'post', // Limit to just posts
'posts_per_page' => -1
);
$revision_query = new WP_Query( $args );
if( $revision_query->have_posts() ){
while( $revision_query->have_posts() ){
$revision_query->the_post();
if( $last_revision = array_shift( wp_get_post_revisions( $post->ID ) ) ){
// At least one revision existed.
$reverted_post = array(
'ID' => get_the_ID(), // Update current post in query
'post_content' => $last_revision->post_content // set content to previous content
);
// Update the existing post
if( !wp_update_post( $reverted_post ) ){
wp_die( 'Something went wrong' );
}
}
}
wp_reset_postdata();
}
// Whew, completed!
update_option( 'so_50959583_restore_revisions_flag', true );
}
}
}
}
我想再次强调一下,最好的选择是使用许多可用的插件(并且通常是免费的)来保留数据库的备份,以防止发生此类问题。
最后,如果您只有20到30个帖子,则应该手动完成。而且,如果您有10,000个帖子,则可能需要在“大块”中使用此代码,否则可能会超时。
祝你好运