Перенос комментариев с Joomla в WordPress

В связи с тем, что я задался переносом сайта с Joomla 3 на WordPress, встала задача перенести и комментарии с Джумлы. Бесплатные возможности плагина FG Joomla to WordPress не позволяют это сделать. Чтобы перенести комментарии с JComments, нужно покупать платную премиальную версию плагина и еще для экспорта аддон отдельно. Но мы пошли бесплатным путем.

В действительности в такой конвертации много нюансов и аспектов, которые может я не затрону в этой статье. Надо понимать что это абсолютно разные компоненты и имеют разные таблицы и столбцы. Т.е. чтобы вы понимали, 100% перенос не получиться, но самое главное организовать можно.

Конвертировать можно разными способами:

1й Платный

Если не хочется заморачиваться, тратить время на изучения и на обкатку метода, тогда этот способ вам. Используйте один из плагинов FG Joomla to WordPress + Add-ons Import the JComments comments (45€) или же CMS2CMS: Automated Joomla to WordPress Migration (можно в виде онлайн сервиса), цена рассчитывается индивидуально и можно использовать 1 раз или покупать более дорогой пакет с несколькими конвертациями.

2й Ручной или полуавтоматический

Самый не благодарный и трудоемкий метод, да еще и с большим количеством косяков. Лучше конечно не напрямую копировать, а через базу данных. Лучше с использованием SQL запросов. Процесс будет уже более автоматизирован и минимизированы ошибки.

Для этого метода надо хоть немного владеть навыками работы с Базами данных и разобраться какие данные куда переносить. В joomla таблица будет prefix_jcomments, а в WordPress prefix_comments.

3й Используя скрипт

Который переносит комментарии с джумлы на вордпресс в автоматическом режиме. Для такой цели пришлось подшаманить скрипт и сделать чтобы он также соблюдал иерархию комментариев (кто на какие комментарии отвечает), статус комментария: опубликован или не опубликован. Данные, такие как имя автора, почтовый ящик, домашняя страница, IP адрес, дата написания тоже переносятся. IP адрес в вдминке не отображается стандартными средствами, можно увидеть в базе.

Сам код:

<?php
//Joomla MySQL Data
$username = «username»;
$password = «password»;
$database = «database»;
$prefix = «prefix»;

//WordPress MySQL Data
$wusername = «username»;
$wpassword = «password»;
$wdatabase = «database»;
$wprefix = «prefix»;

$jolink = mysql_connect(‘localhost’, $username, $password);
mysql_select_db($database, $jolink) or die( «Unable to select joomladatabase»);
mysql_set_charset(‘utf8’, $jolink);

$wplink = mysql_connect(‘localhost’, $wusername, $wpassword);
mysql_select_db($wdatabase, $wplink) or die( «Unable to select wpdatabase»);
mysql_set_charset(‘utf8’, $wplink);

$query = «SELECT DISTINCT object_id FROM » . $prefix . «_jcomments»;
echo $query;
print »
«;
$pids = mysql_query($query, $jolink);

if (!$pids) {
echo mysql_error();
}
$num = mysql_numrows($pids);
$i = 0;
while ($i < $num) {
$pid = mysql_result($pids, $i, «object_id»);
$query = «SELECT created FROM » . $prefix . «_content WHERE id = » . $pid;
echo $query;
print »
«;
$created = mysql_query($query, $jolink);
if (!$created) {
echo mysql_error();
}
$ct = mysql_result($created, 0, «created»);
$query = «SELECT ID FROM » . $wprefix . «_posts WHERE post_date = ‘» . $ct . «‘ AND post_type = ‘post'»;
echo $query;
print »
«;
$wpids = mysql_query($query, $wplink);
if (!$wpids) {
echo mysql_error();
}
$wpid = mysql_result($wpids, 0, «ID»);
$query = «SELECT * FROM » . $prefix . «_jcomments WHERE object_id = » . $pid;
echo $query;
print »
«;
$comments = mysql_query($query, $jolink);
$comments_count = mysql_numrows($comments);
$j = 0;
while ($j < $comments_count) {
$id = mysql_result($comments, $j, «id»);
$author = mysql_result($comments, $j, «name»);
$email = mysql_result($comments, $j, «email»);
$url = mysql_result($comments, $j, «homepage»);
$ip = mysql_result($comments, $j, «ip»);
$cdate = mysql_result($comments, $j, «date»);
$published = mysql_result($comments, $j, «published»);
$parent = mysql_result($comments, $j, «parent»);
$content = mysql_result($comments, $j, «comment»);
$content = mysql_real_escape_string($content);

$query = «INSERT INTO » . $wprefix . «_comments (comment_post_ID, comment_ID, comment_author, comment_author_email, comment_author_url, comment_author_IP, comment_date, comment_date_gmt, comment_approved, comment_parent, comment_content) VALUES (» . $wpid . «, ‘» . $id . «‘, ‘» . $author . «‘, ‘» . $email . «‘, ‘» . $url . «‘, ‘» . $ip . «‘, ‘» . $cdate . «‘, ‘» . $date . «‘, ‘» . $published . «‘, ‘» . $parent . «‘, ‘» . $content . «‘)»;
echo $query;
print »
«;
mysql_query($query, $wplink);
$j++;
}
$query = «UPDATE » . $wprefix . «_posts SET comment_count = » . $comments_count . » WHERE ID = » . $wpid;
echo $query;
print »
«;
mysql_query($query, $wplink);

$i++;
}
mysql_close();
?>

