Я пытаюсь изменить сценарий, разработанный для импорта записей статей из базы данных Joomla (1.5.x) в таблицу Wordpress 3.2.1 для записей.Это скрипт, который переносит контент из Joomla в Wordpress.
Проблема, с которой я столкнулся при работе со скриптом, заключается в том, что он не поддерживает уникальный идентификатор («id» в Joomla и «ID» в Wordpress).Исходя из моего понимания, это значительно усложняет (гораздо больше работы) задачу перенаправления всех постоянных ссылок Joomla на новые (и, очевидно, другие) постоянные ссылки Wordpress.Если бы идентификатор был таким же в WP, как и в Joomla, тогда некоторых базовых правил перезаписи в htaccess было бы достаточно для выполнения перенаправлений.
Поэтому я хочу посмотреть, смогу ли я изменить код, чтобы заставить идентификатор довольночем это генерируется в последовательном порядке, поскольку записи вставляются в таблицу.
Сценарий, который я изменяю, доступен здесь: http://wordpress.org/extend/plugins/joomla-to-wordpress-migrator/ Файл, о котором идет речь, называется: joomla2wp-mig.php
Массив создается в строке 1049 и 1081. В строке 1049 это:
$wp_posts[] = array(
'ID' => $R->id, //I ADDED THIS IN
'post_author' => $user_id,
'post_category' => array($wp_cat_id),
'post_content' => $post_content,
'post_date' => $R->created,
'post_date_gmt' => $R->created,
'post_modified' => $R->modified,
'post_modified_gmt' => $R->modified,
'post_title' => $R->title,
'post_status' => 'publish',
'comment_status' => 'open',
'ping_status' => 'open',
'post_name' => $R->alias,
'tags_input' => $R->metakey,
'post_type' => 'post'
);
А в строке 1081:
$array = array(
"ID" => $item['ID'], //I ADDED THIS IN
"post_author" => $user_id,
"post_parent" => intval($wp_cat_id),
"post_content" => $item['post_content'],
"post_date" => $item['post_date'],
"post_date_gmt" => $item['post_date_gmt'],
"post_modified" => $item['post_modified'],
"post_modified_gmt" => $item['post_modified_gmt'],
"post_title" => $item['post_title'],
"post_status" => $item['post_status'],
"comment_status" => $item['comment_status'],
"ping_status" => $item['ping_status'],
"post_name" => $item['post_name'],
"post_type" => $item['post_type']
);
Я прокомментировалстрока ID, которую я добавил в верхнюю часть каждого из этих битов кода массива.
Команда INSERT выполняется вокруг строки 1097
Команда INSERT составляется следующим образом:
$insert_sql = "INSERT INTO " . $j2wp_wp_tb_prefix . "posts" . " set ";
$inserted = 0;
foreach ($array as $k => $v)
{
if($k AND $v)
{
if($inserted > 0)
$insert_sql .= ",";
$insert_sql .= " ".$k." = '".mysql_escape_string(str_replace("`","",$v))."'";
++$inserted;
}
}
$sql_query[] = $insert_sql;
}
Используется функция MYSQL INSERT INTO ... SET (в отличие от INSERT INTO ... VALUE )
Задача, с которой я столкнулся, такова: Массив diне включать идентификатор, поэтому я добавил это в.
После внесения этого изменения при запуске скрипта (в конце пользовательского интерфейса Wordpress) он заработает нормально, но записи не вставляются, дажехотя он говорит, что это было успешно.
Я обнаружил, что могу обойти эту проблему, настроив свежую таблицу wp_posts с Х числом пустых записей.Допустим, я импортирую 100 статей, затем я поместил бы 100 записей в таблицу, и они имели бы идентификатор от 1 до 100. Когда я запускаю свой модифицированный код, он будет радостно обновлять изаполнить эти существующие записи.Чего я не понимаю, так это того, почему он не будет создавать новые записи, когда я заставляю уникальный идентификатор (ID) получить то, что я хочу.
Мне интересно, нужно ли мне использовать INSERT INTO ... VALUE вместо INSERT INTO ... SET
Я собирался проверить это, но, честно говоря, я не программист и просто использую этокак я иду вместе.Поэтому я понятия не имел, как переписать PHP, чтобы реализовать структуру, необходимую для команды VALUE вместо SET .
Любая помощь или предложения будуточень признателен.
Я понял, что мне нужно переписать последний бит кода, который я предоставил выше.
На этом вопросе обсуждается форум поддержки WordPress .Один пользователь (spiff06) очень любезно помог мне решить проблему.Мы расстались с получением кода для вставки новых записей с принудительным идентификатором, и я пошел с тем, что мы назвали «грязной» опцией (это метод, который я упомянул выше ..., настроив таблицу с требуемым числомпустые записи).
Несмотря на то, что я использовал этот «грязный» метод для своего собственного сайта, я хочу, чтобы этот процесс работал корректно для других пользователей, которые используют Joomla 1.5.x и переходят наWP вместо обновления до новой версии Joomla (это большой процесс, поэтому многие просто прыгают с WP, как и я).
С огромным спасибо ...
Джонатан