首页 > 解决方案 > 保存 WooCoomerce 订单时动态更改后端 WPML 语言

问题描述

我尝试在根据订单上的元键值保存订单时以编程方式设置后端 WPML 语言,以确保管理语言与订单的相同语言对齐。

如果订单有wpml_language一个值为en我想确保后端 wpml 语言设置为英语的元键。

这可能吗?

到目前为止,这是我试图给出的一个想法,我想实现什么:

add_action( 'woocommerce_before_save_order_items', 'action_woocommerce_before_save_order_items', 10, 2 );

function action_woocommerce_before_save_order_items( $order_id, $items ) {
 $language = get_post_meta( get_the_ID(), 'wpml_language', true );
  if ($language == 'en') {
    global $sitepress;  
    $sitepress->switch_lang('en');      
  } else {
    global $sitepress;  
    $sitepress->switch_lang('nl');  
 } 
}; 

我可以看到,如果我只在函数中设置这个:

global $sitepress;  
$sitepress->switch_lang('en');

它将后端设置为英语。为什么订单保存上没有设置?

编辑:以这种方式解决:

$language = get_post_meta( get_the_ID(), 'wpml_language', true );
if ($language == 'en') {
add_filter('acf/settings/current_language', function(){return 'en';});
} elseif ($language == 'nl') {
add_filter('acf/settings/current_language', function(){return 'nl';});
  } elseif ($language == 'de') {
add_filter('acf/settings/current_language', function(){return 'de';});
 } else {
add_filter('acf/settings/current_language', function(){return 'nl';});
}
$img = get_field('logo', 'option');
$text = get_field('textfield', 'option');

将此添加到 customer-invoice.php 并设置正确的语言以与订单语言元键对齐并从选项中提取正确的语言,无论管理员 WPML 语言设置为什么。

标签: wordpresswoocommercewpml

解决方案


推荐阅读