diff --git a/wp-admin/import-mt.php b/wp-admin/import-mt.php
new file mode 100644
index 0000000000..bd4ad7cab4
--- /dev/null
+++ b/wp-admin/import-mt.php
@@ -0,0 +1,250 @@
+
+
+
+
WordPress › Import from Movable Type
+
+
+
+
+
+Howdy! We're about to begin the process to import all of your Movable Type entries into WordPress. It's pretty easy, but it can possible take a little bit of time so be patient. Before we get started, you need to edit this file (import-mt.php
) and change one line so we know where to find your MT export file. Look for the line that says:
+define('MTEXPORT', '');
+and change it to
+define('MTEXPORT', '/path/to/your/import.txt');
+You have to do this manually for security reasons.
+If you've done that and you’re all ready, let's go! Remember that the import process may take a minute or so if you have a large number of entries and comments. Think of all the rebuilding time you'll be saving once it's done. :)
+On our test system, importing a blog of 1189 entries and about a thousand comments took 18 seconds.
+The importer is smart enough not to import duplicates, so you can run this multiple times without worry if for whatever reason it doesn't finish.
+previous page to continue.");
+
+function checkauthor($author) {
+ global $wpdb, $tableusers;
+ // Checks if an author exists, creates it if it doesn't, and returns author_id
+ $user_id = $wpdb->get_var("SELECT ID FROM $tableusers WHERE user_login = '$author'");
+ if (!$user_id) {
+ $wpdb->query("INSERT INTO $tableusers (user_login, user_pass, user_nickname) VALUES ('$author', 'changeme', '$author')");
+ $user_id = $wpdb->get_var("SELECT ID FROM $tableusers WHERE user_login = '$author'");
+ echo "Created user '$author'. ";
+ }
+ return $user_id;
+}
+
+// Bring in the data
+$datalines = file(MTEXPORT); // Read the file into an array
+$importdata = implode('', $datalines); // squish it
+$posts = explode("--------", $importdata);
+$i = -1;
+echo "";
+foreach ($posts as $post) { if ('' != trim($post)) {
+ ++$i;
+ unset($post_categories);
+ $post = preg_replace("/(\r\n|\n|\r)/", "\n", $post);
+ echo "- Importing post... ";
+
+ // Take the comments out first
+ preg_match("|(-----\nCOMMENT:.*)|s", $post, $comments);
+ $post = preg_replace("|(-----\nCOMMENT:.*)|s", '', $post);
+
+ // We ignore the keywords
+ $post = preg_replace("|(-----\nKEYWORDS:.*)|s", '', $post);
+
+ // We want the excerpt
+ preg_match("|-----\nEXCERPT:(.*)|s", $post, $excerpt);
+ $excerpt = addslashes(trim($excerpt[1]));
+ $post = preg_replace("|(-----\nEXCERPT:.*)|s", '', $post);
+
+ // We're going to put extended body into main body with a more tag
+ preg_match("|-----\nEXTENDED BODY:(.*)|s", $post, $extended);
+ $extended = trim($extended[1]);
+ if ('' != $extended) $extended = "\n\n$extended";
+ $post = preg_replace("|(-----\nEXTENDED BODY:.*)|s", '', $post);
+
+ // Now for the main body
+ preg_match("|-----\nBODY:(.*)|s", $post, $body);
+ $body = trim($body[1]);
+ $post_content = addslashes($body . $extended);
+ $post = preg_replace("|(-----\nBODY:.*)|s", '', $post);
+
+ // Grab the metadata from what's left
+ $metadata = explode("\n", $post);
+ foreach ($metadata as $line) {
+ preg_match("/^(.*?):(.*)/", $line, $token);
+ $key = trim($token[1]);
+ $value = trim($token[2]);
+ // Now we decide what it is and what to do with it
+ switch($key) {
+ case '':
+ break;
+ case 'AUTHOR':
+ $post_author = checkauthor($value);
+ break;
+ case 'TITLE':
+ $post_title = addslashes($value);
+ echo ''.stripslashes($post_title).'... ';
+ $post_name = sanitize_title($post_title);
+ break;
+ case 'STATUS':
+ // "publish" and "draft" enumeration items match up; no change required
+ $post_status = $value;
+ break;
+ case 'ALLOW COMMENTS':
+ $post_allow_comments = $value;
+ if ($post_allow_comments == 1) {
+ $post_allow_comments = "open";
+ } else {
+ $post_allow_comments = "closed";
+ }
+ break;
+ case 'CONVERT BREAKS':
+ $post_convert_breaks = $value;
+ break;
+ case 'ALLOW PINGS':
+ $post_allow_pings = trim($meta[2][0]);
+ if ($post_allow_pings == 1) {
+ $post_allow_pings = "open";
+ } else {
+ $post_allow_pings = "closed";
+ }
+ break;
+ case 'PRIMARY CATEGORY':
+ $post_categories[] = addslashes($value);
+ break;
+ case 'CATEGORY':
+ $post_categories[] = addslashes($value);
+ break;
+ case 'DATE':
+ $post_date = strtotime($value);
+ $post_date = date('Y-m-d H:i:s', $post_date);
+ break;
+ default:
+// echo "\n$key: $value";
+ break;
+ } // end switch
+ } // End foreach
+
+ // Let's check to see if it's in already
+ if ($wpdb->get_var("SELECT ID FROM $tableposts WHERE post_title = '$post_title' AND post_date = '$post_date'")) {
+ echo "Post already imported.";
+ } else {
+ $wpdb->query("INSERT INTO $tableposts (
+ post_author, post_date, post_content, post_title, post_excerpt, post_status, comment_status, ping_status, post_name)
+ VALUES
+ ('$post_author', '$post_date', '$post_content', '$post_title', '$excerpt', '$post_status', '$comment_status', '$ping_status', '$post_name')");
+ $post_id = $wpdb->get_var("SELECT ID FROM $tableposts WHERE post_title = '$post_title' AND post_date = '$post_date'");
+ if (0 != count($post_categories)) {
+ foreach ($post_categories as $post_category) {
+ // See if the category exists yet
+ $cat_id = $wpdb->get_var("SELECT cat_ID from $tablecategories WHERE cat_name = '$post_category'");
+ if (!$cat_id && '' != trim($post_category)) {
+ $cat_nicename = sanitize_title($post_category);
+ $wpdb->query("INSERT INTO $tablecategories (cat_name, category_nicename) VALUES ('$post_category', '$cat_nicename')");
+ $cat_id = $wpdb->get_var("SELECT cat_ID from $tablecategories 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 $tablepost2cat WHERE post_id = $post_id AND category_id = $cat_id");
+
+ if (!$exists) {
+ $wpdb->query("
+ INSERT INTO $tablepost2cat
+ (post_id, category_id)
+ VALUES
+ ($post_id, $cat_id)
+ ");
+ }
+ } // end category loop
+ } else {
+ $exists = $wpdb->get_row("SELECT * FROM $tablepost2cat WHERE post_id = $post_id AND category_id = 1");
+ if (!$exists) $wpdb->query("INSERT INTO $tablepost2cat (post_id, category_id) VALUES ($post_id, 1) ");
+ }
+ // Now for comments
+ $comments = explode("-----\nCOMMENT:", $comments[0]);
+ foreach ($comments as $comment) {
+ if ('' != trim($comment)) {
+ // Author
+ preg_match("|AUTHOR:(.*)|", $comment, $comment_author);
+ $comment_author = addslashes(trim($comment_author[1]));
+ $comment = preg_replace('|(\n?AUTHOR:.*)|', '', $comment);
+
+ preg_match("|EMAIL:(.*)|", $comment, $comment_email);
+ $comment_email = addslashes(trim($comment_email[1]));
+ $comment = preg_replace('|(\n?EMAIL:.*)|', '', $comment);
+
+ preg_match("|IP:(.*)|", $comment, $comment_ip);
+ $comment_ip = trim($comment_ip[1]);
+ $comment = preg_replace('|(\n?IP:.*)|', '', $comment);
+
+ preg_match("|URL:(.*)|", $comment, $comment_url);
+ $comment_url = addslashes(trim($comment_url[1]));
+ $comment = preg_replace('|(\n?URL:.*)|', '', $comment);
+
+ preg_match("|DATE:(.*)|", $comment, $comment_date);
+ $comment_date = trim($comment_date[1]);
+ $comment_date = date('Y-m-d H:i:s', strtotime($comment_date));
+ $comment = preg_replace('|(\n?DATE:.*)|', '', $comment);
+
+ $comment_content = addslashes(trim($comment));
+
+ // Check if it's already there
+ if (!$wpdb->get_row("SELECT * FROM $tablecomments WHERE comment_date = '$comment_date' AND comment_content = '$comment_content'")) {
+ $wpdb->query("INSERT INTO $tablecomments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_content, comment_approved)
+ VALUES
+ ($post_id, '$comment_author', '$comment_email', '$comment_url', '$comment_ip', '$comment_date', '$comment_content', '1')");
+ echo " Comment added.";
+ }
+ }
+ }
+ }
+ echo "
";
+ flush();
+ // n
+} }
+
+?>
+
+
+
+
+