Alternative_Heap::clone_wp_tables PHP Метод

clone_wp_tables() публичный Метод

Clones all WordPress original tables to an alternative heap namespace
public clone_wp_tables ( $alt_heap )
    public function clone_wp_tables($alt_heap)
    {
        global $wpdb;
        $old_prefix = $wpdb->prefix;
        $alt_prefix = self::get_alt_prefix($alt_heap);
        $tables = self::get_wp_tables();
        foreach ($tables as $table) {
            $new_table = str_ireplace($old_prefix, $alt_prefix, $table);
            set_time_limit(600);
            // allow up to 10 minutes for large db queries to finish
            $query = wp_sprintf("DROP TABLE IF EXISTS %s;", $new_table);
            $wpdb->query($query);
            set_time_limit(600);
            $query = wp_sprintf("CREATE TABLE %s LIKE %s;", $new_table, $table);
            $wpdb->query($query);
            set_time_limit(600);
            $query = wp_sprintf("INSERT %s SELECT * FROM %s;", $new_table, $table);
            $wpdb->query($query);
            // $wpdb->prefix is oddly used in other places too in the wp_options and
            // usermeta tables. We need to search-replace those.
            if (false !== strpos($table, 'options')) {
                set_time_limit(600);
                $query = wp_sprintf("UPDATE %s SET option_name='%suser_roles' WHERE option_name='%suser_roles';", $new_table, $alt_prefix, $old_prefix);
                $wpdb->query($query);
            }
            if (false !== strpos($table, 'usermeta')) {
                $query = $wpdb->prepare("SELECT user_id, meta_key FROM {$new_table} WHERE meta_key LIKE %s;", str_replace('_', '\\_', $old_prefix) . '%');
                $meta_keys = $wpdb->get_results($query);
                foreach ($meta_keys as $row) {
                    $old_key = $row->meta_key;
                    $new_key = str_replace($old_prefix, $alt_prefix, $old_key);
                    $query = $wpdb->prepare("UPDATE {$new_table} SET meta_key=%s WHERE meta_key=%s;", $new_key, $old_key);
                    $wpdb->query($query);
                }
            }
        }
    }