WPML — переключите язык администратора на выбранный язык заказа в заказах WooCommerce.

#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();
        }
    }
``