用于在wordpress中的所有帖子上恢复最新修订的SQL查询

时间:2016-01-11 18:14:06

标签: sql wordpress

我的wordpress网站最近受到攻击,所有帖子似乎都已更新为空白版本。所以我想恢复所有帖子的最新版本。 (注意:在wordpress中,当前发布的版本也作为修订版存储在数据库中。所以我想我需要恢复第二版(按降序排列))

那个SQL查询是什么?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

所以,你需要的就是你的数据库(幸运的是)。帖子本身可以像这样检索

global $wpdb;

$query = "SELECT * FROM wp_posts WHERE post_type = 'revision'";

$query_results = $wpdb->get_results($query, ARRAY_A);

foreach ($query_results as $q_key => $q_value) {
    $post = array(
      'post_content'            => $q_value['post_content']
      'post_name'               => $q_value['post_name']
      'post_title'              => $q_value['post_title']
      'post_status'             => $q_value['post_status']
      'post_type'               => 'post'
      'post_author'             => $q_value['post_author']
      'ping_status'             => $q_value['ping_status']
      'post_parent'             => $q_value['post_parent']
      'menu_order'              => $q_value['menu_order']
      'to_ping'                 => $q_value['to_ping']
      'pinged'                  => $q_value['pinged']
      'post_password'           => $q_value['post_password']
      'guid'                    => $q_value['guid']
      'post_content_filtered'   => $q_value['post_content_filtered']
      'post_excerpt'            => $q_value['post_excerpt']
      'post_date'               => $q_value['post_date']
      'post_date_gmt'           => $q_value['post_date_gmt']
      'comment_status'          => $q_value['comment_status']
    );  

    wp_insert_post( $post );
}

在这里阅读wp_insert_post()

现在,根据您拥有的帖子数量,这可能需要一段时间,或者可能会中断。如果它中断了,那么你需要将它包装在一个你用AJAX调用的函数中。这样的事情可以解决问题:

add_action( 'wp_ajax_insert_posts', 'database_ajax_insert_posts' );
add_action( 'wp_ajax_nopriv_insert_posts', 'database_ajax_insert_posts' );

function database_ajax_insert_posts(){

    global $wpdb;

    $offset = $_POST['offset'];

    $query = "SELECT * FROM wp_posts WHERE post_type = 'revision' LIMIT $offset, 1";

    $query_results = $wpdb->get_results($query, ARRAY_A);

    foreach ($query_results as $q_key => $q_value) {
        $post = array(
          'post_content'            => $q_value['post_content']
          'post_name'               => $q_value['post_name']
          'post_title'              => $q_value['post_title']
          'post_status'             => $q_value['post_status']
          'post_type'               => 'post'
          'post_author'             => $q_value['post_author']
          'ping_status'             => $q_value['ping_status']
          'post_parent'             => $q_value['post_parent']
          'menu_order'              => $q_value['menu_order']
          'to_ping'                 => $q_value['to_ping']
          'pinged'                  => $q_value['pinged']
          'post_password'           => $q_value['post_password']
          'guid'                    => $q_value['guid']
          'post_content_filtered'   => $q_value['post_content_filtered']
          'post_excerpt'            => $q_value['post_excerpt']
          'post_date'               => $q_value['post_date']
          'post_date_gmt'           => $q_value['post_date_gmt']
          'comment_status'          => $q_value['comment_status']
        );  

        wp_insert_post( $post );
    }

}

和AJAX

jQuery(document).ready(function($) {
    "use strict";

    var offset = 1;

    function ajax_call(){

        $.ajax({
            type: "POST",
            url: ajaxurl,
            data: {
                'action': 'insert_posts',
                'offset': offset,
            },
            success: function(response) {
                if (offset < 100){ //Number of posts go here
                    offset += 1;
                    ajax_call();
                } else{
                    $('#wpbody-content').append('<p>All done!</p>' );
                }
            },
            error : function (jqXHR, textStatus, errorThrown) {
                $('#wpbody-content').html(jqXHR + ' :: ' + textStatus + ' :: ' + errorThrown);
            }
        });
    }

    ajax_call();

});

还要确保使用脚本的句柄本地化您的AJAX网址。

wp_localize_script('your_handle', 'db_from_WP', array(
    'ajaxurl' => admin_url( 'admin-ajax.php' )
));

分类法应该在数据库中,您可以以类似的方式获取它们。

这不是万无一失的,但应该有效。我可以看到的可能有点问题的是为帖子获得正确的分类,但这是可行的,尽管有点摆弄。

希望这有帮助。