WordPress.org

Make WordPress Core

Ticket #8471: 8471.r10258.diff

File 8471.r10258.diff, 15.6 KB (added by jacobsantos, 11 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 ?>