我在一个多语种wordpress网站上使用Polylang插件页面和自定义的帖子类型。
我正在寻找的是一种方法,使每一个后同步自动,没有用户的输入。创建新的post类型时,将自动创建翻译并复制所有内容。

这样用户就根本看不到这个面板,或者至少没有机会编辑翻译或者(特别是)关闭同步。我想这可以通过更改用户角色特权来实现,但是帖子肯定必须自动同步。
我检查了这篇文章,但它什么也没做。
发布于 2020-05-07 10:34:43
需要类似的东西,挖出这个无文档的函数:
global $polylang;
// third parameter sets synchronisation
$polylang->sync_post_model->copy_post($post_id, $lang, true);这会将内容复制到所选语言,并启用同步。
使用save_post的示例:
function auto_translate($post_id, $post, $update)
{
if (!$update) {
return;
}
// prevent recursion when publishing translations
remove_action('save_post', 'auto_translate', 999, 3);
global $polylang;
$langs = ['nb', 'se', 'dk'];
$current_translations = pll_get_post_translations($post_id);
foreach ($langs as $lang) {
if (!isset($current_translations[$lang])) {
$polylang->sync_post_model->copy_post($post_id, $lang, true);
}
}
}
// needs low priority or the synchronisation option wont be saved
add_action('save_post', 'auto_translate', 999, 3);发布于 2020-10-13 10:52:22
steinoy提供的解决方案是好的,但会产生额外的不想要的草稿。下面是一个改进的解决方案:
function auto_translate($post_id, $post, $update)
{
if (!$update) {
return;
}
// prevent creation of additional duplicate draft posts
if ( $post->post_status == 'draft' ){
return;
}
// prevent recursion when publishing translations
remove_action('save_post', 'auto_translate', 999, 3);
global $polylang;
$langs = ['nb', 'se', 'dk'];
$current_translations = pll_get_post_translations($post_id);
$post_type = get_post_type($post_id);
if ($post_type == 'post') {
foreach ($langs as $lang) {
if (!isset($current_translations[$lang])) {
$polylang->sync_post_model->copy_post($post_id, $lang, true);
}
}
}
}
// needs low priority or the synchronisation option wont be saved
add_action('save_post', 'auto_translate', 999, 3);https://stackoverflow.com/questions/59289671
复制相似问题