我正在将非wp数据库迁移到Wordpress(这是我有生以来第一次,希望也是最后一次)。
由于新旧网站都是多语言的,我的任务之一就是将文章与其翻译联系起来。我正在Wordpress上使用WPML插件来支持多语言。这个插件创建一个表,wp_icl_translations
结构如下:
element_id | trid | language_code | source_language_code
---------------------------------------------------------------------------
(post id) | (group id) | (of the translated post)| (of the original post)
trid
是原始帖子id的id,并且一篇原始帖子的所有翻译对于trid
. 如果帖子是原创的,trid
与相同element_id
这是post id,并且source_language_code
是NULL
.在我的帖子上有几个注释:
并非所有帖子都翻译成所有语言(我有8种语言)
item_id
这对于一篇文章的所有翻译都是一样的。当我迁移它们时,我添加了这个item_id
像meta_value
对于每个帖子。我对语言代码也做了同样的操作,因此我能够创建一个自定义表,在该表中,我可以在wordpress数据库的post ID和旧数据库的item\\u ID和语言代码之间建立连接。此自定义表,id_item_lid
, 具有以下结构:id | item_id | lid
---------------------------------------------------------------------------
post id assigned by wordress | old item_id | language code
| (translations share this id)|
总之,我需要更新trid
第列,共列wp_icl_translations
使用共享相同的帖子的帖子IDitem_id
在里面id_item_lid
桌子下面是我想到的函数:
function rkm_translation_update() {
global $wpdb;
$trans_row = $wpdb->get_row("SELECT * FROM id_item_lid", OBJECT, 0);
$id = $trans_row->id;
$item = $trans_row->item_id;
$lid = $trans_row->lid;
$trans_array = $wpdb->get_results("SELECT * FROM id_item_lid");
foreach ($trans_array as $trans) {
$id_new = $trans->id;
$item_new = $trans->item_id;
$lid_new = $trans->lid;
if ($item === $item_new) {
$wpdb->update(\'wp_icl_translations\', array(\'trid\' => $id, \'source_language_code\' => $lid), array(\'element_id\' => $id_new));
} else {
$id = $trans->id;
$item = $trans->item_id;
$lid = $trans->lid;
}
}
}
add_action( \'init\', \'rkm_translation_update\');
它背后的想法是获取第一行的记录,并将其与下一行进行比较。但是,什么都没有发生。我第一次做这种数据库操作,所以我不知道从哪里开始调试。非常感谢您的帮助和指导。
如果您需要更多信息,请随时询问。
谢谢