getButterfly
Resume

NAVIGATION

ATTRIBUTION

getButterfly
Dublin, Ireland

All Content Copyright ©2019
getButterfly

How to Migrate bbPress to Mingle Forum

I’ve recently taken over a WordPress website having a combination of bbPress and BuddyPress. Not my cup of tea, although I’ve used them both, with bbPress quite extensively years ago. I’ve since developed my own forum engine, an updated fork of the now defunct Mingle Forum, with support for Flex CSS, PHP 7.1+ and ES6. No Internet Explorer and no looking back.

For this project though, I had to move/migrate forums, topics and replies to my Mingle Forum.

Without further ado, here’s the code I used:

/**
 * Migration routine for bbPress to Mingle Forum
 */
$args = [
    'post_type' => 'forum',
    'posts_per_page' => -1,
    'post_parent' => 0,
    'order' => 'ASC'
];
$the_query = new WP_Query($args);

if ($the_query->have_posts()) {
    while ($the_query->have_posts()) {
        global $wpdb;

        $the_query->the_post();

        $fid = $the_query->post->ID;

        // Step 1
        echo '<p><code>Creating forum groups (categories)</code></p>';
        $wpdb->query($wpdb->prepare('INSERT INTO wp_forum_groups (id, name) VALUES (%d, %s)', $fid, get_the_title($fid)));

        $topic_arguments = [
            'post_type' => 'forum',
            'posts_per_page' => -1,
            'post_parent' => $fid,
            'order' => 'ASC'
        ];
        $topic_query = new WP_Query($topic_arguments);

        if ($topic_query->have_posts()) {
            while($topic_query->have_posts()) {
                $topic_query->the_post();

                $fid = $topic_query->post->ID;

                // Step 2
                echo '<p><code>Populating forum groups (categories)</code></p>';
                $wpdb->query($wpdb->prepare('INSERT INTO wp_forum_forums (id, name, parent_id) VALUES (%d, %s, %d)', $fid, get_the_title($fid), $topic_query->post->post_parent));
            }
        }
    }
}

$topic_arguments = [
    'post_type' => 'topic',
    'posts_per_page' => -1,
    'order' => 'ASC'
];
$topic_query = new WP_Query($topic_arguments);

if ($topic_query->have_posts()) {
    while ($topic_query->have_posts()) {
        global $wpdb;

        $topic_query->the_post();

        $fid = $topic_query->post->ID;

        $author = $topic_query->post->post_author;

        // Step 3
        echo '<p><code>Populating forum threads (topics)</code></p>';
        $wpdb->query($wpdb->prepare('INSERT INTO wp_forum_threads (id, parent_id, subject, date, starter, last_post) VALUES (%d, %d, %s, "' . $topic_query->post->post_date . '", ' . $author . ', "' . $topic_query->post->post_modified . '")', $fid, $topic_query->post->post_parent, get_the_title($fid)));

        echo '<p><code>Populating forum threads (starters)</code></p>';
        $wpdb->query($wpdb->prepare('INSERT INTO wp_forum_posts (id, text, parent_id, date, author_id, subject) VALUES (%d, %s, ' . $topic_query->post->post_parent . ', "' . $topic_query->post->post_date . '", ' . $author . ', %s)', $fid, $topic_query->post->post_content, get_the_title($fid)));
    }
}

$topic_arguments = [
    'post_type' => 'reply',
    'posts_per_page' => -1,
    'order' => 'ASC'
];
$topic_query = new WP_Query($topic_arguments);

if ($topic_query->have_posts()) {
    while ($topic_query->have_posts()) {
        global $wpdb;

        $topic_query->the_post();

        $fid = $topic_query->post->ID;

        $author = $topic_query->post->post_author;

        // Step 4
        echo '<p><code>Populating forum posts (replies)</code></p>';
        $wpdb->query($wpdb->prepare('INSERT INTO wp_forum_posts (id, text, parent_id, date, author_id, subject) VALUES (%d, %s, ' . $topic_query->post->post_parent . ', "' . $topic_query->post->post_date . '", ' . $author . ', %s)', $fid, $topic_query->post->post_content, get_the_title($fid)));
    }
}

$threads = $wpdb->get_results("SELECT * FROM wp_forum_threads", ARRAY_A);

foreach ($threads as $thread_key => $thread_row) {
    $id = $thread_row['id'];
    $parent_id = $thread_row['parent_id'];
    $subject = $thread_row['subject'];

    $posts = $wpdb->get_results("SELECT * FROM wp_forum_posts WHERE parent_id = $id", ARRAY_A);

    foreach ($posts as $post_key => $post_row) {
        $wpdb->query("UPDATE wp_forum_posts SET parent_id = $id WHERE subject = '$subject'");
    } 
}

Notes

This migration process has been performed on bbPress 2 (latest version as of August 2019) and Mingle Forum (latest version – an updated version is coming soon).

Backup your database, or better yet, clone your site and perform the migration there. I broke my local clone six times.

Image credit: Shen Fei

Added by Ciprian on Monday, August 12, 2019 in Blog

Do you want better SEO? More traffic? More conversions? More growth? We help companies exponentially grow their traffic and conversions, while outranking their competitors. With more than 10 years of experience, we’ve learned what is valuable to our clients.
SEO Dublin | SEO Malta

My Battle Tested Recommendations

Jetpack
Dreamhost
WordPress.com
CodeCanyon
SEMrush

Disclaimer: These recommendations contain affiliate links.


Privacy Policy