#javascript #php #woocommerce #wpml
Вопрос:
Я использую многоязычие WPML и WooCommerce, и в WooCommerceorders я могу установить один из наших трех языков с помощью выпадающего списка, этот раскрывающийся список перезагружает страницу и устанавливает языковой файл cookie.
Когда произойдет эта перезагрузка, я хочу использовать функцию для файла cookie, чтобы переключить внутренний язык WPML на тот же язык, выбранный в раскрывающемся списке.
Чтобы переключить внутренний язык, я хочу использовать это, но получить переменную языка из функции order_language_dropdown:
global $sitepress;
$sitepress->switch_lang( $languages, 'nl' );
Каков наилучший подход здесь?
Функция перезагрузки и сохранения языка:
public function order_language_dropdown( $order_id ) {
if ( ! get_post_meta( $order_id, '_order_currency' ) ) {
$languages = apply_filters(
'wpml_active_languages',
[],
[
'skip_missing' => 0,
'orderby' => 'code',
]
);
$selected_lang = isset( $_COOKIE [ self::DASHBOARD_COOKIE_NAME ] ) ? $_COOKIE [ self::DASHBOARD_COOKIE_NAME ] : $this->sitepress->get_default_language();
?>
<li class="wide">
<label><?php _e( 'Order language:' ); ?></label>
<select id="dropdown_shop_order_language" name="wcml_shop_order_language">
<?php if ( ! empty( $languages ) ) : ?>
<?php foreach ( $languages as $l ) : ?>
<option
value="<?php echo $l['language_code']; ?>" <?php echo $selected_lang == $l['language_code'] ? 'selected="selected"' : ''; ?>><?php echo $l['translated_name']; ?></option>
<?php endforeach; ?>
<?php endif; ?>
</select>
</li>
<?php
$wcml_set_dashboard_order_language_nonce = wp_create_nonce( 'set_dashboard_order_language' );
wc_enqueue_js(
"
var order_lang_current_value = jQuery('#dropdown_shop_order_language option:selected').val();
jQuery('#dropdown_shop_order_language').on('change', function(){
if(confirm('" . esc_js( __( 'All the products will be removed from the current order in order to change the language', 'woocommerce-multilingual' ) ) . "')){
var lang = jQuery(this).val();
jQuery.ajax({
url: ajaxurl,
type: 'post',
dataType: 'json',
data: {action: 'wcml_order_delete_items', order_id: woocommerce_admin_meta_boxes.post_id, lang: lang , wcml_nonce: '" . $wcml_set_dashboard_order_language_nonce . "' },
success: function( response ){
if(typeof response.error !== 'undefined'){
alert(response.error);
}else{
window.location = window.location.href;
}
}
});
}else{
jQuery(this).val( order_lang_current_value );
return false;
}
});
"
);
} else {
$this->remove_dashboard_order_language_cookie();
}
}
``