我的函数逻辑全错了,应该把结果排序出来$trans_array
在foreach循环之前。
如果有人需要,以下是有效的更新代码:
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 ORDER BY item_id");
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, \'element_type\' => \'post_post\'));
} else {
$id = $trans->id;
$item = $trans->item_id;
$lid = $trans->lid;
$wpdb->update(\'wp_icl_translations\', array(\'trid\' => $id, \'source_language_code\' => $lid), array(\'element_id\' => $id, \'element_type\' => \'post_post\'));
}
}
}
这是一个有点脏的解决方案,当调试是真的时,在管理中会有一些与原始post语言相关的警告,如果它丢失了,可能可以再细化一点,但我不介意。