';
if ( version_compare( get_bloginfo( 'version' ), '3.8.0', '<' ) ) {
screen_icon();
}
echo '
'.__('Import RSS', 'rss-importer').'
';
}
function footer() {
echo '';
}
function greet() {
echo '';
echo '
'.__('Howdy! This importer allows you to extract posts from an RSS 2.0 file into your WordPress site. This is useful if you want to import your posts from a system that is not handled by a custom import tool. Pick an RSS file to upload and click Import.', 'rss-importer').'
';
wp_import_upload_form("admin.php?import=rss&step=1");
echo '
';
}
function _normalize_tag( $matches ) {
return '<' . strtolower( $matches[1] );
}
function get_posts() {
global $wpdb;
$datalines = file($this->file); // Read the file into an array
$importdata = implode('', $datalines); // squish it
$importdata = str_replace(array ("\r\n", "\r"), "\n", $importdata);
preg_match_all('|- (.*?)
|is', $importdata, $this->posts);
$this->posts = $this->posts[1];
$index = 0;
foreach ($this->posts as $post) {
preg_match('|(.*?)|is', $post, $post_title);
$post_title = str_replace(array(''), '', esc_sql( trim($post_title[1]) ) );
preg_match('|(.*?)|is', $post, $post_date_gmt);
if ($post_date_gmt) {
$post_date_gmt = strtotime($post_date_gmt[1]);
} else {
// if we don't already have something from pubDate
preg_match('|(.*?)|is', $post, $post_date_gmt);
$post_date_gmt = preg_replace('|([-+])([0-9]+):([0-9]+)$|', '\1\2\3', $post_date_gmt[1]);
$post_date_gmt = str_replace('T', ' ', $post_date_gmt);
$post_date_gmt = strtotime($post_date_gmt);
}
$post_date_gmt = gmdate('Y-m-d H:i:s', $post_date_gmt);
$post_date = get_date_from_gmt( $post_date_gmt );
preg_match_all('|(.*?)|is', $post, $categories);
$categories = $categories[1];
if (!$categories) {
preg_match_all('|(.*?)|is', $post, $categories);
$categories = $categories[1];
}
$cat_index = 0;
foreach ($categories as $category) {
$categories[$cat_index] = esc_sql( html_entity_decode( $category ) );
$cat_index++;
}
preg_match('|(.*?)|is', $post, $guid);
if ( $guid ) {
$guid = esc_sql( trim( $guid[1] ) );
} else {
$guid = '';
}
preg_match('|(.*?)|is', $post, $post_content);
if ( count( $post_content ) > 1 ) {
$post_content = str_replace( array( ''), '', esc_sql( trim( $post_content[1] ) ) );
} else {
$post_content = null;
}
if (!$post_content) {
// This is for feeds that put content in description
preg_match('|(.*?)|is', $post, $post_content);
$post_content = esc_sql( html_entity_decode( trim( $post_content[1] ) ) );
}
// Clean up content
$post_content = preg_replace_callback('|<(/?[A-Z]+)|', array( &$this, '_normalize_tag' ), $post_content);
$post_content = str_replace('
', '
', $post_content);
$post_content = str_replace('
', '
', $post_content);
$post_author = 1;
$post_status = 'publish';
$this->posts[$index] = compact('post_author', 'post_date', 'post_date_gmt', 'post_content', 'post_title', 'post_status', 'guid', 'categories');
$index++;
}
}
function import_posts() {
echo '';
foreach ($this->posts as $post) {
echo "- ".__('Importing post...', 'rss-importer');
extract($post);
if ($post_id = post_exists($post_title, $post_content, $post_date)) {
_e('Post already imported', 'rss-importer');
} else {
$post_id = wp_insert_post($post);
if ( is_wp_error( $post_id ) )
return $post_id;
if (!$post_id) {
_e('Couldn’t get post ID', 'rss-importer');
return;
}
if (0 != count($categories))
wp_create_categories($categories, $post_id);
_e('Done!', 'rss-importer');
}
echo '
';
}
echo '
';
}
function import() {
$file = wp_import_handle_upload();
if ( isset($file['error']) ) {
echo $file['error'];
return;
}
$this->file = $file['file'];
$this->get_posts();
$result = $this->import_posts();
if ( is_wp_error( $result ) )
return $result;
wp_import_cleanup($file['id']);
do_action('import_done', 'rss');
echo '';
printf(__('All done. Have fun!', 'rss-importer'), get_option('home'));
echo '
';
}
function dispatch() {
if (empty ($_GET['step']))
$step = 0;
else
$step = (int) $_GET['step'];
$this->header();
switch ($step) {
case 0 :
$this->greet();
break;
case 1 :
check_admin_referer('import-upload');
$result = $this->import();
if ( is_wp_error( $result ) )
echo $result->get_error_message();
break;
}
$this->footer();
}
}
$rss_import = new RSS_Import();
register_importer('rss', __('RSS', 'rss-importer'), __('Import posts from an RSS feed.', 'rss-importer'), array ($rss_import, 'dispatch'));
} // class_exists( 'WP_Importer' )
function rss_importer_init() {
load_plugin_textdomain( 'rss-importer', false, dirname( plugin_basename( __FILE__ ) ) . '/languages' );
}
add_action( 'init', 'rss_importer_init' );