Ticket #15197: 15197-export.diff
| File 15197-export.diff, 27.0 KB (added by , 15 years ago) |
|---|
-
wp-admin/includes/export.php
11 11 * 12 12 * Bump this when something changes that might affect compatibility. 13 13 * 14 * @since unknown 15 * @var string 14 * @since 2.5.0 16 15 */ 17 define( 'WXR_VERSION', '1.0');16 define( 'WXR_VERSION', '1.1' ); 18 17 19 18 /** 20 * {@internal Missing Short Description}}19 * Generates the WXR export file for download 21 20 * 22 * @since unknown21 * @since 2.1.0 23 22 * 24 * @param unknown_type $args23 * @param array $args Filters defining what should be included in the export 25 24 */ 26 25 function export_wp( $args = array() ) { 27 global $wpdb, $post _ids, $post, $wp_taxonomies;26 global $wpdb, $post; 28 27 29 if ( ! is_array( $args ) ) 30 $args = array( 'author' => $args ); 28 do_action( 'export_wp' ); 31 29 32 $defaults = array( 'author' => null, 'taxonomy' => null, 'post_type' => null, 'post_status' => null, 'start_date' => null, 'end_date' => null ); 33 $args = wp_parse_args( $args, $defaults ); 30 $sitename = sanitize_key( get_bloginfo( 'name' ) ); 31 if ( ! empty($sitename) ) $sitename .= '.'; 32 $filename = $sitename . 'wordpress.' . date( 'Y-m-d' ) . '.xml'; 34 33 35 extract($args);36 37 do_action('export_wp');38 39 if( strlen( $start_date ) > 4 && strlen( $end_date ) > 4 )40 $filename = 'wordpress.' . $start_date . '.' . $end_date . '.xml';41 else42 $filename = 'wordpress.' . date( 'Y-m-d' ) . '.xml';43 44 34 header( 'Content-Description: File Transfer' ); 45 35 header( 'Content-Disposition: attachment; filename=' . $filename ); 46 36 header( 'Content-Type: text/xml; charset=' . get_option( 'blog_charset' ), true ); 47 37 48 if ( $post_type && $post_type != 'all' )49 $where = $wpdb->prepare("WHERE post_type = %s ", $post_type);50 else51 $where = "WHERE post_type != 'revision' ";52 53 if ( $author && $author != 'all' ) {54 $author_id = (int) $author;55 $where .= $wpdb->prepare( "AND post_author = %d ", $author_id );56 }57 58 if ( $start_date && $start_date != 'all' )59 $where .= $wpdb->prepare( "AND post_date >= %s ", $start_date );60 61 if ( $end_date && $end_date != 'all' )62 $where .= $wpdb->prepare( "AND post_date < %s ", $end_date );63 64 if ( $taxonomy && is_array( $taxonomy ) ) {65 foreach ( $taxonomy as $term_id ) {66 if ( $term_id != 'all' )67 $where .= $wpdb->prepare( "AND ID IN (SELECT object_id FROM $wpdb->term_relationships WHERE term_taxonomy_id = %d) ", $term_id );68 }69 }70 71 if ( $post_status && $post_status != 'all' )72 $where .= $wpdb->prepare( "AND post_status = %s", $post_status );73 74 38 // grab a snapshot of post IDs, just in case it changes during the export 75 $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts $whereORDER BY post_date_gmt ASC" );39 $post_ids = $wpdb->get_col( "SELECT ID FROM $wpdb->posts WHERE post_type != 'revision' AND post_status != 'auto-draft' ORDER BY post_date_gmt ASC" ); 76 40 77 41 $categories = (array) get_categories( array( 'get' => 'all' ) ); 78 42 $tags = (array) get_tags( array( 'get' => 'all' ) ); 79 43 80 $custom_taxonomies = $wp_taxonomies; 81 unset( $custom_taxonomies['category'] ); 82 unset( $custom_taxonomies['post_tag'] ); 83 unset( $custom_taxonomies['link_category'] ); 84 $custom_taxonomies = array_keys( $custom_taxonomies ); 85 $terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) ); 44 $custom_taxonomies = get_taxonomies( array( '_builtin' => false ) ); 45 $taxonomy_terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) ); 86 46 87 /** 88 * {@internal Missing Short Description}} 89 * 90 * @since unknown 91 * 92 * @param unknown_type $categories 93 */ 94 function wxr_missing_parents( $categories ) { 95 if ( ! is_array( $categories ) || empty( $categories ) ) 96 return array(); 97 98 foreach ( $categories as $category ){ 99 $parents[$category->term_id] = $category->parent; 100 } 101 102 $parents = array_unique( array_diff( $parents, array_keys( $parents ) ) ); 103 104 if ( $zero = array_search( '0', $parents ) ) 105 unset( $parents[$zero] ); 106 107 return $parents; 108 } 109 110 while ( $parents = wxr_missing_parents( $categories ) ) { 111 $found_parents = get_categories( array( 'include' => join( ', ', $parents) ) ); 112 if ( is_array( $found_parents ) && count( $found_parents ) ) 113 $categories = array_merge( $categories, $found_parents ); 114 else 115 break; 116 } 117 118 // Put them in order to be inserted with no child going before its parent 119 $pass = 0; 120 $passes = 1000 + count( $categories ); 121 while ( ( $cat = array_shift( $categories ) ) && ++$pass < $passes ) { 47 // put categories in order with no child going before its parent 48 $cats = array(); 49 while ( $cat = array_shift( $categories ) ) { 122 50 if ( $cat->parent == 0 || isset( $cats[$cat->parent] ) ) 123 51 $cats[$cat->term_id] = $cat; 124 52 else 125 53 $categories[] = $cat; 126 54 } 127 unset( $categories );128 55 56 // put terms in order with no child going before its parent 57 $terms = array(); 58 while ( $t = array_shift( $taxonomy_terms ) ) { 59 if ( $t->parent == 0 || isset( $terms[$t->parent] ) ) 60 $terms[$t->term_id] = $t; 61 else 62 $taxonomy_terms[] = $t; 63 } 64 129 65 /** 130 * Place string inCDATA tag.66 * Wrap given string in XML CDATA tag. 131 67 * 132 * @since unknown68 * @since 2.1.0 133 69 * 134 * @param string $str String to placein XML CDATA tag.70 * @param string $str String to wrap in XML CDATA tag. 135 71 */ 136 72 function wxr_cdata( $str ) { 137 73 if ( seems_utf8( $str ) == false ) … … 144 80 } 145 81 146 82 /** 147 * {@internal Missing Short Description}}83 * Return the URL of the site 148 84 * 149 * @since unknown85 * @since 2.5.0 150 86 * 151 87 * @return string Site URL. 152 88 */ 153 89 function wxr_site_url() { 154 global $current_site; 155 156 // mu: the base url 157 if ( isset( $current_site->domain ) ) 90 // ms: the base url 91 if ( is_multisite() ) 158 92 return network_home_url(); 159 93 // wp: the blog url 160 94 else … … 162 96 } 163 97 164 98 /** 165 * {@internal Missing Short Description}}99 * Output a cat_name XML tag from a given category object 166 100 * 167 * @since unknown101 * @since 2.1.0 168 102 * 169 * @param object $c Category Object103 * @param object $category Category Object 170 104 */ 171 function wxr_cat_name( $c ) {172 if ( empty( $c ->name ) )105 function wxr_cat_name( $category ) { 106 if ( empty( $category->name ) ) 173 107 return; 174 108 175 echo '<wp:cat_name>' . wxr_cdata( $c ->name ) . '</wp:cat_name>';109 echo '<wp:cat_name>' . wxr_cdata( $category->name ) . '</wp:cat_name>'; 176 110 } 177 111 178 112 /** 179 * {@internal Missing Short Description}}113 * Output a category_description XML tag from a given category object 180 114 * 181 * @since unknown115 * @since 2.1.0 182 116 * 183 * @param object $c Category Object117 * @param object $category Category Object 184 118 */ 185 function wxr_category_description( $c ) {186 if ( empty( $c ->description ) )119 function wxr_category_description( $category ) { 120 if ( empty( $category->description ) ) 187 121 return; 188 122 189 echo '<wp:category_description>' . wxr_cdata( $c->description) . '</wp:category_description>';123 echo '<wp:category_description>' . wxr_cdata( $category->description ) . '</wp:category_description>'; 190 124 } 191 125 192 126 /** 193 * {@internal Missing Short Description}}127 * Output a tag_name XML tag from a given tag object 194 128 * 195 * @since unknown129 * @since 2.3.0 196 130 * 197 * @param object $t Tag Object131 * @param object $tag Tag Object 198 132 */ 199 function wxr_tag_name( $t ) {200 if ( empty( $t ->name ) )133 function wxr_tag_name( $tag ) { 134 if ( empty( $tag->name ) ) 201 135 return; 202 136 203 echo '<wp:tag_name>' . wxr_cdata( $t->name) . '</wp:tag_name>';137 echo '<wp:tag_name>' . wxr_cdata( $tag->name ) . '</wp:tag_name>'; 204 138 } 205 139 206 140 /** 207 * {@internal Missing Short Description}}141 * Output a tag_description XML tag from a given tag object 208 142 * 209 * @since unknown143 * @since 2.3.0 210 144 * 211 * @param object $t Tag Object145 * @param object $tag Tag Object 212 146 */ 213 function wxr_tag_description( $t ) {214 if ( empty( $t ->description ) )147 function wxr_tag_description( $tag ) { 148 if ( empty( $tag->description ) ) 215 149 return; 216 150 217 echo '<wp:tag_description>' . wxr_cdata( $t->description) . '</wp:tag_description>';151 echo '<wp:tag_description>' . wxr_cdata( $tag->description ) . '</wp:tag_description>'; 218 152 } 219 153 220 154 /** 221 * {@internal Missing Short Description}}155 * Output a term_name XML tag from a given term object 222 156 * 223 * @since unknown157 * @since 2.9.0 224 158 * 225 * @param object $t Term Object159 * @param object $term Term Object 226 160 */ 227 function wxr_term_name( $t ) {228 if ( empty( $t ->name ) )161 function wxr_term_name( $term ) { 162 if ( empty( $term->name ) ) 229 163 return; 230 164 231 echo '<wp:term_name>' . wxr_cdata( $t->name) . '</wp:term_name>';165 echo '<wp:term_name>' . wxr_cdata( $term->name ) . '</wp:term_name>'; 232 166 } 233 167 234 168 /** 235 * {@internal Missing Short Description}}169 * Output a term_description XML tag from a given term object 236 170 * 237 * @since unknown171 * @since 2.9.0 238 172 * 239 * @param object $t Term Object173 * @param object $term Term Object 240 174 */ 241 function wxr_term_description( $t ) {242 if ( empty( $t ->description ) )175 function wxr_term_description( $term ) { 176 if ( empty( $term->description ) ) 243 177 return; 244 178 245 echo '<wp:term_description>' . wxr_cdata( $t->description) . '</wp:term_description>';179 echo '<wp:term_description>' . wxr_cdata( $term->description ) . '</wp:term_description>'; 246 180 } 247 181 248 182 /** 249 * {@internal Missing Short Description}}183 * Output list of authors with posts 250 184 * 251 * @since unknown185 * @since 3.1.0 252 186 */ 187 function wxr_authors_list() { 188 global $wpdb; 189 190 $authors = array(); 191 $results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts" ); 192 foreach ( (array) $results as $result ) 193 $authors[] = get_userdata( $result->post_author ); 194 195 foreach( $authors as $author ) { 196 echo "\t<wp:author>"; 197 echo '<wp:author_login>' . $author->user_login . '</wp:author_login>'; 198 echo '<wp:author_email>' . $author->user_email . '</wp:author_email>'; 199 echo '<wp:author_display_name>' . wxr_cdata( $author->display_name ) . '</wp:author_display_name>'; 200 echo '<wp:author_first_name>' . wxr_cdata( $author->user_firstname ) . '</wp:author_first_name>'; 201 echo '<wp:author_last_name>' . wxr_cdata( $author->user_lastname ) . '</wp:author_last_name>'; 202 echo "</wp:author>\n"; 203 } 204 } 205 206 /** 207 * Ouput all navigation menu terms 208 * 209 * @since 3.1.0 210 */ 211 function wxr_nav_menu_terms() { 212 $nav_menus = wp_get_nav_menus(); 213 if ( empty( $nav_menus ) || ! is_array( $nav_menus ) ) 214 return; 215 216 foreach ( $nav_menus as $menu ) { 217 echo "\t<wp:term><wp:term_id>{$menu->term_id}</wp:term_id><wp:term_taxonomy>nav_menu</wp:term_taxonomy><wp:term_slug>{$menu->slug}</wp:term_slug>"; 218 wxr_term_name( $menu ); 219 echo "</wp:term>\n"; 220 } 221 } 222 223 /** 224 * Output list of taxonomy terms, in XML tag format, associated with a post 225 * 226 * @since 2.3.0 227 */ 253 228 function wxr_post_taxonomy() { 254 229 global $post; 255 230 256 $the_list = ''; 257 $filter = 'rss'; 231 $taxonomies = get_object_taxonomies( $post->post_type ); 232 if ( empty( $taxonomies ) ) 233 return; 234 $terms = wp_get_object_terms( $post->ID, $taxonomies ); 258 235 259 $taxonomies = get_object_taxonomies( 'post' );260 $terms = wp_get_post_terms( $post->ID, $taxonomies );261 236 foreach ( (array) $terms as $term ) { 262 $domain = ( 'post_tag' == $term->taxonomy ) ? 'tag' : $term->taxonomy; 263 $term_name = sanitize_term_field( 'name', $term->name, $term->term_id, $term->taxonomy, $filter ); 264 // Back compat. 265 if ( 'category' == $term->taxonomy ) 266 $the_list .= "\n\t\t<category><![CDATA[$term_name]]></category>\n"; 267 elseif ( 'post_tag' == $term->taxonomy ) 268 $the_list .= "\n\t\t<category domain=\"$domain\"><![CDATA[$term_name]]></category>\n"; 269 // forwards compatibility as above 270 $the_list .= "\n\t\t<category domain=\"$domain\" nicename=\"{$term->slug}\"><![CDATA[$term_name]]></category>\n"; 237 echo "\t\t<category domain=\"{$term->taxonomy}\" nicename=\"{$term->slug}\">" . wxr_cdata( $term->name ) . "</category>\n"; 271 238 } 272 echo $the_list;273 239 } 274 240 275 echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . '"?' . ">\n";241 echo '<?xml version="1.0" encoding="' . get_bloginfo('charset') . "\" ?>\n"; 276 242 277 243 ?> 278 <!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your blog. -->279 <!-- It contains information about your blog's posts, comments, and categories. -->244 <!-- This is a WordPress eXtended RSS file generated by WordPress as an export of your site. --> 245 <!-- It contains information about your site's posts, pages, comments, categories, and other content. --> 280 246 <!-- You may use this file to transfer that content from one site to another. --> 281 <!-- This file is not intended to serve as a complete backup of your blog. -->247 <!-- This file is not intended to serve as a complete backup of your site. --> 282 248 283 <!-- To import this information into a WordPress blog follow these steps. --> 284 <!-- 1. Log in to that blog as an administrator. --> 285 <!-- 2. Go to Tools: Import in the blog's admin panels (or Manage: Import in older versions of WordPress). --> 286 <!-- 3. Choose "WordPress" from the list. --> 287 <!-- 4. Upload this file using the form provided on that page. --> 288 <!-- 5. You will first be asked to map the authors in this export file to users --> 289 <!-- on the blog. For each author, you may choose to map to an --> 290 <!-- existing user on the blog or to create a new user --> 291 <!-- 6. WordPress will then import each of the posts, comments, and categories --> 292 <!-- contained in this file into your blog --> 249 <!-- To import this information into a WordPress site follow these steps: --> 250 <!-- 1. Log in to that site as an administrator. --> 251 <!-- 2. Go to Tools: Import in the WordPress admin panel. --> 252 <!-- 3. Install the "WordPress" importer from the list. --> 253 <!-- 4. Activate & Run Importer. --> 254 <!-- 5. Upload this file using the form provided on that page. --> 255 <!-- 6. You will first be asked to map the authors in this export file to users --> 256 <!-- on the site. For each author, you may choose to map to an --> 257 <!-- existing user on the site or to create a new user. --> 258 <!-- 7. WordPress will then import each of the posts, pages, comments, categories, etc. --> 259 <!-- contained in this file into your site. --> 293 260 294 <?php the_generator( 'export' ); ?>261 <?php the_generator( 'export' ); ?> 295 262 <rss version="2.0" 296 263 xmlns:excerpt="http://wordpress.org/export/<?php echo WXR_VERSION; ?>/excerpt/" 297 264 xmlns:content="http://purl.org/rss/1.0/modules/content/" … … 302 269 303 270 <channel> 304 271 <title><?php bloginfo_rss( 'name' ); ?></title> 305 <link><?php bloginfo_rss( 'url' ) ?></link>306 <description><?php bloginfo_rss( 'description' ) ?></description>272 <link><?php bloginfo_rss( 'url' ); ?></link> 273 <description><?php bloginfo_rss( 'description' ); ?></description> 307 274 <pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_lastpostmodified( 'GMT' ), false ); ?></pubDate> 308 <generator>http://wordpress.org/?v=<?php bloginfo_rss( 'version' ); ?></generator>309 275 <language><?php echo get_option( 'rss_language' ); ?></language> 310 276 <wp:wxr_version><?php echo WXR_VERSION; ?></wp:wxr_version> 311 277 <wp:base_site_url><?php echo wxr_site_url(); ?></wp:base_site_url> 312 278 <wp:base_blog_url><?php bloginfo_rss( 'url' ); ?></wp:base_blog_url> 313 <?php if ( $cats ) : foreach ( $cats as $c ) : ?>314 <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>315 <?php endforeach; endif; ?>316 <?php if ( $tags ) : foreach ( $tags as $t ) : ?>317 <wp:tag><wp:tag_slug><?php echo $t->slug; ?></wp:tag_slug><?php wxr_tag_name( $t ); ?><?php wxr_tag_description( $t ); ?></wp:tag>318 <?php endforeach; endif; ?>319 <?php if ( $terms ) : foreach ( $terms as $t ) : ?>320 <wp:term><wp:term_taxonomy><?php echo $t->taxonomy; ?></wp:term_taxonomy><wp:term_slug><?php echo $t->slug; ?></wp:term_slug><wp:term_parent><?php echo $t->parent ? $custom_taxonomies[$t->parent]->name : ''; ?></wp:term_parent><?php wxr_term_name( $t ); ?><?php wxr_term_description( $t ); ?></wp:term>321 <?php endforeach; endif; ?>322 279 280 <?php wxr_authors_list(); ?> 281 282 <?php foreach ( $cats as $c ) : ?> 283 <wp:category><wp:term_id><?php echo $c->term_id ?></wp:term_id><wp:category_nicename><?php echo $c->slug; ?></wp:category_nicename><wp:category_parent><?php echo $c->parent ? $cats[$c->parent]->slug : ''; ?></wp:category_parent><?php wxr_cat_name( $c ); ?><?php wxr_category_description( $c ); ?></wp:category> 284 <?php endforeach; ?> 285 <?php foreach ( $tags as $t ) : ?> 286 <wp:tag><wp:term_id><?php echo $t->term_id ?></wp:term_id><wp:tag_slug><?php echo $t->slug; ?></wp:tag_slug><?php wxr_tag_name( $t ); ?><?php wxr_tag_description( $t ); ?></wp:tag> 287 <?php endforeach; ?> 288 <?php foreach ( $terms as $t ) : ?> 289 <wp:term><wp:term_id><?php echo $t->term_id ?></wp:term_id><wp:term_taxonomy><?php echo $t->taxonomy; ?></wp:term_taxonomy><wp:term_slug><?php echo $t->slug; ?></wp:term_slug><wp:term_parent><?php echo $t->parent ? $terms[$t->parent]->slug : ''; ?></wp:term_parent><?php wxr_term_name( $t ); ?><?php wxr_term_description( $t ); ?></wp:term> 290 <?php endforeach; ?> 291 <?php wxr_nav_menu_terms(); ?> 292 323 293 <?php do_action( 'rss2_head' ); ?> 324 294 325 <?php if ( $post_ids ) {295 <?php if ( $post_ids ) { 326 296 global $wp_query; 327 $wp_query->in_the_loop = true; // Fake being in the loop.297 $wp_query->in_the_loop = true; // Fake being in the loop. 328 298 329 299 // fetch 20 posts at a time rather than loading the entire table into memory 330 300 while ( $next_posts = array_splice( $post_ids, 0, 20 ) ) { … … 332 302 $posts = $wpdb->get_results( "SELECT * FROM $wpdb->posts $where ORDER BY post_date_gmt ASC" ); 333 303 334 304 // Begin Loop 335 foreach ($posts as $post) { 336 setup_postdata( $post ); 337 338 $is_sticky = 0; 339 if ( is_sticky( $post->ID ) ) 340 $is_sticky = 1; 341 342 ?> 305 foreach ( $posts as $post ) { 306 setup_postdata( $post ); 307 $is_sticky = is_sticky( $post->ID ) ? 1 : 0; 308 ?> 343 309 <item> 344 310 <title><?php echo apply_filters( 'the_title_rss', $post->post_title ); ?></title> 345 311 <link><?php the_permalink_rss() ?></link> 346 312 <pubDate><?php echo mysql2date( 'D, d M Y H:i:s +0000', get_post_time( 'Y-m-d H:i:s', true ), false ); ?></pubDate> 347 <dc:creator><?php echo wxr_cdata( get_the_author() ); ?></dc:creator> 348 <?php wxr_post_taxonomy() ?> 349 313 <dc:creator><?php echo get_the_author_meta( 'login' ); ?></dc:creator> 350 314 <guid isPermaLink="false"><?php esc_url( the_guid() ); ?></guid> 351 315 <description></description> 352 316 <content:encoded><?php echo wxr_cdata( apply_filters( 'the_content_export', $post->post_content ) ); ?></content:encoded> … … 363 327 <wp:post_type><?php echo $post->post_type; ?></wp:post_type> 364 328 <wp:post_password><?php echo $post->post_password; ?></wp:post_password> 365 329 <wp:is_sticky><?php echo $is_sticky; ?></wp:is_sticky> 366 <?php 367 if ( $post->post_type == 'attachment' ) { ?> 330 <?php if ( $post->post_type == 'attachment' ) : ?> 368 331 <wp:attachment_url><?php echo wp_get_attachment_url( $post->ID ); ?></wp:attachment_url> 369 <?php } ?> 370 <?php 371 $postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) ); 372 if ( $postmeta ) { 373 ?> 374 <?php foreach( $postmeta as $meta ) { ?> 332 <?php endif; ?> 333 <?php wxr_post_taxonomy(); ?> 334 <?php $postmeta = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) ); 335 if ( $postmeta ) : foreach( $postmeta as $meta ) : if ( $meta->meta_key != '_edit_lock' && $meta->meta_key != '_edit_last' ) : ?> 375 336 <wp:postmeta> 376 <wp:meta_key><?php echo $meta->meta_key; ?></wp:meta_key>377 <wp:meta_value><?php echo wxr_cdata( $meta->meta_value ); ?></wp:meta_value>337 <wp:meta_key><?php echo $meta->meta_key; ?></wp:meta_key> 338 <wp:meta_value><?php echo wxr_cdata( $meta->meta_value ); ?></wp:meta_value> 378 339 </wp:postmeta> 379 <?php } ?> 380 <?php } ?> 381 <?php 382 $comments = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d", $post->ID ) ); 383 if ( $comments ) { foreach ( $comments as $c ) { ?> 340 <?php endif; endforeach; endif; ?> 341 <?php $comments = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved = 1", $post->ID ) ); 342 if ( $comments ) : foreach ( $comments as $c ) : ?> 384 343 <wp:comment> 385 <wp:comment_id><?php echo $c->comment_ID; ?></wp:comment_id>386 <wp:comment_author><?php echo wxr_cdata( $c->comment_author ); ?></wp:comment_author>387 <wp:comment_author_email><?php echo $c->comment_author_email; ?></wp:comment_author_email>388 <wp:comment_author_url><?php echo esc_url_raw( $c->comment_author_url ); ?></wp:comment_author_url>389 <wp:comment_author_IP><?php echo $c->comment_author_IP; ?></wp:comment_author_IP>390 <wp:comment_date><?php echo $c->comment_date; ?></wp:comment_date>391 <wp:comment_date_gmt><?php echo $c->comment_date_gmt; ?></wp:comment_date_gmt>392 <wp:comment_content><?php echo wxr_cdata( $c->comment_content ) ?></wp:comment_content>393 <wp:comment_approved><?php echo $c->comment_approved; ?></wp:comment_approved>394 <wp:comment_type><?php echo $c->comment_type; ?></wp:comment_type>395 <wp:comment_parent><?php echo $c->comment_parent; ?></wp:comment_parent>396 <wp:comment_user_id><?php echo $c->user_id; ?></wp:comment_user_id>344 <wp:comment_id><?php echo $c->comment_ID; ?></wp:comment_id> 345 <wp:comment_author><?php echo wxr_cdata( $c->comment_author ); ?></wp:comment_author> 346 <wp:comment_author_email><?php echo $c->comment_author_email; ?></wp:comment_author_email> 347 <wp:comment_author_url><?php echo esc_url_raw( $c->comment_author_url ); ?></wp:comment_author_url> 348 <wp:comment_author_IP><?php echo $c->comment_author_IP; ?></wp:comment_author_IP> 349 <wp:comment_date><?php echo $c->comment_date; ?></wp:comment_date> 350 <wp:comment_date_gmt><?php echo $c->comment_date_gmt; ?></wp:comment_date_gmt> 351 <wp:comment_content><?php echo wxr_cdata( $c->comment_content ) ?></wp:comment_content> 352 <wp:comment_approved><?php echo $c->comment_approved; ?></wp:comment_approved> 353 <wp:comment_type><?php echo $c->comment_type; ?></wp:comment_type> 354 <wp:comment_parent><?php echo $c->comment_parent; ?></wp:comment_parent> 355 <wp:comment_user_id><?php echo $c->user_id; ?></wp:comment_user_id> 397 356 </wp:comment> 398 <?php } }?>357 <?php endforeach; endif; ?> 399 358 </item> 400 <?php359 <?php 401 360 } 402 361 } 403 362 } ?> … … 405 364 </rss> 406 365 <?php 407 366 } 408 409 ?> -
wp-admin/export.php
25 25 ); 26 26 27 27 if ( isset( $_GET['download'] ) ) { 28 $author = isset($_GET['author']) ? $_GET['author'] : 'all'; 29 $taxonomy = array(); 30 foreach ( get_taxonomies( array( 'show_ui' => true ) ) as $tax ) 31 $taxonomy[ $tax ] = ! empty( $_GET['export_taxonomy'][ $tax ] ) ? $_GET['export_taxonomy'][ $tax ] : 'all'; 32 $post_type = isset($_GET['export_post_type']) ? stripslashes_deep($_GET['export_post_type']) : 'all'; 33 $status = isset($_GET['export_post_status']) ? stripslashes_deep($_GET['export_post_status']) : 'all'; 34 $mm_start = isset($_GET['mm_start']) ? $_GET['mm_start'] : 'all'; 35 $mm_end = isset($_GET['mm_end']) ? $_GET['mm_end'] : 'all'; 36 if( $mm_start != 'all' ) { 37 $start_date = sprintf( "%04d-%02d-%02d", substr( $mm_start, 0, 4 ), substr( $mm_start, 5, 2 ), 1 ); 38 } else { 39 $start_date = 'all'; 40 } 41 if( $mm_end != 'all' ) { 42 $end_date = sprintf( "%04d-%02d-%02d", substr( $mm_end, 0, 4 ), substr( $mm_end, 5, 2 ), 1 ); 43 } else { 44 $end_date = 'all'; 45 } 46 47 export_wp( array( 'author' => $author, 'taxonomy' => $taxonomy, 'post_type' => $post_type, 'post_status' => $status, 'start_date' => $start_date, 'end_date' => $end_date ) ); 28 export_wp(); 48 29 die(); 49 30 } 50 31 … … 72 53 <p><?php _e('This format, which we call WordPress eXtended RSS or WXR, will contain your posts, pages, comments, custom fields, categories, and tags.'); ?></p> 73 54 <p><?php _e('Once you’ve saved the download file, you can use the Import function on another WordPress site to import this site.'); ?></p> 74 55 <form action="" method="get"> 75 <h3><?php _e('Filters'); ?></h3>76 77 <table class="form-table">78 <tr>79 <th><label for="mm_start"><?php _e('Start Date'); ?></label></th>80 <td>81 <select name="mm_start" id="mm_start">82 <option value="all" selected="selected"><?php _e('All Dates'); ?></option>83 <?php echo $dateoptions; ?>84 </select>85 </td>86 </tr>87 <tr>88 <th><label for="mm_end" id="mm_end"><?php _e('End Date'); ?></label></th>89 <td>90 <select name="mm_end" id="mm_end">91 <option value="all" selected="selected"><?php _e('All Dates'); ?></option>92 <?php echo $edateoptions; ?>93 </select>94 </td>95 </tr>96 <tr>97 <th><label for="author"><?php _e('Authors'); ?></label></th>98 <td>99 <select name="author" id="author">100 <option value="all" selected="selected"><?php _e('All Authors'); ?></option>101 <?php102 $authors = $wpdb->get_results( "SELECT DISTINCT u.id, u.display_name FROM $wpdb->users u INNER JOIN $wpdb->posts p WHERE u.id = p.post_author ORDER BY u.display_name" );103 foreach ( (array) $authors as $author ) {104 echo "<option value='{$author->id}'>{$author->display_name}</option>\n";105 }106 ?>107 </select>108 </td>109 </tr>110 <?php foreach ( get_taxonomies( array( 'show_ui' => true ), 'objects' ) as $tax_obj ) {111 $term_dropdown = wp_dropdown_categories( array( 'taxonomy' => $tax_obj->name, 'hide_if_empty' => true, 'show_option_all' => __( 'All Terms' ), 'name' => 'export_taxonomy[' . $tax_obj->name . ']', 'id' => 'taxonomy-' . $tax_obj->name, 'class' => '', 'echo' => false ) );112 if ( $term_dropdown )113 echo '<tr><th><label for="taxonomy-' . $tax_obj->name . '">' . $tax_obj->labels->name . '</label></th><td>' . $term_dropdown . '</td></tr>';114 }115 ?>116 <tr>117 <th><label for="post_type"><?php _e('Content Types'); ?></label></th>118 <td>119 <select name="export_post_type" id="post_type">120 <option value="all" selected="selected"><?php _e('All Content'); ?></option>121 <?php foreach ( get_post_types( array( 'public' => true, 'can_export' => true ), 'objects' ) as $post_type_obj ) { ?>122 <option value="<?php echo $post_type_obj->name; ?>"><?php echo $post_type_obj->labels->name; ?></option>123 <?php } ?>124 </select>125 </td>126 </tr>127 <tr>128 <th><label for="status"><?php _e('Statuses'); ?></label></th>129 <td>130 <select name="export_post_status" id="status">131 <option value="all" selected="selected"><?php _e('All Statuses'); ?></option>132 <?php foreach ( get_post_stati( array( 'internal' => false ), 'objects' ) as $post_status_obj ) { ?>133 <option value="<?php echo $post_status_obj->name; ?>"><?php echo $post_status_obj->label; ?></option>134 <?php } ?>135 </select>136 </td>137 </tr>138 </table>139 56 <?php submit_button( __('Download Export File'), 'secondary' ); ?> 140 57 <input type="hidden" name="download" value="true" /> 141 58 </p> -
wp-includes/general-template.php
2229 2229 $gen = '<!-- generator="WordPress/' . get_bloginfo( 'version' ) . '" -->'; 2230 2230 break; 2231 2231 case 'export': 2232 $gen = '<!-- generator="WordPress/' . get_bloginfo_rss('version') . '" created="'. date('Y-m-d H:i') . '" -->';2232 $gen = '<!-- generator="WordPress/' . get_bloginfo_rss('version') . '" created="'. date('Y-m-d H:i') . '" -->'; 2233 2233 break; 2234 2234 } 2235 2235 return apply_filters( "get_the_generator_{$type}", $gen, $type );