• Skip to primary navigation
  • Skip to main content
  • Skip to footer
  • Store
  • Support
  • My Account
  • Cart

9seeds

Building Custom WordPress Solutions | Plugin Development

 
  • Custom Development
  • Themes
  • Plugins
  • About
  • Contact
  • Blog

migration

Import/Export issues between MySQL 5.1 and 5.5+

Posted on August 5, 2014

There have been many advances in recent history that make a WordPress developer’s life easier. WordPress itself is already pretty easy as it’s very tolerant of a myriad of hosting environments. To make things easier for local setup, there’s a fantastic product called DesktopServer by ServerPress which will quickly and easily set up a multitude of local WordPress sandboxes to hack on. DesktopServer currently ships with MySQL 5.1 which is A-OK because WordPress requires version 5.0 or greater.

When setting up a new development environment, we typically use WP Migrate DB Pro (HIGHLY RECOMMENDED!) to download the latest database data from staging or production into our local sandboxes. Other ways work just as well, like exporting from phpMyAdmin (or native mysqldump) and then using interconnect/it Search and Replace. WP Migrate DB Pro is just so easy because it does everything in one step.

However, a problem reared its head recently while exporting from WPEngine (which currently uses MySQL 5.6) to DesktopServer.

Continue Reading

justin

    More by justin

    Converting Blogspot / Blogger to hosted WordPress

    Posted on April 16, 2012

    First Try

    Migrating your Blogspot or Blogger weblog to a hosted WordPress installation should be easy.  But you may run into some problems along the way, so here are some quick ways to make it less painful.

    When I first attempted this, I used the Blogger Importer plugin found in the “Tools” → “Import” menu of a new WordPress installation.  It went OK.  The importer pulled in all of the posts and the comments, but there seemed to be some extra markup that made it’s way into the posts.  All of the post titles now started with “>”:

    >Why Hello There!

    Also, while images in the content seemed to be fine, none of the media was actually imported into WordPress, they were still being hosted on blogspot.com.

    Resetting the WordPress installation to start over

    So now WordPress has a bunch of content that I want to delete so that I can start over and hopefully get it right the next time.  For this I used WordPress Reset.  I was able to use it to remove the (bad) imported content and reset it back to a new installation.  It’s multi-site friendly and only restored the one site and left all the content from the parent and sibling sites alone – although I can’t vouch for what it would do if you ran it on the parent site of a network installation.

    A 2-Step Approach

    Now that I was back to square one it was time for a different approach.  After some reasearch, someone on the WordPress Forums mentioned using WordPress.com to do the Blogger import, then exporting from WordPress.com as a native WordPress export file (WXR / XML), and import that file into your new WordPress installation.

    Importing Blogspot / Blogger to WordPress.com

    So over at WordPress.com, everything is like a normal WordPress installation, except they have turned it up to 11.  They have powerful servers, and a dedicated staff that make amazing additions to the most popular free plugins – one of which is the Blogger import.  On WordPress.com you have an additional option to import a Blogger export file:

    Rather than authorizing the plugin to get everything from the site, we’ll export it to a file. Log into your Blogger account. When you’re logged in and viewing your blog there’s a “Design” link in the upper right menu bar, click that. Once you’re at the Blogger administration page click the “Settings” menu, and then “Other.” You will have an option under “Blog Tools” to “Export blog”:

    Take that file and import it into a new WordPress.com site. You’ll want to make sure that this blog is public (but not necessarily indexed by search engines) as our hosted WordPress installation will need to be able to pull media files from it, but we don’t want it to wind up on Google, as it’s only temporary. It might take a while to fully complete, but WordPress.com should bring in all your Posts, Comments, and Media just fine. Once you’re sure that it’s done, export the WordPress.com site through the “Tools” → “Export” menu, selecting “All Content.”

    Importing WordPress.com’s export into a hosted WordPress site

    Before we begin importing the content from WordPress.com, two things should be changed in the WordPress Importer plugin‘s wordpress-importer.php file, which can be done through the plugin editor.

    Just so we know when the importer runs into issues, change IMPORT_DEBUG to true:

    /** Display verbose errors */
    define( 'IMPORT_DEBUG', true );

    Then to make sure we get everything, find the line that starts with:

    $post_exists = post_exists( $post['post_title'], ...

    This was on line 539 for me.  Comment it out using slashes:

    //$post_exists = post_exists( $post['post_title'], ...

    Then just below that line add:

    $post_exists = false;

    I did this because when WordPress.com imported images from Blogger, it gave them the same name as the post title, So if a post was called “Why Hello There!” and it had 5 pictures in it, all 5 pictures also had the title “Why Hello There!” This was preventing the importer from getting everything. Plus I already reset the installation, so there’s no content to duplicate or overwrite anyway. And I reasonably trust that I want to retrieve everything contained in the WordPress.com export file.

    Run your import and everything should go smoothly. After you’ve verified you have everything in your new hosted WordPress installation, you can delete your WordPress.com site or make it private. You may also want to undo the WordPress Importer changes for future imports.

    Continue Reading

    justin

      More by justin

      Drupal to WordPress migration

      Posted on October 2, 2010

      Updated: 8/19/2013 – 9seeds does not offer Drupal to WordPress conversion as a stand-alone service. If you need to convert from one CMS to another, we suggest you check out https://9seeds.com/cms2cms

      A client came to us this week with a problem; he had a Drupal site with over 1000 articles that he wanted to convert to WordPress. So we headed to Google for some help. There are several tutorials out there on how to migrate Drupal content to a WordPress site, but many of them are really outdated. After kicking the tires on a few, this post by Mike Smullin seemed to be the best jumping off point.

      Mike is right up front in his instructions with the fact that you’ll need to do a bit of tweaking to his set of instructions to get it to work for your setup. After a few failed attempts, we came up with an updated set of instructions. We’ve included the updated version along with notes about changes made.

      These instructions are a set of SQL statements. It assumes you have a database named WordPress using ‘wp_’ as the prefix and another database named Drupal.

      This should go without saying, but I’ll say it anyway; do not move forward without backing up your databases FIRST!

      Clear all existing WordPress content

      TRUNCATE TABLE wordpress.wp_comments;
      TRUNCATE TABLE wordpress.wp_links;
      TRUNCATE TABLE wordpress.wp_postmeta;
      TRUNCATE TABLE wordpress.wp_posts;
      TRUNCATE TABLE wordpress.wp_term_relationships;
      TRUNCATE TABLE wordpress.wp_term_taxonomy;
      TRUNCATE TABLE wordpress.wp_terms;
      

      Create Categories

      INSERT INTO wordpress.wp_terms (term_id, `name`, slug, term_group)
      SELECT
       d.tid, d.name, REPLACE(LOWER(d.name), ' ', '_'), 0
      FROM drupal.term_data d
      INNER JOIN drupal.term_hierarchy h
       USING(tid);
      

      Add Taxonomies

      INSERT INTO wordpress.wp_term_taxonomy (term_id, taxonomy, description, parent)
      SELECT
       d.tid `term_id`,
       'category' `taxonomy`,
       d.description `description`,
       h.parent `parent`
      FROM drupal.term_data d
      INNER JOIN drupal.term_hierarchy h
       USING(tid);
      

      Import posts/pages
      We added ‘article’ to the array on the last line to solve an issue with the way Drupal had categorized the posts.

      INSERT INTO wordpress.wp_posts (id, post_date, post_content, post_title, post_excerpt, post_name, post_modified, post_type, `post_status`)
      SELECT DISTINCT
       n.nid `id`,
       FROM_UNIXTIME(n.created) `post_date`,
       r.body `post_content`,
       n.title `post_title`,
       r.teaser `post_excerpt`,
       IF(SUBSTR(a.dst, 11, 1) = '/', SUBSTR(a.dst, 12), a.dst) `post_name`,
       FROM_UNIXTIME(n.changed) `post_modified`,
       n.type `post_type`,
       IF(n.status = 1, 'publish', 'private') `post_status`
      FROM drupal.node n
      INNER JOIN drupal.node_revisions r
       USING(vid)
      LEFT OUTER JOIN drupal.url_alias a
       ON a.src = CONCAT('node/', n.nid)
      WHERE n.type IN ('post', 'page', 'article');
      

      Turn articles in to posts
      This will turn the ‘articles’ from the previous step in to ‘posts’ in WordPress.

      update wordpress.wp_posts set post_type='post' where post_type='article';
      

      Add post to category relationships

      INSERT INTO wordpress.wp_term_relationships (object_id, term_taxonomy_id)
      SELECT nid, tid FROM drupal.term_node;
      

      Update category count

      UPDATE wordpress.wp_term_taxonomy tt
      SET `count` = (
       SELECT COUNT(tr.object_id)
       FROM wordpress.wp_term_relationships tr
       WHERE tr.term_taxonomy_id = tt.term_taxonomy_id);
      

      Import comments

      INSERT INTO wordpress.wp_comments (comment_post_ID, comment_date, comment_content, comment_parent, comment_author, comment_author_email, comment_author_url, comment_approved)
      SELECT nid, FROM_UNIXTIME(timestamp), comment, thread, name, mail, homepage, status FROM drupal.comments;
      

      Update comment counts
      After fighting with the original syntax, I added the ‘use wordpress’ step to get around it.

      use wordpress;
      UPDATE `wp_posts` SET `comment_count` = (SELECT COUNT(`comment_post_id`) FROM `wp_comments` WHERE `wp_posts`.`id` = `wp_comments`.`comment_post_id`);
      

      Fix breaks in post content

      UPDATE wordpress.wp_posts SET post_content = REPLACE(post_content, '', '');
      

      Fix images in post content

      UPDATE wordpress.wp_posts SET post_content = REPLACE(post_content, '"/files/', '"/wp-content/uploads/');
      

      If your posts have any images you’ll need to move them from your ./files directory to the ./wp-content/uploads directory. The final step above should take care of fixing any image calls in your pages and posts, but you still may need to manually update them if you are having issues.

      Download a copy/paste friendly version of the Drupal to WordPress instructions here.

      if you have any questions, leave us a comment below.

      Continue Reading

      john

        More by john

        Footer

        Get in Touch

        • New Project Inquiry
        • Product Support and General Inquiry
        • Store Purchase Terms and Conditions
        • Store FAQ
        • Cookie Policy
        • Privacy Policy

        Our Services

        • Custom WP Development
        • Theme Store
        • Plugin Store

        WordPress Plugins for Sale

        • Time Tracker
        • Authorize.net SIM Gateway

        WordPress Plugins for Free

        • Simple Calendar
        • WP Chargify
        • Facebook
        • Twitter
        • LinkedIn
        • WordPress
        • GitHub

        Copyright 2023 | 9seeds, LLC

        Like nearly all websites this one uses cookies too. Like most users we think consent banners like these are a dumb solution, but it's what we've got until new laws are passed. We use cookies on our website for remembering your preferences, for example if you're logged in or what is in your cart. We also use 3rd party cookies for analytics so we know what pages on the site are most popular. By clicking “Accept”, you consent to the use of ALL the cookies.
        Do not sell my personal information.
        Cookie SettingsAccept
        Manage consent

        Privacy Overview

        This website uses cookies to improve your experience while you navigate through the website. Out of these, the cookies that are categorized as necessary are stored on your browser as they are essential for the working of basic functionalities of the website. We also use third-party cookies that help us analyze and understand how you use this website. These cookies will be stored in your browser only with your consent. You also have the option to opt-out of these cookies. But opting out of some of these cookies may affect your browsing experience and may even preclude you being able to login to the website.
        Necessary
        Always Enabled
        Necessary cookies are absolutely essential for the website to function properly. These cookies ensure basic functionalities and security features of the website, anonymously.
        CookieDurationDescription
        __stripe_mid1 yearThis cookie is set by Stripe payment gateway. This cookie is used to enable payment on the website without storing any patment information on a server.
        __stripe_sid30 minutesThis cookie is set by Stripe payment gateway. This cookie is used to enable payment on the website without storing any patment information on a server.
        cookielawinfo-checkbox-advertisement1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Advertisement" category .
        cookielawinfo-checkbox-analytics1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Analytics" category .
        cookielawinfo-checkbox-necessary1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to record the user consent for the cookies in the "Necessary" category .
        cookielawinfo-checkbox-others1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to store the user consent for cookies in the category "Others".
        cookielawinfo-checkbox-performance1 yearSet by the GDPR Cookie Consent plugin, this cookie is used to store the user consent for cookies in the category "Performance".
        Functional
        Functional cookies help to perform certain functionalities like sharing the content of the website on social media platforms, collect feedbacks, and other third-party features.
        Performance
        Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.
        Analytics
        Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics the number of visitors, bounce rate, traffic source, etc.
        CookieDurationDescription
        _ga2 yearsThe _ga cookie, installed by Google Analytics, calculates visitor, session and campaign data and also keeps track of site usage for the site's analytics report. The cookie stores information anonymously and assigns a randomly generated number to recognize unique visitors.
        _gid1 dayInstalled by Google Analytics, _gid cookie stores information on how visitors use a website, while also creating an analytics report of the website's performance. Some of the data that are collected include the number of visitors, their source, and the pages they visit anonymously.
        CONSENT2 yearsYouTube sets this cookie via embedded youtube-videos and registers anonymous statistical data.
        Advertisement
        Advertisement cookies are used to provide visitors with relevant ads and marketing campaigns. These cookies track visitors across websites and collect information to provide customized ads.
        CookieDurationDescription
        VISITOR_INFO1_LIVE5 months 27 daysA cookie set by YouTube to measure bandwidth that determines whether the user gets the new or old player interface.
        YSCsessionYSC cookie is set by Youtube and is used to track the views of embedded videos on Youtube pages.
        yt-remote-connected-devicesneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
        yt-remote-device-idneverYouTube sets this cookie to store the video preferences of the user using embedded YouTube video.
        Others
        Other uncategorized cookies are those that are being analyzed and have not been classified into a category as yet.
        CookieDurationDescription
        cookielawinfo-checkbox-functional1 yearThe cookie is set by GDPR cookie consent to record the user consent for the cookies in the category "Functional".
        SAVE & ACCEPT
        Powered by CookieYes Logo