Skip to content

Partial Database Export with data specified by a custom WP-CLI command

The data to be included in a Partial Database Export file can be specified by a custom WP-CLI command that is added to an application’s codebase. The logic of the custom WP-CLI command should be configured to retrieve the desired set of data for the export. The custom WP-CLI command can also have custom options that help extend the usefulness of the custom WP-CLI command (e.g. an option that enables a user to retrieve the data by author or a specific range of time).

For this method to work as expected, the custom WP-CLI command must exist on the branch that deploys to the environment from which the Partial Database Export file will be exported.

Note

Custom WP-CLI commands should be developed locally and thoroughly tested before they are deployed to a VIP Platform environment and used for a Partial Database Export.

In this example code for a custom WP-CLI command my-custom-data-export, the command is designed to retrieve a custom set of data. The option --days is added to the custom command to allow a user to limit the data retrieved by a specific number of days in the past.

if ( defined( 'WP_CLI' ) && WP_CLI ) {
	WP_CLI::add_command( 'my-custom-data-export', function( $args, $assoc_args ) {
		global $wpdb;

		$days = WP_CLI\Utils\get_flag_value( $assoc_args, 'days', 30 );

		$export_data = array(
			'tables' => array()
		);

		$lastUpdatedPostsWhere = "post_date >= NOW() - INTERVAL $days DAY OR post_modified >= NOW() - INTERVAL $days DAY";

		// wp_posts
		$export_data['tables']['wp_posts'] = array(
			'where' => $lastUpdatedPostsWhere
		);

		$export_data['tables']['wp_postmeta'] = array(
			'where' => "meta_id IN (SELECT meta_id FROM wp_postmeta JOIN wp_posts ON (wp_postmeta.post_id = wp_posts.ID) WHERE $lastUpdatedPostsWhere)"
		);

		$export_data['tables']['wp_comments'] = array(
			'where' => "comment_post_ID IN (SELECT comment_post_ID FROM wp_comments JOIN wp_posts ON (wp_comments.comment_post_ID = wp_posts.ID) WHERE $lastUpdatedPostsWhere)"
		);

		// wp_users
		if ( WP_CLI\Utils\get_flag_value( $assoc_args, 'include-users', false ) ) {
			$export_data['tables']['wp_users'] = array();
		}

		// Output JSON
		WP_CLI::line( json_encode( $export_data, JSON_PRETTY_PRINT ) );
	} );
}

To use the custom WP-CLI command to configure the data of a generated Partial Database Export file, pass the name of the command within quotes to the --wpcli-command option when running the VIP-CLI command vip export sql.

For example:

// data from the last 30 days
vip @example-app.develop export sql --wpcli-command="my-custom-data-export"

To generate a file that includes the data specified by the custom WP-CLI command but to increase the number of days to 180, pass the name of the command and the argument --days=180 within quotes:

// data from the last 180 days
vip @example-app.develop export sql --wpcli-command="my-custom-data-export --days=180"

Last updated: December 05, 2025

Relevant to

  • WordPress