X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/e08b42e8ad054ec67522d7ac1aaae5dc68cb3d01..refs/tags/wordpress-4.4-scripts:/wp-admin/includes/export.php
diff --git a/wp-admin/includes/export.php b/wp-admin/includes/export.php
index a7f20991..4b18c9c0 100644
--- a/wp-admin/includes/export.php
+++ b/wp-admin/includes/export.php
@@ -16,11 +16,14 @@
define( 'WXR_VERSION', '1.2' );
/**
- * Generates the WXR export file for download
+ * Generates the WXR export file for download.
*
* @since 2.1.0
*
- * @param array $args Filters defining what should be included in the export
+ * @global wpdb $wpdb
+ * @global WP_Post $post
+ *
+ * @param array $args Filters defining what should be included in the export.
*/
function export_wp( $args = array() ) {
global $wpdb, $post;
@@ -30,11 +33,31 @@ function export_wp( $args = array() ) {
);
$args = wp_parse_args( $args, $defaults );
+ /**
+ * Fires at the beginning of an export, before any headers are sent.
+ *
+ * @since 2.3.0
+ *
+ * @param array $args An array of export arguments.
+ */
do_action( 'export_wp', $args );
$sitename = sanitize_key( get_bloginfo( 'name' ) );
- if ( ! empty($sitename) ) $sitename .= '.';
- $filename = $sitename . 'wordpress.' . date( 'Y-m-d' ) . '.xml';
+ if ( ! empty( $sitename ) ) {
+ $sitename .= '.';
+ }
+ $date = date( 'Y-m-d' );
+ $wp_filename = $sitename . 'wordpress.' . $date . '.xml';
+ /**
+ * Filter the export filename.
+ *
+ * @since 4.4.0
+ *
+ * @param string $wp_filename The name of the file for download.
+ * @param string $sitename The site name.
+ * @param string $date Today's date, formatted.
+ */
+ $filename = apply_filters( 'export_wp_filename', $wp_filename, $sitename, $date );
header( 'Content-Description: File Transfer' );
header( 'Content-Disposition: attachment; filename=' . $filename );
@@ -65,7 +88,7 @@ function export_wp( $args = array() ) {
}
}
- if ( 'post' == $args['content'] || 'page' == $args['content'] ) {
+ if ( 'post' == $args['content'] || 'page' == $args['content'] || 'attachment' == $args['content'] ) {
if ( $args['author'] )
$where .= $wpdb->prepare( " AND {$wpdb->posts}.post_author = %d", $args['author'] );
@@ -76,23 +99,26 @@ function export_wp( $args = array() ) {
$where .= $wpdb->prepare( " AND {$wpdb->posts}.post_date < %s", date( 'Y-m-d', strtotime('+1 month', strtotime($args['end_date'])) ) );
}
- // grab a snapshot of post IDs, just in case it changes during the export
+ // Grab a snapshot of post IDs, just in case it changes during the export.
$post_ids = $wpdb->get_col( "SELECT ID FROM {$wpdb->posts} $join WHERE $where" );
- // get the requested terms ready, empty unless posts filtered by category or all content
+ /*
+ * Get the requested terms ready, empty unless posts filtered by category
+ * or all content.
+ */
$cats = $tags = $terms = array();
if ( isset( $term ) && $term ) {
$cat = get_term( $term['term_id'], 'category' );
$cats = array( $cat->term_id => $cat );
unset( $term, $cat );
- } else if ( 'all' == $args['content'] ) {
+ } elseif ( 'all' == $args['content'] ) {
$categories = (array) get_categories( array( 'get' => 'all' ) );
$tags = (array) get_tags( array( 'get' => 'all' ) );
$custom_taxonomies = get_taxonomies( array( '_builtin' => false ) );
$custom_terms = (array) get_terms( $custom_taxonomies, array( 'get' => 'all' ) );
- // put categories in order with no child going before its parent
+ // Put categories in order with no child going before its parent.
while ( $cat = array_shift( $categories ) ) {
if ( $cat->parent == 0 || isset( $cats[$cat->parent] ) )
$cats[$cat->term_id] = $cat;
@@ -100,7 +126,7 @@ function export_wp( $args = array() ) {
$categories[] = $cat;
}
- // put terms in order with no child going before its parent
+ // Put terms in order with no child going before its parent.
while ( $t = array_shift( $custom_terms ) ) {
if ( $t->parent == 0 || isset( $terms[$t->parent] ) )
$terms[$t->term_id] = $t;
@@ -120,9 +146,9 @@ function export_wp( $args = array() ) {
* @return string
*/
function wxr_cdata( $str ) {
- if ( seems_utf8( $str ) == false )
+ if ( ! seems_utf8( $str ) ) {
$str = utf8_encode( $str );
-
+ }
// $str = ent2ncr(esc_html($str));
$str = '', ']]]]>', $str ) . ']]>';
@@ -137,10 +163,10 @@ function export_wp( $args = array() ) {
* @return string Site URL.
*/
function wxr_site_url() {
- // ms: the base url
+ // Multisite: the base URL.
if ( is_multisite() )
return network_home_url();
- // wp: the blog url
+ // WordPress (single site): the blog URL.
else
return get_bloginfo_rss( 'url' );
}
@@ -233,12 +259,23 @@ function export_wp( $args = array() ) {
* Output list of authors with posts
*
* @since 3.1.0
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @param array $post_ids Array of post IDs to filter the query by. Optional.
*/
- function wxr_authors_list() {
+ function wxr_authors_list( array $post_ids = null ) {
global $wpdb;
+ if ( !empty( $post_ids ) ) {
+ $post_ids = array_map( 'absint', $post_ids );
+ $and = 'AND ID IN ( ' . implode( ', ', $post_ids ) . ')';
+ } else {
+ $and = '';
+ }
+
$authors = array();
- $results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft'" );
+ $results = $wpdb->get_results( "SELECT DISTINCT post_author FROM $wpdb->posts WHERE post_status != 'auto-draft' $and" );
foreach ( (array) $results as $result )
$authors[] = get_userdata( $result->post_author );
@@ -246,12 +283,12 @@ function export_wp( $args = array() ) {
foreach ( $authors as $author ) {
echo "\t";
- echo '' . $author->ID . '';
- echo '' . $author->user_login . '';
- echo '' . $author->user_email . '';
+ echo '' . intval( $author->ID ) . '';
+ echo '' . wxr_cdata( $author->user_login ) . '';
+ echo '' . wxr_cdata( $author->user_email ) . '';
echo '' . wxr_cdata( $author->display_name ) . '';
- echo '' . wxr_cdata( $author->user_firstname ) . '';
- echo '' . wxr_cdata( $author->user_lastname ) . '';
+ echo '' . wxr_cdata( $author->first_name ) . '';
+ echo '' . wxr_cdata( $author->last_name ) . '';
echo "\n";
}
}
@@ -267,7 +304,10 @@ function export_wp( $args = array() ) {
return;
foreach ( $nav_menus as $menu ) {
- echo "\t{$menu->term_id}nav_menu{$menu->slug}";
+ echo "\t";
+ echo '' . intval( $menu->term_id ) . '';
+ echo 'nav_menu';
+ echo '' . wxr_cdata( $menu->slug ) . '';
wxr_term_name( $menu );
echo "\n";
}
@@ -291,6 +331,12 @@ function export_wp( $args = array() ) {
}
}
+ /**
+ *
+ * @param bool $return_me
+ * @param string $meta_key
+ * @return bool
+ */
function wxr_filter_postmeta( $return_me, $meta_key ) {
if ( '_edit_lock' == $meta_key )
$return_me = true;
@@ -337,90 +383,148 @@ function export_wp( $args = array() ) {
-
+
- term_id ?>slug; ?>parent ? $cats[$c->parent]->slug : ''; ?>
+ term_id ); ?>slug ); ?>parent ? $cats[$c->parent]->slug : '' ); ?>
- term_id ?>slug; ?>
+ term_id ); ?>slug ); ?>
- term_id ?>taxonomy; ?>slug; ?>parent ? $terms[$t->parent]->slug : ''; ?>
+ term_id ); ?>taxonomy ); ?>slug ); ?>parent ? $terms[$t->parent]->slug : '' ); ?>
-
+
in_the_loop = true; // Fake being in the loop.
- // fetch 20 posts at a time rather than loading the entire table into memory
+ // Fake being in the loop.
+ $wp_query->in_the_loop = true;
+
+ // Fetch 20 posts at a time rather than loading the entire table into memory.
while ( $next_posts = array_splice( $post_ids, 0, 20 ) ) {
$where = 'WHERE ID IN (' . join( ',', $next_posts ) . ')';
$posts = $wpdb->get_results( "SELECT * FROM {$wpdb->posts} $where" );
- // Begin Loop
+ // Begin Loop.
foreach ( $posts as $post ) {
setup_postdata( $post );
$is_sticky = is_sticky( $post->ID ) ? 1 : 0;
?>
-
-
- post_title ); ?>
+ post_title );
+ ?>
- post_content ) ); ?>
- post_excerpt ) ); ?>
- ID; ?>
- post_date; ?>
- post_date_gmt; ?>
- comment_status; ?>
- ping_status; ?>
- post_name; ?>
- post_status; ?>
- post_parent; ?>
- menu_order; ?>
- post_type; ?>
- post_password; ?>
-
+ post_content ) );
+ ?>
+ post_excerpt ) );
+ ?>
+ ID ); ?>
+ post_date ); ?>
+ post_date_gmt ); ?>
+ comment_status ); ?>
+ ping_status ); ?>
+ post_name ); ?>
+ post_status ); ?>
+ post_parent ); ?>
+ menu_order ); ?>
+ post_type ); ?>
+ post_password ); ?>
+
post_type == 'attachment' ) : ?>
- ID ); ?>
+ ID ) ); ?>
get_results( $wpdb->prepare( "SELECT * FROM $wpdb->postmeta WHERE post_id = %d", $post->ID ) );
foreach ( $postmeta as $meta ) :
+ /**
+ * Filter whether to selectively skip post meta used for WXR exports.
+ *
+ * Returning a truthy value to the filter will skip the current meta
+ * object from being exported.
+ *
+ * @since 3.3.0
+ *
+ * @param bool $skip Whether to skip the current post meta. Default false.
+ * @param string $meta_key Current meta key.
+ * @param object $meta Current meta object.
+ */
if ( apply_filters( 'wxr_export_skip_postmeta', false, $meta->meta_key, $meta ) )
continue;
?>
- meta_key; ?>
+ meta_key ); ?>
meta_value ); ?>
-
-get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) );
+get_results( $wpdb->prepare( "SELECT * FROM $wpdb->comments WHERE comment_post_ID = %d AND comment_approved <> 'spam'", $post->ID ) );
+ $comments = array_map( 'get_comment', $_comments );
foreach ( $comments as $c ) : ?>
- comment_ID; ?>
+ comment_ID ); ?>
comment_author ); ?>
- comment_author_email; ?>
+ comment_author_email ); ?>
comment_author_url ); ?>
- comment_author_IP; ?>
- comment_date; ?>
- comment_date_gmt; ?>
+ comment_author_IP ); ?>
+ comment_date ); ?>
+ comment_date_gmt ); ?>
comment_content ) ?>
- comment_approved; ?>
- comment_type; ?>
- comment_parent; ?>
- user_id; ?>
+ comment_approved ); ?>
+ comment_type ); ?>
+ comment_parent ); ?>
+ user_id ); ?>
get_results( $wpdb->prepare( "SELECT * FROM $wpdb->commentmeta WHERE comment_id = %d", $c->comment_ID ) );
- foreach ( $c_meta as $meta ) : ?>
+ foreach ( $c_meta as $meta ) :
+ /**
+ * Filter whether to selectively skip comment meta used for WXR exports.
+ *
+ * Returning a truthy value to the filter will skip the current meta
+ * object from being exported.
+ *
+ * @since 4.0.0
+ *
+ * @param bool $skip Whether to skip the current comment meta. Default false.
+ * @param string $meta_key Current meta key.
+ * @param object $meta Current meta object.
+ */
+ if ( apply_filters( 'wxr_export_skip_commentmeta', false, $meta->meta_key, $meta ) ) {
+ continue;
+ }
+ ?>
- meta_key; ?>
+ meta_key ); ?>
meta_value ); ?>