Migration von Joomla zu WordPress mit jComments

Zur grundlegenden Migration der Blogeinträge in Joomla gibt es das Plugin FG Joomla to WordPress.
Das ist eigentlich selbsterklärend. Dies muss man auch zuerst machen, bevor man die Kommentare migriert!
Die kostenlose Version diese Plugins kopiert aber die jComment Beiträge nicht. Man kann sich die Premium Version des Plugins kaufen, oder es mit diesem kostenlosen Skript versuchen.
Jemand hat ein PHP Skript auf Github zur Verfügung gestellt. Dieses Skript ist aber schon 9 Jahre alt und nutzt noch die alten MySQL PHP API’s, welche in PHP 7 nicht mehr funktionieren.
Ich hab es auf die MySQLi API umgeschrieben und damit die jComment Einträge von Joomla 3.9.24 nach WordPress 5.6 übertragen.
Die Datenbank von beiden Systemen müssen allerdings am selben Server laufen. Danach im Admin Panel kontrollieren, ob die Kommentare vorhanden sind.
Bitte nicht zweimal ausführen. Wenn es funktioniert hat, werden die Kommentare sonst jedes Mal doppelt und dreifach eingetragen.
Man könnte den Connect-String noch um den Hostnamen der Joomla DB erweitern. Dann müsste es auch mit unterschiedlichen Server laufen.

Das Skript einfach als z. B. j2w.php auf der WordPress Webseite speichern und in der URL direkt aufrufen.

<?php

// Enter Joomla DB Credentials
$username = "username";
$password = "password";
$database = "databasename";
$prefix = "jos_"; //edit prefix if necessary

$link=mysqli_connect('localhost', $username, $password);
@mysqli_select_db($link, $database) or die( "Unable to select database");
@mysqli_set_charset('utf8');

$query = "SELECT DISTINCT object_id FROM $prefixjcomments";
echo $query;
print "
";
$pids = mysqli_query($link, $query);

if (!$pids) {
        echo mysqli_error();
}
$num = mysqli_num_rows($pids);
$i = 0;
while ($i < $num) {
        $pid1 = mysqli_fetch_object($pids);
        $pid = $pid1->object_id;
        $query = "SELECT created FROM  $prefixcontent WHERE id = " . $pid;
        echo $query;
        print "
        ";
        $created = mysqli_query($link, $query);
        if (!$created) {
                echo mysqli_error();
        }
        $ct1 = mysqli_fetch_object($created);
        $ct = $ct1->created;
        $query = "SELECT id FROM wp_posts WHERE post_date_gmt =  '" . $ct . "' AND post_type =  'post'";
        echo $query;
        print "
        ";
        $wpids = mysqli_query($link, $query);
        if (!$wpids) {
                echo mysqli_error();
        }
        $wpid1 = mysqli_fetch_object($wpids);
        $wpid = $wpid1->id;
        $query = "SELECT * FROM $prefixjcomments WHERE object_id = " . $pid;
        echo $query;
        print "
        ";
        $comments = mysqli_query($link, $query);
        $comments_count = mysqli_num_rows($comments);
                while ($info = mysqli_fetch_object($comments)) {
                $author = $info->name;
                $email = $info->email;
                $url = $info->homepage;
                $ip = $info->ip;
                $cdate = $info->date;
                $content = $info->comment;
                $content = mysqli_real_escape_string($link, $content);

                $query = "INSERT INTO wp_comments (comment_post_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_content) VALUES ('" . $wpid . "', '" . $author . "', '" . $email . "', '" . $url . "', '" . $ip . "', '" . $cdate . "', '" . $cdate . "', '" . $content . "')";
                echo $query;
                print "
                ";
                mysqli_query($link, $query);
        }
        $query = "UPDATE wp_posts SET comment_count = " . $comments_count . " WHERE ID = " . $wpid;
        echo $query;
        print "
        ";
        mysqli_query($link, $query);

        $i++;
}
mysqli_close($link);
?>

Kommentar verfassen

Christian Hummel