Нужно будет заполнить данные баз MySQL обоих сайтов. На всякий случай объясню

$username = «username»; — имя пользователя базы данных
$password = «password»; — пароль пользователя базы данных
$database = «database»; — название базы данных
$prefix = «prefix»; — префикс таблиц

Оба сайта надо, чтобы находились на одно хостинге. Можно на поддомен или в папку основного сайта положить.

Этот скрипт копируете в файл, обзываете его, к примеру «migrate-comments-j-to-wp.php». Далее, вы копируете этот файл в главную папку любого из сайтов и запускаете его (в строке адреса пишите ageta.ru/migrate-comments-j-to-wp.php — адрес сайта и файла свои соответственно). Файл запускается через браузер всего один раз, повторят не надо, а то могут появиться дубли. В окне браузера отобразиться экспортируемая база SQL, можете сохранить файл с расширением SQL и при необходимости импортировать в нужную базу. Чтобы прочитать файл, может для русского языка понадобиться сменить кодировку.

Когда страница перестает грузиться, значит скрипт выполнен, тогда можно смотреть результат. У меня это заняло на медленном и быстром хостинге около 3-4 секунд при 1000 комментариях.

Все работает, 348 ожидающих комментариев, это те которые я не удалил на Joomla.

Иерархия (древовидность) сохранена. Что тоже отлично.

После этого файл можно удалить с сервера.

После всего процесса, необходимо хотя бы выборочно, проверить как конвертировалось, правильно ли сохранилась древовидность комментариев. Сколько комментариев на какую статью. Правильно ли экспортировались поля, адрес в адресе, имя в имени и т.д. Также не забывайте до начала всего процесса делать бекап сайта на Joomla и бекап на wordpress.

Как перенести другие комментарии (не JComments) из Joomla в WordPress?

Если честно, в Joomla есть не одна пара плагинов комментариев и прописывать для каждого свой инструмент миграции не целесообразно. JComments самый лучший для Джумла.

Но все же если на вашем сайте Joomla стоит другой компонент комментариев, то выход есть. Можно экспортировать внутренними средствами ДжиКоммент в него, а потом все по такому же сценарию. Какие компоненты может импортировать смотрите ниже:

  • Remository
  • AkoBook
  • Reviews for SOBI2
  • Mosets Tree
  • VirtueMart
  • MusicBox
  • JMovies
  • JXtended Comments
  • J! Reactions
  • AkoComment и его модификации
  • JoomlaComment
  • Cinema
  • mXcomment
  • DatsoGallery
  • JoomGallery
  • Ice Gallery
  • MosCom
  • ComboMax
  • Chrono Comments
  • PAXXGallery
  • JomComment
  • LinkDirectory
  • RSGallery2
  • zOOm Media Gallery
  • HotOrNot2

Так что выбор большой, найдете свой компонент.

4 комментария
  1. Антон:

    Здравствуйте! Скажите пожалуйста, а до выполнения скрипта нужно использовать плагин FG Joomla? Сначала им нужно перенести записи, а только потом уже использовать данный скрипт? Можно подробнее об этом.

    • ageta:

      Здравствуйте, Антон. Я использовал FG Joomla, а потом использовал скрипт. Переносил данный сайт, работает отлично. Отпишитесь о результате, а то у кого то не получается.
      Начинал писать статьи о переносе всего сайта с джумлы на вордпресс, но руки не дошли.

  2. claus:

    Добрый день
    Пробовал выполнить скрипт, не получается. Выдает
    Parse error: syntax error, unexpected T_STRING in site.сom\migrate-comments-j-to-wp.php on line 15
    Скрипт копировал с этой страницы
    Не подскажите в чем проблема?

    • ageta:

      Так не могу сказать сразу. Я без проблем через этот скрипт экспортировал. Посмотрите, что у вас в 15й строке.

Поделитесь своим мнением
Для оформления сообщений Вы можете использовать следующие тэги:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Навигация