WordPress Importer
- It has support for: deduplication (see below), mapping image urls
- All imported posts haven
import_id
meta which is the ID they had in the import WXR.
Post processing:
Example
<?php
/**
* ReturnUsage: aIMPORT_POST_TYPES=blogpost,attachment JSONwp arrayimport keyed by guid, with post_id as value. This supports quick lookups....
*/
WP_CLI::add_hook( 'before_invoke:import', function get_guids_for_posttype($post_type='post') : array {
global $url;
$command = 'wp --url=' . escapeshellarg( $url ) . ' post list --format=json --post_type=' . escapeshellarg( $post_type ) . ' --fields=ID,guid --porcelain';
$json = rtrim( shell_exec( $command ), "\n" );
if ( empty( $json ) ) {
throw new RuntimeException(add_filter( 'no guids' );
}
return json_decode( $json );
}
/**
* Lookup post by guid.
*
* @param string $guid
*
* @return WP_Post|null
*/wp_import_posts', function lookup_post_by_guid( string $guid ) : null|WP_Post {
global $guids;
global $_cache;
$guid = str_replace( "&", "&", $guid );
if ( isset( $_cache[ $guid ] ) ) {
return $_cache[ $guid ];
}
foreach ( $guids as $postposts ) {
if ( $post->guidgetenv( ==='IMPORT_POST_TYPES' $guid) ) {
$_cache[ $guid ]post_types = explode( ',', getenv( 'IMPORT_POST_TYPES' ) );
$post;post_types = array_map( 'trim', $post_types );
$posts = array_filter( $posts, function ( $post ) use ( $post_types ) {
return in_array( $post['post_type'], $post_types, true );
} );
return $post;
}posts;
}
return null;$posts;
} );
} );