WP All Import Pro:Polylang兼容性

时间:2018-06-18 12:25:19

标签: wordpress import polylang wpallimport

我正在尝试使用Pro全部导入的Pro版本将数据从Excel工作表导入WordPress。我们使用Polylang进行多语言支持。我想知道如何管理将内容导入正确的语言版本。我发现有一种隐藏的分类法“语言”,我可以手动设置为“de”将语言设置为德语。但是如何链接相应的翻译?任何想法如何解决这个问题,可能有一些自定义功能?提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

此外,目前尚未“过时”代码。它依赖于一个未记录的功能,这是直接从wp所有导入团队建议的。我只是简单地谈到$data操作传递的附加参数pmxi_saved_post

那就是说,我知道polylang开发人员目前正在研究这个特定问题的插件。无论如何,我设法以这种方式做到了,现在:

1 - >导出数据时,有2个与polylang相关的字段:languagespost_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();

这就是全部。 :)啊,上面提到的附件:

enter image description here