WP All Import Pro:Polylang 兼容性

Chr*_*ian 5 wordpress import wpallimport polylang

我正在尝试使用 WP All Import 的专业版将数据从 Excel 工作表导入到 WordPress 中。我们使用 Polylang 来支持多语言。我想知道如何管理将内容导入正确的语言版本。我发现有一个隐藏的分类“语言”,我可以手动将其设置为“de”以将语言设置为德语。但如何链接相应的翻译呢?有什么想法可以解决这个问题,也许可以使用一些自定义函数吗?先感谢您!

Luc*_*lin -1

请注意,我目前正在使用 Polylang 和 Wp All Import/Export Pro 版本。

\n\n

另外,这目前还不是“过时”的代码。它依赖于一个未记录的功能,该功能是 wp all import 团队直接建议的。我只是简单地谈论$data由操作传递的附加参数pmxi_saved_post

\n\n

也就是说,我知道 Polylang 开发人员目前正在为这个特定问题开发一个插件。无论如何,我现在设法以这种方式做到这一点:

\n\n

1 -> 导出数据时,有 2 个与 Polylang 相关的字段:languagespost_translations。也导出它们。

\n\n

2 -> 当您导入数据时,在 wpallimport 屏幕上,再创建 2 个自定义字段并保存上面的 2 个。请参阅下面的附件。现在您已经获得了每篇文章的翻译数据。

\n\n

3 -> 设置此过滤器:

\n\n
global $language_codes;\n\n$language_codes = array( // sample lang data\n  \'italiano\' => \'it\'\n  ,\'english\' => \'en\'\n  ,\'espanol\' => \'es\'\n  ,\'francais\' => \'fr\'\n  ,\'deutsch\' => \'de\'\n);\n\nadd_action(\'pmxi_saved_post\', \'set_imports_lang\', 10, 2);\n\n// using undocumented param $data\n// action firm is the following (in fact, it passes 3 params): do_action( \'pmxi_saved_post\', $pid, $rootNodes[$i], $is_update );\nfunction set_imports_lang($post_id, $data){\n  global $language_codes;\n  // \'lingue\' is italian, I guess it will be \'languages\' in english: it\'s one of the 2 fields we saved before\n  pll_set_post_language($post_id, $language_codes[sanitize_title($data->lingue)]);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

此时您刚刚设置了每个帖子的原始语言,仅此而已。现在我们必须将翻译相互链接。我们将使用一个只需运行一次的函数来完成此操作。它只需重新加载任何 wp 屏幕/页面即可运行。

\n\n
function set_imports_translations(){\n  global $wpdb;\n  global $language_codes;\n\n  // substitute \'enews\' with your own post type\n  $list = $wpdb->get_results("\n    SELECT\n      m.post_id, m.meta_value pll, group_concat(concat_ws(\':\', m2.meta_value, m.post_id)) ids\n    FROM\n      $wpdb->posts p\n      INNER JOIN $wpdb->postmeta m ON p.ID = m.post_id\n      INNER JOIN $wpdb->postmeta m2 ON m.post_id = m2.post_id AND m2.meta_key = \'_import_language_name\'\n    WHERE\n      p.post_type = \'enews\' AND m.meta_key = \'_import_translations_id\'\n    GROUP BY pll\n  ");\n\n  // query results are something like this:\n  // 10258 pll_57e92254c445f 10258:Italiano,10259:English,10260:Espa\xc3\xb1ol,10261:Fran\xc3\xa7ais,10262:Deutsch\n  // 10263 pll_57e922552b8c6 10263:Italiano,10264:English,10265:Espa\xc3\xb1ol,10266:Deutsch\n  // 10267 pll_57e9225587124 10267:Italiano\n\n\n  // extract data from the third column string\n  foreach($list as $item){\n    $ids = explode(\',\',$item->ids);\n    $list = array();\n\n    foreach($ids as $id){\n      $data = explode(\':\',$id);\n      $list[$language_codes[sanitize_title($data[0])]] = intval($data[1]);\n    }\n\n    //set the translations\n    pll_save_post_translations($list);\n  }\n}\n\nset_imports_translations();\n
Run Code Online (Sandbox Code Playgroud)\n\n

就这样。:) 啊,上面提到的附件:

\n\n

在此输入图像描述

\n