WordPress.org

Make WordPress Core

Ticket #8471: 8471.r10258.diff

File 8471.r10258.diff, 15.6 KB (added by jacobsantos, 5 years ago)

Based off of r10258

  • export.php

     
    2424 * @param unknown_type $author 
    2525 */ 
    2626function export_wp($author='') { 
    27 global $wpdb, $post_ids, $post; 
     27        global $wpdb, $post_ids, $post; 
    2828 
    29 do_action('export_wp'); 
     29        do_action('export_wp'); 
    3030 
    31 $filename = 'wordpress.' . date('Y-m-d') . '.xml'; 
     31        $filename = 'wordpress.' . date('Y-m-d') . '.xml'; 
    3232 
    33 header('Content-Description: File Transfer'); 
    34 header("Content-Disposition: attachment; filename=$filename"); 
    35 header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); 
     33        header('Content-Description: File Transfer'); 
     34        header("Content-Disposition: attachment; filename=$filename"); 
     35        header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true); 
    3636 
    37 $where = ''; 
    38 if ( $author and $author != 'all' ) { 
    39         $author_id = (int) $author; 
    40         $where = $wpdb->prepare(" WHERE post_author = %d ", $author_id); 
    41 } 
     37        $where = ''; 
    4238 
    43 // grab a snapshot of post IDs, just in case it changes during the export 
    44 $post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); 
     39        if ( $author and $author != 'all' ) { 
     40                $author_id = (int) $author; 
     41                $where = $wpdb->prepare(" WHERE post_author = %d ", $author_id); 
     42        } 
    4543 
    46 $categories = (array) get_categories('get=all'); 
    47 $tags = (array) get_tags('get=all'); 
     44        // grab a snapshot of post IDs, just in case it changes during the export 
     45        $post_ids = $wpdb->get_col("SELECT ID FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); 
    4846 
     47        $categories = (array) get_categories('get=all'); 
     48        $tags = (array) get_tags('get=all'); 
     49 
     50        while ( $parents = wxr_missing_parents($categories) ) { 
     51                $found_parents = get_categories("include=" . join(', ', $parents)); 
     52                if ( is_array($found_parents) && count($found_parents) ) 
     53                        $categories = array_merge($categories, $found_parents); 
     54                else 
     55                        break; 
     56        } 
     57 
     58        // Put them in order to be inserted with no child going before its parent 
     59        $pass = 0; 
     60        $passes = 1000 + count($categories); 
     61        while ( ( $cat = array_shift($categories) ) && ++$pass < $passes ) { 
     62                if ( $cat->parent == 0 || isset($cats[$cat->parent]) ) { 
     63                        $cats[$cat->term_id] = $cat; 
     64                } else { 
     65                        $categories[] = $cat; 
     66                } 
     67        } 
     68        unset($categories); 
     69 
     70        echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?' . ">\n"; 
     71?> 
     72<!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your blog. --> 
     73<!-- It contains information about your blog's posts, comments, and categories. --> 
     74<!-- You may use this file to transfer that content from one site to another. --> 
     75<!-- This file is not intended to serve as a complete backup of your blog. --> 
     76 
     77<!-- To import this information into a WordPress blog follow these steps. --> 
     78<!-- 1. Log into that blog as an administrator. --> 
     79<!-- 2. Go to Tools: Import in the blog's admin panels (or Manage: Import in older versions of WordPress). --> 
     80<!-- 3. Choose "WordPress" from the list. --> 
     81<!-- 4. Upload this file using the form provided on that page. --> 
     82<!-- 5. You will first be asked to map the authors in this export file to users --> 
     83<!--    on the blog.  For each author, you may choose to map to an --> 
     84<!--    existing user on the blog or to create a new user --> 
     85<!-- 6. WordPress will then import each of the posts, comments, and categories --> 
     86<!--    contained in this file into your blog --> 
     87 
     88<?php the_generator('export');?> 
     89<rss version="2.0" 
     90        xmlns:excerpt="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/excerpt/" 
     91        xmlns:content="http://purl.org/rss/1.0/modules/content/" 
     92        xmlns:wfw="http://wellformedweb.org/CommentAPI/" 
     93        xmlns:dc="http://purl.org/dc/elements/1.1/" 
     94        xmlns:wp="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/"> 
     95 
     96<channel> 
     97        <title><?php bloginfo_rss('name'); ?></title> 
     98        <link><?php bloginfo_rss('url') ?></link> 
     99        <description><?php bloginfo_rss("description") ?></description> 
     100        <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></pubDate> 
     101        <generator>http://wordpress.org/?v=<?php bloginfo_rss('version'); ?></generator> 
     102        <language><?php echo get_option('rss_language'); ?></language> 
     103        <wp:wxr_version><?php echo WXR_VERSION; ?></wp:wxr_version> 
     104        <wp:base_site_url><?php echo wxr_site_url(); ?></wp:base_site_url> 
     105        <wp:base_blog_url><?php bloginfo_rss('url'); ?></wp:base_blog_url> 
     106<?php if ( $cats ) : foreach ( $cats as $c ) : ?> 
     107        <wp:category><wp:category_nicename><?php echo $c->slug; ?></wp:category_nicename><wp:category_parent><?php echo $c->parent ? $cats[$c->parent]->name : ''; ?></wp:category_parent><?php wxr_cat_name($c); ?><?php wxr_category_description($c); ?></wp:category> 
     108<?php endforeach; endif; ?> 
     109<?php if ( $tags ) : foreach ( $tags as $t ) : ?> 
     110        <wp:tag><wp:tag_slug><?php echo $t->slug; ?></wp:tag_slug><?php wxr_tag_name($t); ?><?php wxr_tag_description($t); ?></wp:tag> 
     111<?php endforeach; endif; ?> 
     112        <?php do_action('rss2_head'); ?> 
     113        <?php if ($post_ids) { 
     114                global $wp_query; 
     115                $wp_query->in_the_loop = true;  // Fake being in the loop. 
     116                // fetch 20 posts at a time rather than loading the entire table into memory 
     117                while ( $next_posts = array_splice($post_ids, 0, 20) ) { 
     118                        $where = "WHERE ID IN (".join(',', $next_posts).")"; 
     119                        $posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); 
     120                                foreach ($posts as $post) { 
     121                        // Don't export revisions.  They bloat the export. 
     122                        if ( 'revision' == $post->post_type ) 
     123                                continue; 
     124                        setup_postdata($post); ?> 
     125<item> 
     126<title><?php echo apply_filters('the_title_rss', $post->post_title); ?></title> 
     127<link><?php the_permalink_rss() ?></link> 
     128<pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate> 
     129<dc:creator><?php echo wxr_cdata(get_the_author()); ?></dc:creator> 
     130<?php wxr_post_taxonomy() ?> 
     131 
     132<guid isPermaLink="false"><?php the_guid(); ?></guid> 
     133<description></description> 
     134<content:encoded><?php echo wxr_cdata( apply_filters('the_content_export', $post->post_content) ); ?></content:encoded> 
     135<excerpt:encoded><?php echo wxr_cdata( apply_filters('the_excerpt_export', $post->post_excerpt) ); ?></excerpt:encoded> 
     136<wp:post_id><?php echo $post->ID; ?></wp:post_id> 
     137<wp:post_date><?php echo $post->post_date; ?></wp:post_date> 
     138<wp:post_date_gmt><?php echo $post->post_date_gmt; ?></wp:post_date_gmt> 
     139<wp:comment_status><?php echo $post->comment_status; ?></wp:comment_status> 
     140<wp:ping_status><?php echo $post->ping_status; ?></wp:ping_status> 
     141<wp:post_name><?php echo $post->post_name; ?></wp:post_name> 
     142<wp:status><?php echo $post->post_status; ?></wp:status> 
     143<wp:post_parent><?php echo $post->post_parent; ?></wp:post_parent> 
     144<wp:menu_order><?php echo $post->menu_order; ?></wp:menu_order> 
     145<wp:post_type><?php echo $post->post_type; ?></wp:post_type> 
     146<wp:post_password><?php echo $post->post_password; ?></wp:post_password> 
     147<?php 
     148if ($post->post_type == 'attachment') { ?> 
     149<wp:attachment_url><?php echo wp_get_attachment_url($post->ID); ?></wp:attachment_url> 
     150<?php } ?> 
     151<?php 
     152$postmeta = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID) ); 
     153if ( $postmeta ) { 
     154?> 
     155<?php foreach( $postmeta as $meta ) { ?> 
     156<wp:postmeta> 
     157<wp:meta_key><?php echo $meta->meta_key; ?></wp:meta_key> 
     158<wp:meta_value><?Php echo $meta->meta_value; ?></wp:meta_value> 
     159</wp:postmeta> 
     160<?php } ?> 
     161<?php } ?> 
     162<?php 
     163$comments = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d", $post->ID) ); 
     164if ( $comments ) { foreach ( $comments as $c ) { ?> 
     165<wp:comment> 
     166<wp:comment_id><?php echo $c->comment_ID; ?></wp:comment_id> 
     167<wp:comment_author><?php echo wxr_cdata($c->comment_author); ?></wp:comment_author> 
     168<wp:comment_author_email><?php echo $c->comment_author_email; ?></wp:comment_author_email> 
     169<wp:comment_author_url><?php echo $c->comment_author_url; ?></wp:comment_author_url> 
     170<wp:comment_author_IP><?php echo $c->comment_author_IP; ?></wp:comment_author_IP> 
     171<wp:comment_date><?php echo $c->comment_date; ?></wp:comment_date> 
     172<wp:comment_date_gmt><?php echo $c->comment_date_gmt; ?></wp:comment_date_gmt> 
     173<wp:comment_content><?php echo wxr_cdata($c->comment_content) ?></wp:comment_content> 
     174<wp:comment_approved><?php echo $c->comment_approved; ?></wp:comment_approved> 
     175<wp:comment_type><?php echo $c->comment_type; ?></wp:comment_type> 
     176<wp:comment_parent><?php echo $c->comment_parent; ?></wp:comment_parent> 
     177<wp:comment_user_id><?php echo $c->user_id; ?></wp:comment_user_id> 
     178</wp:comment> 
     179<?php } } ?> 
     180        </item> 
     181<?php } } } ?> 
     182</channel> 
     183</rss> 
     184<?php 
     185} 
     186 
    49187/** 
    50188 * {@internal Missing Short Description}} 
    51189 * 
     
    68206        return $parents; 
    69207} 
    70208 
    71 while ( $parents = wxr_missing_parents($categories) ) { 
    72         $found_parents = get_categories("include=" . join(', ', $parents)); 
    73         if ( is_array($found_parents) && count($found_parents) ) 
    74                 $categories = array_merge($categories, $found_parents); 
    75         else 
    76                 break; 
    77 } 
    78  
    79 // Put them in order to be inserted with no child going before its parent 
    80 $pass = 0; 
    81 $passes = 1000 + count($categories); 
    82 while ( ( $cat = array_shift($categories) ) && ++$pass < $passes ) { 
    83         if ( $cat->parent == 0 || isset($cats[$cat->parent]) ) { 
    84                 $cats[$cat->term_id] = $cat; 
    85         } else { 
    86                 $categories[] = $cat; 
    87         } 
    88 } 
    89 unset($categories); 
    90  
    91209/** 
    92210 * Place string in CDATA tag. 
    93211 * 
     
    212330        echo $the_list; 
    213331} 
    214332 
    215 echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?' . ">\n"; 
    216  
    217333?> 
    218 <!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your blog. --> 
    219 <!-- It contains information about your blog's posts, comments, and categories. --> 
    220 <!-- You may use this file to transfer that content from one site to another. --> 
    221 <!-- This file is not intended to serve as a complete backup of your blog. --> 
    222  
    223 <!-- To import this information into a WordPress blog follow these steps. --> 
    224 <!-- 1. Log into that blog as an administrator. --> 
    225 <!-- 2. Go to Tools: Import in the blog's admin panels (or Manage: Import in older versions of WordPress). --> 
    226 <!-- 3. Choose "WordPress" from the list. --> 
    227 <!-- 4. Upload this file using the form provided on that page. --> 
    228 <!-- 5. You will first be asked to map the authors in this export file to users --> 
    229 <!--    on the blog.  For each author, you may choose to map to an --> 
    230 <!--    existing user on the blog or to create a new user --> 
    231 <!-- 6. WordPress will then import each of the posts, comments, and categories --> 
    232 <!--    contained in this file into your blog --> 
    233  
    234 <?php the_generator('export');?> 
    235 <rss version="2.0" 
    236         xmlns:excerpt="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/excerpt/" 
    237         xmlns:content="http://purl.org/rss/1.0/modules/content/" 
    238         xmlns:wfw="http://wellformedweb.org/CommentAPI/" 
    239         xmlns:dc="http://purl.org/dc/elements/1.1/" 
    240         xmlns:wp="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/" 
    241 > 
    242  
    243 <channel> 
    244         <title><?php bloginfo_rss('name'); ?></title> 
    245         <link><?php bloginfo_rss('url') ?></link> 
    246         <description><?php bloginfo_rss("description") ?></description> 
    247         <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_lastpostmodified('GMT'), false); ?></pubDate> 
    248         <generator>http://wordpress.org/?v=<?php bloginfo_rss('version'); ?></generator> 
    249         <language><?php echo get_option('rss_language'); ?></language> 
    250         <wp:wxr_version><?php echo WXR_VERSION; ?></wp:wxr_version> 
    251         <wp:base_site_url><?php echo wxr_site_url(); ?></wp:base_site_url> 
    252         <wp:base_blog_url><?php bloginfo_rss('url'); ?></wp:base_blog_url> 
    253 <?php if ( $cats ) : foreach ( $cats as $c ) : ?> 
    254         <wp:category><wp:category_nicename><?php echo $c->slug; ?></wp:category_nicename><wp:category_parent><?php echo $c->parent ? $cats[$c->parent]->name : ''; ?></wp:category_parent><?php wxr_cat_name($c); ?><?php wxr_category_description($c); ?></wp:category> 
    255 <?php endforeach; endif; ?> 
    256 <?php if ( $tags ) : foreach ( $tags as $t ) : ?> 
    257         <wp:tag><wp:tag_slug><?php echo $t->slug; ?></wp:tag_slug><?php wxr_tag_name($t); ?><?php wxr_tag_description($t); ?></wp:tag> 
    258 <?php endforeach; endif; ?> 
    259         <?php do_action('rss2_head'); ?> 
    260         <?php if ($post_ids) { 
    261                 global $wp_query; 
    262                 $wp_query->in_the_loop = true;  // Fake being in the loop. 
    263                 // fetch 20 posts at a time rather than loading the entire table into memory 
    264                 while ( $next_posts = array_splice($post_ids, 0, 20) ) { 
    265                         $where = "WHERE ID IN (".join(',', $next_posts).")"; 
    266                         $posts = $wpdb->get_results("SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC"); 
    267                                 foreach ($posts as $post) { 
    268                         // Don't export revisions.  They bloat the export. 
    269                         if ( 'revision' == $post->post_type ) 
    270                                 continue; 
    271                         setup_postdata($post); ?> 
    272 <item> 
    273 <title><?php echo apply_filters('the_title_rss', $post->post_title); ?></title> 
    274 <link><?php the_permalink_rss() ?></link> 
    275 <pubDate><?php echo mysql2date('D, d M Y H:i:s +0000', get_post_time('Y-m-d H:i:s', true), false); ?></pubDate> 
    276 <dc:creator><?php echo wxr_cdata(get_the_author()); ?></dc:creator> 
    277 <?php wxr_post_taxonomy() ?> 
    278  
    279 <guid isPermaLink="false"><?php the_guid(); ?></guid> 
    280 <description></description> 
    281 <content:encoded><?php echo wxr_cdata( apply_filters('the_content_export', $post->post_content) ); ?></content:encoded> 
    282 <excerpt:encoded><?php echo wxr_cdata( apply_filters('the_excerpt_export', $post->post_excerpt) ); ?></excerpt:encoded> 
    283 <wp:post_id><?php echo $post->ID; ?></wp:post_id> 
    284 <wp:post_date><?php echo $post->post_date; ?></wp:post_date> 
    285 <wp:post_date_gmt><?php echo $post->post_date_gmt; ?></wp:post_date_gmt> 
    286 <wp:comment_status><?php echo $post->comment_status; ?></wp:comment_status> 
    287 <wp:ping_status><?php echo $post->ping_status; ?></wp:ping_status> 
    288 <wp:post_name><?php echo $post->post_name; ?></wp:post_name> 
    289 <wp:status><?php echo $post->post_status; ?></wp:status> 
    290 <wp:post_parent><?php echo $post->post_parent; ?></wp:post_parent> 
    291 <wp:menu_order><?php echo $post->menu_order; ?></wp:menu_order> 
    292 <wp:post_type><?php echo $post->post_type; ?></wp:post_type> 
    293 <wp:post_password><?php echo $post->post_password; ?></wp:post_password> 
    294 <?php 
    295 if ($post->post_type == 'attachment') { ?> 
    296 <wp:attachment_url><?php echo wp_get_attachment_url($post->ID); ?></wp:attachment_url> 
    297 <?php } ?> 
    298 <?php 
    299 $postmeta = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID) ); 
    300 if ( $postmeta ) { 
    301 ?> 
    302 <?php foreach( $postmeta as $meta ) { ?> 
    303 <wp:postmeta> 
    304 <wp:meta_key><?php echo $meta->meta_key; ?></wp:meta_key> 
    305 <wp:meta_value><?Php echo $meta->meta_value; ?></wp:meta_value> 
    306 </wp:postmeta> 
    307 <?php } ?> 
    308 <?php } ?> 
    309 <?php 
    310 $comments = $wpdb->get_results( $wpdb->prepare("SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d", $post->ID) ); 
    311 if ( $comments ) { foreach ( $comments as $c ) { ?> 
    312 <wp:comment> 
    313 <wp:comment_id><?php echo $c->comment_ID; ?></wp:comment_id> 
    314 <wp:comment_author><?php echo wxr_cdata($c->comment_author); ?></wp:comment_author> 
    315 <wp:comment_author_email><?php echo $c->comment_author_email; ?></wp:comment_author_email> 
    316 <wp:comment_author_url><?php echo $c->comment_author_url; ?></wp:comment_author_url> 
    317 <wp:comment_author_IP><?php echo $c->comment_author_IP; ?></wp:comment_author_IP> 
    318 <wp:comment_date><?php echo $c->comment_date; ?></wp:comment_date> 
    319 <wp:comment_date_gmt><?php echo $c->comment_date_gmt; ?></wp:comment_date_gmt> 
    320 <wp:comment_content><?php echo wxr_cdata($c->comment_content) ?></wp:comment_content> 
    321 <wp:comment_approved><?php echo $c->comment_approved; ?></wp:comment_approved> 
    322 <wp:comment_type><?php echo $c->comment_type; ?></wp:comment_type> 
    323 <wp:comment_parent><?php echo $c->comment_parent; ?></wp:comment_parent> 
    324 <wp:comment_user_id><?php echo $c->user_id; ?></wp:comment_user_id> 
    325 </wp:comment> 
    326 <?php } } ?> 
    327         </item> 
    328 <?php } } } ?> 
    329 </channel> 
    330 </rss> 
    331 <?php 
    332 } 
    333  
    334 ?>