使用文章复制插件快速创建Polylang管理的另一个语言的文章
Polylang建立多语言网站中的文章复制和自动关联
我使用Polylang建设多语言网站的时候,发现每个文章的两个语言版本之间,除了语言不同,其他方面其实都是相同的。如果把这些相同的部分再次输入或设置一遍,效率是非常低的,特别是当一个文章的自定义字段特别多的时候。
为此,当两个语言的文章中有大量的自定义字段需要发布时,我们会为客户安装一个文章复制插件,避免将相同的自定义字段再次输入。但是,这种方便无法自动建立两种语言版本之间的关联,需要在编辑文章的时候,在Polylang中手动关联,而手动关联这个操作比较麻烦。
在复制文章的时间自动建立Polylang语言关联
复制文章我们使用PostDuplicator插件,在研究了这个插件的代码之后,我们发现了mtphr_post_duplicator_created hook,该 hook 可让我们在复制文章之后,对复制的文章进行更多操作。通过结合 Polylang 的一些函数,我们使用以下代码实现了复制后,自动建立两个语言版本关联的操作。
/**
*复制文章时创建文章关系
*/
add_action('mtphr_post_duplicator_created',function($original_id,$duplicate_id)
{
$original_id=absint($original_id);
$original_lang=pll_get_post_language($original_id,'slug');
$new_lang=($original_lang=='de')?'zh':'de';
pll_set_post_language($duplicate_id,$new_lang);
pll_save_post_translations([
$original_lang=>$original_id,
$new_lang=>$duplicate_id,
]);
},10,2);
在用户点击复制复制文章后,代码会获取当前文章的语言,然后判断并设置复制后新文章的语言。最后设置两个语言之间的关联关系。
复制文章后,设置对应语言的自定义分类方法
通过上面的代码,我们实现了文章内容和自定义字段的复制。但是文章的自定义分类方法并没有复制过来。这是因为源语言的分类法项目在新的语言环境下不存在,存在的只是翻译后的新语言的分类法项目。
和文章一样,源语言和新语言的分类法项目是可以关联起来的。我们可以使用 Polylang 函数 pll_get_term() 来获取新语言对应的分类法项目,然后和复制后的新文章关联起来。这样就实现了分类法项目的复制。具体代码如下。
/**
*复制后,设置新语言的分类方法
*
*@param$original_id原始文章ID
*@param$duplicate_id复制后的文章ID
*@param$taxonomy分类法名称
*@param$new_lang新语言别名
*/
function polylang_set_new_terms($original_id,$duplicate_id,$taxonomy,$new_lang)
{
$terms=wp_get_post_terms($original_id,$taxonomy);
foreach($termsas$term){
$new_lang_term_id=pll_get_term($term->term_id,$new_lang);
wp_set_post_terms($duplicate_id,$new_lang_term_id,$taxonomy);
}
}
把上面的函数用在第一段代码中合适的位置,就可以在复制后为新语言的文章设置对应的分类方法了。
以上代码实现的只是两个语言的自动设置。如果您的网站使用多个语言,代码会更复杂不少,有可能还需要修改文章复制插件才能实现。欢迎大家参考上面的代码尝试实现。

-
IDC/ISP办理许可证的基本条件(附:IDC和ISP许可证申请流程) 2023-06-07 08:00:01
-
利用tinymce.activeEditor获取到 WordPress可视化编辑器中的值(附:tinymce.activeEditor常见其他用法) 2023-06-06 08:00:02
-
WordPress是什么框架吗?WordPress是用什么写的? 2023-06-06 08:00:02
-
WordPress哪个版本稳定好用(附:如何查看当前WordPress版本) 2023-06-06 08:00:02
-
Automattic 发布 wp-now:由 WordPress Playground 提供支持的本地开发环境 2023-06-05 08:00:02
-
PHP预定义常量都有哪些(含常见PHP魔术常量) 2023-06-04 08:00:01
-
php的 require 和include 有什么区别 2023-06-04 08:00:01
-
UGPT插件:国内首个永久免费WordPress ChatGPT插件 2023-06-04 08:00:01
-
WordPress古腾堡编辑器模块开发教程 2023-06-03 08:00:02
-
更快实现Google收录排名第一的SEO技巧汇总 2023-06-03 08:00:02