如何通过ACF前端表单创建WPML多语言文章?
实现WPML+ACF前端表单同步创建双语文章的方案
核心逻辑
先通过ACF前端表单收集英语(en)、德语(de)两种语言的内容,提交后优先创建/更新主语言(这里以英语为主语言)的文章,再调用WPML的API生成德语翻译版本,并同步对应字段内容。
1. 配置ACF双语字段组
在ACF Pro里创建两组字段,分别对应两种语言的内容,示例字段:
- 英语内容组:
en_post_title(文本类型)、en_post_content(富文本类型) - 德语内容组:
de_post_title(文本类型)、de_post_content(富文本类型)
将这些字段添加到前端表单中,让用户一次性输入两种语言的内容。
2. 编写表单提交处理代码
在主题的functions.php或自定义插件中,添加ACF保存后的钩子逻辑,处理双语文章的创建:
// 钩子ACF表单保存事件,优先级设为20确保ACF字段已完成保存 add_action('acf/save_post', 'sync_bilingual_posts', 20); function sync_bilingual_posts($post_id) { // 跳过自动保存和版本修订的触发 if (wp_is_post_autosave($post_id) || wp_is_post_revision($post_id)) { return; } // 获取表单提交的双语字段值 $en_title = get_field('en_post_title', $post_id); $en_content = get_field('en_post_content', $post_id); $de_title = get_field('de_post_title', $post_id); $de_content = get_field('de_post_content', $post_id); // 更新主语言(en)文章的标题和内容 wp_update_post([ 'ID' => $post_id, 'post_title' => $en_title, 'post_content' => $en_content, ]); // 检查WPML是否加载,避免未启用时报错 if (!function_exists('wpml_make_post_duplicate') || !global_exists('sitepress')) { return; } global $sitepress; $original_lang = $sitepress->get_current_language(); // 切换到德语环境 $sitepress->switch_lang('de'); // 创建主文章的德语副本 $de_post_id = wpml_make_post_duplicate($post_id); // 更新德语文章的标题和内容 wp_update_post([ 'ID' => $de_post_id, 'post_title' => $de_title, 'post_content' => $de_content, ]); // 同步ACF字段(若有其他自定义字段,按需添加同步逻辑) update_field('en_post_title', $en_title, $de_post_id); update_field('en_post_content', $en_content, $de_post_id); update_field('de_post_title', $de_title, $de_post_id); update_field('de_post_content', $de_content, $de_post_id); // 建立WPML翻译关联,标记德语文章为英语文章的翻译版本 do_action('wpml_set_element_language_details', [ 'element_id' => $de_post_id, 'element_type' => 'post', 'language_code' => 'de', 'trid' => $sitepress->get_element_trid($post_id, 'post'), 'source_language_code' => 'en' ]); // 切回原语言环境 $sitepress->switch_lang($original_lang); }
3. 关键注意事项
- 确保当前操作的用户拥有WPML创建翻译文章的权限,避免因权限不足导致创建失败。
- 若使用ACF复杂字段(如重复器、画廊),需要额外编写字段同步逻辑,确保复杂字段的内容在双语版本中正确对应。
- 测试阶段建议在本地环境验证,避免影响线上数据。
- 可在前端表单提交后添加提示信息,告知用户双语文章已成功创建。
内容的提问来源于stack exchange,提问作者bestbeans
相关产品推荐
相关产品推荐

