我正在尝试使用Pro全部导入的Pro版本将数据从Excel工作表导入WordPress。我们使用Polylang进行多语言支持。我想知道如何管理将内容导入正确的语言版本。我发现有一种隐藏的分类法“语言”,我可以手动设置为“de”将语言设置为德语。但是如何链接相应的翻译?任何想法如何解决这个问题,可能有一些自定义功能?提前谢谢!
答案 0 :(得分:0)
请注意,我目前正在使用Polylang和Wp All Import / Export Pro版本。
此外,目前尚未“过时”代码。它依赖于一个未记录的功能,这是直接从wp所有导入团队建议的。我只是简单地谈到$data
操作传递的附加参数pmxi_saved_post
。
那就是说,我知道polylang开发人员目前正在研究这个特定问题的插件。无论如何,我设法以这种方式做到了,现在:
1 - >导出数据时,有2个与polylang相关的字段:languages
和post_translations
。也导出它们。
2 - >导入数据时,在wpallimport屏幕上,再创建2个自定义字段并保存上面的2个。见下面的附件。现在你已经获得了每篇文章的翻译数据。
3 - >设置此过滤器:
global $language_codes;
$language_codes = array( // sample lang data
'italiano' => 'it'
,'english' => 'en'
,'espanol' => 'es'
,'francais' => 'fr'
,'deutsch' => 'de'
);
add_action('pmxi_saved_post', 'set_imports_lang', 10, 2);
// using undocumented param $data
// action firm is the following (in fact, it passes 3 params): do_action( 'pmxi_saved_post', $pid, $rootNodes[$i], $is_update );
function set_imports_lang($post_id, $data){
global $language_codes;
// 'lingue' is italian, I guess it will be 'languages' in english: it's one of the 2 fields we saved before
pll_set_post_language($post_id, $language_codes[sanitize_title($data->lingue)]);
}
此时您刚刚设置了每个帖子的原始语言,仅此而已。现在我们必须相互链接翻译。我们将使用我们必须仅运行1次的功能来完成此操作。只需重新加载任何wp屏幕/页面即可运行。
function set_imports_translations(){
global $wpdb;
global $language_codes;
// substitute 'enews' with your own post type
$list = $wpdb->get_results("
SELECT
m.post_id, m.meta_value pll, group_concat(concat_ws(':', m2.meta_value, m.post_id)) ids
FROM
$wpdb->posts p
INNER JOIN $wpdb->postmeta m ON p.ID = m.post_id
INNER JOIN $wpdb->postmeta m2 ON m.post_id = m2.post_id AND m2.meta_key = '_import_language_name'
WHERE
p.post_type = 'enews' AND m.meta_key = '_import_translations_id'
GROUP BY pll
");
// query results are something like this:
// 10258 pll_57e92254c445f 10258:Italiano,10259:English,10260:Español,10261:Français,10262:Deutsch
// 10263 pll_57e922552b8c6 10263:Italiano,10264:English,10265:Español,10266:Deutsch
// 10267 pll_57e9225587124 10267:Italiano
// extract data from the third column string
foreach($list as $item){
$ids = explode(',',$item->ids);
$list = array();
foreach($ids as $id){
$data = explode(':',$id);
$list[$language_codes[sanitize_title($data[0])]] = intval($data[1]);
}
//set the translations
pll_save_post_translations($list);
}
}
set_imports_translations();
这就是全部。 :)啊,上面提到的附件: