Example #1
0
 /**
  * Useful verbosity filters for the WXR importer
  */
 private function add_wxr_filters()
 {
     add_filter('wp_import_posts', function ($posts) {
         global $wpcli_import_counts;
         $wpcli_import_counts['current_post'] = 0;
         $wpcli_import_counts['total_posts'] = count($posts);
         return $posts;
     }, 10);
     add_filter('wp_import_post_comments', function ($comments, $post_id, $post) {
         global $wpcli_import_counts;
         $wpcli_import_counts['current_comment'] = 0;
         $wpcli_import_counts['total_comments'] = count($comments);
         return $comments;
     }, 10, 3);
     add_filter('wp_import_post_data_raw', function ($post) {
         global $wpcli_import_counts;
         $wpcli_import_counts['current_post']++;
         WP_CLI::line();
         WP_CLI::line();
         WP_CLI::line(sprintf('Processing post #%d ("%s") (post_type: %s)', $post['post_id'], $post['post_title'], $post['post_type']));
         WP_CLI::line(sprintf('-- %s of %s', number_format($wpcli_import_counts['current_post']), number_format($wpcli_import_counts['total_posts'])));
         WP_CLI::line('-- ' . date('r'));
         return $post;
     });
     add_action('wp_import_insert_post', function ($post_id, $original_post_ID, $post, $postdata) {
         global $wpcli_import_counts;
         if (is_wp_error($post_id)) {
             WP_CLI::warning("-- Error importing post: " . $post_id->get_error_code());
         } else {
             WP_CLI::line("-- Imported post as post_id #{$post_id}");
         }
         if ($wpcli_import_counts['current_post'] % 500 === 0) {
             WP_CLI\Utils\wp_clear_object_cache();
             WP_CLI::line("-- Cleared object cache.");
         }
     }, 10, 4);
     add_action('wp_import_insert_term', function ($t, $import_term, $post_id, $post) {
         WP_CLI::line("-- Created term \"{$import_term['name']}\"");
     }, 10, 4);
     add_action('wp_import_set_post_terms', function ($tt_ids, $term_ids, $taxonomy, $post_id, $post) {
         WP_CLI::line("-- Added terms (" . implode(',', $term_ids) . ") for taxonomy \"{$taxonomy}\"");
     }, 10, 5);
     add_action('wp_import_insert_comment', function ($comment_id, $comment, $comment_post_ID, $post) {
         global $wpcli_import_counts;
         $wpcli_import_counts['current_comment']++;
         WP_CLI::line(sprintf('-- Added comment #%d (%s of %s)', $comment_id, number_format($wpcli_import_counts['current_comment']), number_format($wpcli_import_counts['total_comments'])));
     }, 10, 4);
     add_action('import_post_meta', function ($post_id, $key, $value) {
         WP_CLI::line("-- Added post_meta {$key}");
     }, 10, 3);
 }
Example #2
0
 /**
  * Export content to a WXR file.
  *
  * ## OPTIONS
  *
  * [--dir=<dirname>]
  * : Full path to directory where WXR export files should be stored. Defaults
  * to current working directory.
  *
  * [--skip_comments]
  * : Don't export comments.
  *
  * [--max_file_size=<MB>]
  * : A single export file should have this many megabytes.
  * ---
  * default: 15
  * ---
  *
  * ## FILTERS
  *
  * [--start_date=<date>]
  * : Export only posts published after this date, in format YYYY-MM-DD.
  *
  * [--end_date=<date>]
  * : Export only posts published before this date, in format YYYY-MM-DD.
  *
  * [--post_type=<post-type>]
  * : Export only posts with this post_type. Separate multiple post types with a
  * comma.
  * ---
  * default: any
  * ---
  *
  * [--post_type__not_in=<post-type>]
  * : Export all post types except those identified. Separate multiple post types
  * with a comma. Defaults to none.
  *
  * [--post__in=<pid>]
  * : Export all posts specified as a comma- or space-separated list of IDs.
  *
  * [--start_id=<pid>]
  * : Export only posts with IDs greater than or equal to this post ID.
  *
  * [--author=<author>]
  * : Export only posts by this author. Can be either user login or user ID.
  *
  * [--category=<name>]
  * : Export only posts in this category.
  *
  * [--post_status=<status>]
  * : Export only posts with this status.
  *
  * [--filename_format=<format>]
  * : Use a custom format for export filenames. Defaults to '{site}.wordpress.{date}.{n}.xml'.
  *
  * ## EXAMPLES
  *
  *     # Export posts published by the user between given start and end date
  *     $ wp export --dir=/tmp/ --user=admin --post_type=post --start_date=2011-01-01 --end_date=2011-12-31
  *     Starting export process...
  *     Writing to file /tmp/staging.wordpress.2016-05-24.000.xml
  *     Success: All done with export.
  *
  *     # Export posts by IDs
  *     $ wp export --dir=/tmp/ --post__in=123,124,125
  *     Starting export process...
  *     Writing to file /tmp/staging.wordpress.2016-05-24.000.xml
  *     Success: All done with export.
  *
  *     # Export a random subset of content
  *     $ wp export --post__in="$(wp post list --post_type=post --orderby=rand --posts_per_page=8 --format=ids)"
  *     Starting export process...
  *     Writing to file /var/www/example.com/public_html/staging.wordpress.2016-05-24.000.xml
  *     Success: All done with export.
  */
 public function __invoke($_, $assoc_args)
 {
     $defaults = array('dir' => NULL, 'start_date' => NULL, 'end_date' => NULL, 'post_type' => NULL, 'post_type__not_in' => NULL, 'author' => NULL, 'category' => NULL, 'post_status' => NULL, 'post__in' => NULL, 'start_id' => NULL, 'skip_comments' => NULL, 'max_file_size' => 15, 'filename_format' => '{site}.wordpress.{date}.{n}.xml');
     $assoc_args = wp_parse_args($assoc_args, $defaults);
     $this->validate_args($assoc_args);
     if (!function_exists('wp_export')) {
         self::load_export_api();
     }
     WP_CLI::log('Starting export process...');
     add_action('wp_export_new_file', function ($file_path) {
         WP_CLI::log(sprintf("Writing to file %s", $file_path));
         WP_CLI\Utils\wp_clear_object_cache();
     });
     try {
         wp_export(array('filters' => $this->export_args, 'writer' => 'WP_Export_Split_Files_Writer', 'writer_args' => array('max_file_size' => $this->max_file_size * MB_IN_BYTES, 'destination_directory' => $this->wxr_path, 'filename_template' => self::get_filename_template($assoc_args['filename_format']))));
     } catch (Exception $e) {
         WP_CLI::error($e->getMessage());
     }
     WP_CLI::success('All done with export.');
 }