Migration von Joomla zu WordPress mit jComments

Spread the info

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.
Danke an H. M. für das Feedback.

<?php

error_reporting(E_ERROR | E_WARNING | E_PARSE );
ini_set('display_errors', 'On');

// Enter Joomla DB Credentials
$jomuser = "J!-User";
$jompw = "J!-Pw";
$jomdb = "J!-DB";
$jomprefix = "jos_"; //edit J! prefix if necessary

// Enter WP Credentials
$wpuser = "WP-User";
$wppw = "WP-Pw";
$wpdb = "WP-DB";
$wpprefix = "wp_"; //edit J! prefix if necessary

// DB Configurations
$jomlink=mysqli_connect('localhost', $jomuser, $jompw);
@mysqli_select_db($jomlink, $jomdb) or die( "Unable to select joomla database");
@mysqli_set_charset('utf8');

$wplink=mysqli_connect('localhost', $wpuser, $wppw);
@mysqli_select_db($wplink, $wpdb) or die( "Unable to select wordpress database");
@mysqli_set_charset('utf8');

$query = "SELECT DISTINCT object_id FROM $jomprefix" . "jcomments";
echo $query;
print "
";
$pids = mysqli_query($jomlink, $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  $jomprefix" . "content WHERE id = " . $pid;
        echo $query;
        print "
        ";
        $created = mysqli_query($jomlink, $query);
        if (!$created) {
                echo mysqli_error();
        }
        $ct1 = mysqli_fetch_object($created);
        $ct = $ct1->created;



        $query = "SELECT id FROM $wpprefix" . "posts WHERE post_date_gmt =  '" . $ct . "' AND post_type =  'post'";
        echo $query;
        print "
        ";
        $wpids = mysqli_query($wplink, $query);
        if (!$wpids) {
                echo mysqli_error();
        }
        $wpid1 = mysqli_fetch_object($wpids);
        $wpid = $wpid1->id;
        $query = "SELECT * FROM $jomprefix" . "jcomments WHERE object_id = " . $pid;
        echo $query;
        print "
        ";
        $comments = mysqli_query($jomlink, $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($wplink, $content);

                $query = "INSERT INTO $wpprefix"."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($wplink, $query);
        }
        $query = "UPDATE $wpprefix"."posts SET comment_count = " . $comments_count . " WHERE ID = " . $wpid;
        echo $query;
        print "
        ";
        mysqli_query($wplink, $query);

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

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert