2019-03-12 09:27:46 +00:00
< ? php
/**
* WordPress Administration Importer API .
*
* @ package WordPress
* @ subpackage Administration
*/
/**
* Retrieve list of importers .
*
* @ since 2.0 . 0
*
* @ global array $wp_importers
* @ return array
*/
function get_importers () {
global $wp_importers ;
if ( is_array ( $wp_importers ) ) {
uasort ( $wp_importers , '_usort_by_first_member' );
}
return $wp_importers ;
}
/**
* Sorts a multidimensional array by first member of each top level member
*
* Used by uasort () as a callback , should not be used directly .
*
* @ since 2.9 . 0
* @ access private
*
* @ param array $a
* @ param array $b
* @ return int
*/
function _usort_by_first_member ( $a , $b ) {
return strnatcasecmp ( $a [ 0 ], $b [ 0 ] );
}
/**
* Register importer for WordPress .
*
* @ since 2.0 . 0
*
* @ global array $wp_importers
*
* @ param string $id Importer tag . Used to uniquely identify importer .
* @ param string $name Importer name and title .
* @ param string $description Importer description .
* @ param callable $callback Callback to run .
* @ return WP_Error Returns WP_Error when $callback is WP_Error .
*/
function register_importer ( $id , $name , $description , $callback ) {
global $wp_importers ;
2019-04-16 19:56:22 +00:00
if ( is_wp_error ( $callback ) ) {
2019-03-12 09:27:46 +00:00
return $callback ;
2019-04-16 19:56:22 +00:00
}
$wp_importers [ $id ] = array ( $name , $description , $callback );
2019-03-12 09:27:46 +00:00
}
/**
* Cleanup importer .
*
* Removes attachment based on ID .
*
* @ since 2.0 . 0
*
* @ param string $id Importer ID .
*/
function wp_import_cleanup ( $id ) {
wp_delete_attachment ( $id );
}
/**
* Handle importer uploading and add attachment .
*
* @ since 2.0 . 0
*
* @ return array Uploaded file ' s details on success , error message on failure
*/
function wp_import_handle_upload () {
if ( ! isset ( $_FILES [ 'import' ] ) ) {
return array (
2019-04-16 19:56:22 +00:00
'error' => __ ( 'File is empty. Please upload something more substantial. This error could also be caused by uploads being disabled in your php.ini or by post_max_size being defined as smaller than upload_max_filesize in php.ini.' ),
2019-03-12 09:27:46 +00:00
);
}
2019-04-16 19:56:22 +00:00
$overrides = array (
'test_form' => false ,
'test_type' => false ,
);
2019-03-12 09:27:46 +00:00
$_FILES [ 'import' ][ 'name' ] .= '.txt' ;
2019-04-16 19:56:22 +00:00
$upload = wp_handle_upload ( $_FILES [ 'import' ], $overrides );
2019-03-12 09:27:46 +00:00
if ( isset ( $upload [ 'error' ] ) ) {
return $upload ;
}
// Construct the object array
$object = array (
2019-04-16 19:56:22 +00:00
'post_title' => basename ( $upload [ 'file' ] ),
'post_content' => $upload [ 'url' ],
2019-03-12 09:27:46 +00:00
'post_mime_type' => $upload [ 'type' ],
2019-04-16 19:56:22 +00:00
'guid' => $upload [ 'url' ],
'context' => 'import' ,
'post_status' => 'private' ,
2019-03-12 09:27:46 +00:00
);
// Save the data
$id = wp_insert_attachment ( $object , $upload [ 'file' ] );
/*
* Schedule a cleanup for one day from now in case of failed
* import or missing wp_import_cleanup () call .
*/
wp_schedule_single_event ( time () + DAY_IN_SECONDS , 'importer_scheduled_cleanup' , array ( $id ) );
2019-04-16 19:56:22 +00:00
return array (
'file' => $upload [ 'file' ],
'id' => $id ,
);
2019-03-12 09:27:46 +00:00
}
/**
* Returns a list from WordPress . org of popular importer plugins .
*
* @ since 3.5 . 0
*
* @ return array Importers with metadata for each .
*/
function wp_get_popular_importers () {
include ( ABSPATH . WPINC . '/version.php' ); // include an unmodified $wp_version
2019-04-16 19:56:22 +00:00
$locale = get_user_locale ();
$cache_key = 'popular_importers_' . md5 ( $locale . $wp_version );
2019-03-12 09:27:46 +00:00
$popular_importers = get_site_transient ( $cache_key );
if ( ! $popular_importers ) {
2019-04-16 19:56:22 +00:00
$url = add_query_arg (
array (
'locale' => $locale ,
'version' => $wp_version ,
),
'http://api.wordpress.org/core/importers/1.1/'
);
2019-03-12 09:27:46 +00:00
$options = array ( 'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url ( '/' ) );
if ( wp_http_supports ( array ( 'ssl' ) ) ) {
$url = set_url_scheme ( $url , 'https' );
}
2019-04-16 19:56:22 +00:00
$response = wp_remote_get ( $url , $options );
2019-03-12 09:27:46 +00:00
$popular_importers = json_decode ( wp_remote_retrieve_body ( $response ), true );
if ( is_array ( $popular_importers ) ) {
set_site_transient ( $cache_key , $popular_importers , 2 * DAY_IN_SECONDS );
} else {
$popular_importers = false ;
}
}
if ( is_array ( $popular_importers ) ) {
// If the data was received as translated, return it as-is.
2019-04-16 19:56:22 +00:00
if ( $popular_importers [ 'translated' ] ) {
2019-03-12 09:27:46 +00:00
return $popular_importers [ 'importers' ];
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
foreach ( $popular_importers [ 'importers' ] as & $importer ) {
2019-04-16 19:56:22 +00:00
// phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText
2019-03-12 09:27:46 +00:00
$importer [ 'description' ] = translate ( $importer [ 'description' ] );
2019-04-16 19:56:22 +00:00
if ( $importer [ 'name' ] != 'WordPress' ) {
// phpcs:ignore WordPress.WP.I18n.LowLevelTranslationFunction,WordPress.WP.I18n.NonSingularStringLiteralText
2019-03-12 09:27:46 +00:00
$importer [ 'name' ] = translate ( $importer [ 'name' ] );
2019-04-16 19:56:22 +00:00
}
2019-03-12 09:27:46 +00:00
}
return $popular_importers [ 'importers' ];
}
return array (
// slug => name, description, plugin slug, and register_importer() slug
2019-04-16 19:56:22 +00:00
'blogger' => array (
'name' => __ ( 'Blogger' ),
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Import posts, comments, and users from a Blogger blog.' ),
'plugin-slug' => 'blogger-importer' ,
'importer-id' => 'blogger' ,
),
2019-04-16 19:56:22 +00:00
'wpcat2tag' => array (
'name' => __ ( 'Categories and Tags Converter' ),
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Convert existing categories to tags or tags to categories, selectively.' ),
'plugin-slug' => 'wpcat2tag-importer' ,
'importer-id' => 'wp-cat2tag' ,
),
'livejournal' => array (
2019-04-16 19:56:22 +00:00
'name' => __ ( 'LiveJournal' ),
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Import posts from LiveJournal using their API.' ),
'plugin-slug' => 'livejournal-importer' ,
'importer-id' => 'livejournal' ,
),
'movabletype' => array (
2019-04-16 19:56:22 +00:00
'name' => __ ( 'Movable Type and TypePad' ),
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Import posts and comments from a Movable Type or TypePad blog.' ),
'plugin-slug' => 'movabletype-importer' ,
'importer-id' => 'mt' ,
),
2019-04-16 19:56:22 +00:00
'opml' => array (
'name' => __ ( 'Blogroll' ),
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Import links in OPML format.' ),
'plugin-slug' => 'opml-importer' ,
'importer-id' => 'opml' ,
),
2019-04-16 19:56:22 +00:00
'rss' => array (
'name' => __ ( 'RSS' ),
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Import posts from an RSS feed.' ),
'plugin-slug' => 'rss-importer' ,
'importer-id' => 'rss' ,
),
2019-04-16 19:56:22 +00:00
'tumblr' => array (
'name' => __ ( 'Tumblr' ),
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Import posts & media from Tumblr using their API.' ),
'plugin-slug' => 'tumblr-importer' ,
'importer-id' => 'tumblr' ,
),
2019-04-16 19:56:22 +00:00
'wordpress' => array (
'name' => 'WordPress' ,
2019-03-12 09:27:46 +00:00
'description' => __ ( 'Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.' ),
'plugin-slug' => 'wordpress-importer' ,
'importer-id' => 'wordpress' ,
),
);
}