Howdy! This importer allows you to extract posts from any RSS 2.0 file into your blog. This is useful if you want to import your posts from a system that is not handled by a custom import tool. To get started you must edit the following line in this file (import-rss.php
)
define('RSSFILE', '');
You want to define where the RSS file we'll be working with is, for example:
define('RSSFILE', 'rss.xml');
You have to do this manually for security reasons. When you're done reload this page and we'll take you to the next step.
(.*?)|is', $importdata, $posts);
$posts = $posts[1];
echo '';
foreach ($posts as $post) :
$title = $date = $categories = $content = $post_id = '';
echo "- Importing post... ";
preg_match('|(.*?)|is', $post, $title);
$title = addslashes( trim($title[1]) );
$post_name = sanitize_title($title);
preg_match('|(.*?)|is', $post, $date);
$date = strtotime($date[1]);
if (!$date) : // if we don't already have something from pubDate
preg_match('|(.*?)|is', $post, $date);
$date = preg_replace('|(-[0-9:]+)$|', '', $date[1]);
$date = strtotime($date);
endif;
$post_date = gmdate('Y-m-d H:i:s', $date);
preg_match_all('|(.*?)|is', $post, $categories);
$categories = $categories[1];
if (!$categories) :
preg_match_all('|(.*?)|is', $post, $categories);
$categories = $categories[1];
endif;
preg_match('|(.*?)|is', $post, $content);
$content = str_replace( array(''), '', addslashes( trim($content[1]) ) );
if (!$content) : // This is for feeds that put content in description
preg_match('|(.*?)|is', $post, $content);
$content = $wpdb->escape( unhtmlentities( trim($content[1]) ) );
endif;
// Clean up content
$content = preg_replace('|<(/?[A-Z]+)|e', "'<' . strtolower('$1')", $content);
$content = str_replace('
', '
', $content);
$content = str_replace('
', '
', $content);
// This can mess up on posts with no titles, but checking content is much slower
// So we do it as a last resort
if ('' == $title) :
$dupe = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_content = '$content' AND post_date = '$post_date'");
else :
$dupe = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$title' AND post_date = '$post_date'");
endif;
// Now lets put it in the DB
if ($dupe) :
echo 'Post already imported';
else :
$wpdb->query("INSERT INTO $wpdb->posts
(post_author, post_date, post_date_gmt, post_content, post_title,post_status, comment_status, ping_status, post_name)
VALUES
('$post_author', '$post_date', DATE_ADD('$post_date', INTERVAL '$add_hours:$add_minutes' HOUR_MINUTE), '$content', '$title', 'publish', '$comment_status', '$ping_status', '$post_name')");
$post_id = $wpdb->get_var("SELECT ID FROM $wpdb->posts WHERE post_title = '$title' AND post_date = '$post_date'");
if (!$post_id) die("couldn't get post ID");
if (0 != count($categories)) :
foreach ($categories as $post_category) :
$post_category = unhtmlentities($post_category);
// See if the category exists yet
$cat_id = $wpdb->get_var("SELECT cat_ID from $wpdb->categories WHERE cat_name = '$post_category'");
if (!$cat_id && '' != trim($post_category)) {
$cat_nicename = sanitize_title($post_category);
$wpdb->query("INSERT INTO $wpdb->categories (cat_name, category_nicename) VALUES ('$post_category', '$cat_nicename')");
$cat_id = $wpdb->get_var("SELECT cat_ID from $wpdb->categories WHERE cat_name = '$post_category'");
}
if ('' == trim($post_category)) $cat_id = 1;
// Double check it's not there already
$exists = $wpdb->get_row("SELECT * FROM $wpdb->post2cat WHERE post_id = $post_id AND category_id = $cat_id");
if (!$exists) {
$wpdb->query("
INSERT INTO $wpdb->post2cat
(post_id, category_id)
VALUES
($post_id, $cat_id)
");
}
endforeach;
else:
$exists = $wpdb->get_row("SELECT * FROM $wpdb->post2cat WHERE post_id = $post_id AND category_id = 1");
if (!$exists) $wpdb->query("INSERT INTO $wpdb->post2cat (post_id, category_id) VALUES ($post_id, 1) ");
endif;
echo 'Done! ';
endif;
endforeach;
?>