WPML — Пользовательские поля данных элемента корзины не обновляются при переключении языка

Я использую плагин Woocommerce с многоязычным плагином WPML, и я просто не могу работать так, как ожидал.

В моих продуктах есть несколько настраиваемых полей, которые мне нужно отображать в корзине, при оформлении заказа, при просмотре заказа и в уведомлениях по электронной почте.

Поля отображаются правильно во внешнем интерфейсе, но когда я переключаю язык, данные сеансов не обновляются.

Как WPML обрабатывает дополнительные данные?
Есть ли способ заставить это работать, чтобы данные обновлялись при переключении языка?

Вот мой код:

add_filter( 'woocommerce_product_data_tabs', 'mbextra_product_data_tab' , 99 , 1 );
function mbextra_product_data_tab( $product_data_tabs ) {
    $product_data_tabs['mbextraproducttab'] = array(
        'label' => __( 'EXTRA', 'mbg' ),
        'target' => 'mbextraproductdata',
        'class' => array();
    );
    return $product_data_tabs;
}
add_action( 'woocommerce_product_data_panels', 'mbextra_product_data_fields' );
function mbextra_product_data_fields() {
?>
    <div id="mbextraproductdata" class="panel woocommerce_options_panel">
    <div class="options_group">
<?php
  woocommerce_wp_textarea_input(
  array(
  'id' => 'company',
  'label' => __( 'Company', 'mbg' ),
  'placeholder' => 'Company Adress here',
  'desc_tip' => 'true',
  'description' => __( 'Enter Company Adress here', 'mbg' )
  )
  );
?>
</div>
    <div class="options_group">
<?php
  woocommerce_wp_textarea_input(
  array(
  'id' => 'shortdescription',
  'label' => __( 'Short-Description', 'mbg' ),
  'placeholder' => 'Enter some short info',
  'desc_tip' => 'true',
  'description' => __( 'Enter Short description here', 'mbg' )
  )
  );
?>
  </div>
  </div><!-- #extraproductdata Tab -->
<?php
}
add_action( 'woocommerce_process_product_meta', 'mbprocess_product_meta_fields_save', 99 );
function mbprocess_product_meta_fields_save( $post_id ){
    // if set  > save the fields
    $company = $_POST['company'];
    if( isset( $company ) )
    update_post_meta( $post_id, 'company', esc_attr( $company ) );
    // if set  > save data to post_meta
    $shortdescription = $_POST['shortdescription'];
    if( isset( $shortdescription ) )
    update_post_meta( $post_id, 'shortdescription', esc_attr( $shortdescription ) );
}




add_filter( 'woocommerce_add_cart_item_data', 'custom_product_field', 10, 3 );

function custom_product_field( $cart_item_data, $product_id, $variation_id ) {

    $shortdesciption = get_post_meta( $product_id , 'shortdesciption' , true );
    $company = get_post_meta( $product_id , 'company' , true );

    if( !empty( $shortdesciption ) )
    {
        $cart_item_data['shortdesciption'] = $shortdesciption;
    }
    if( !empty( $company ) )
    {
        $cart_item_data['company'] = $company;
    }


    return $cart_item_data;

}
add_filter( 'woocommerce_get_cart_item_from_session', 'mbget_cart_item_from_session', 10, 3);

function mbget_cart_item_from_session( $cart_item_data, $cart_item_session_data, $cart_item_key ) {

    if ( isset( $cart_item_session_data['shortdesciption'] ) ) {
        $cart_item_data['shortdesciption'] = $cart_item_session_data['shortdesciption'];
    }
    if ( isset( $cart_item_session_data['company'] ) ) {
        $cart_item_data['company'] = $cart_item_session_data['company'];
    }

    return $cart_item_data;
}


add_filter( 'woocommerce_get_item_data', 'render_meta_on_cart_and_checkout', 10, 2 );
function render_meta_on_cart_and_checkout( $cart_data, $cart_item ) {

    $data = array();

    if( !empty( $data ) ) {
        $data = $cart_data;
    }

    if( isset( $cart_item['shortdesciption'] ) ) {
        $data[] = array(
        'name' => __( 'Stuff', 'mbg' ),
        'value' => $cart_item['shortdesciption'] );
    }
    if( isset( $cart_item['company'] ) ) {
        $data[] = array(
        'name' => __( 'Company', 'mbg' ),
        'value' => $cart_item['company'] );
    }


    return $data;
}

Спасибо


person mbg    schedule 10.12.2016    source источник
comment
Здравствуйте, LoicTheAztec, я знаю, что основным плагином является WPML, а Woocmmerce Multilingual не работает без WPML. И у меня также есть пожизненная лицензия на него :) Для меня это имеет смысл: зайти на страницу, выбрать предпочитаемый язык, а затем продолжать делать что-то только на этом языке. Таким образом, ваш последний комментарий был ответом, который я хотел услышать или ожидал. Я просто хотел получить доверие от других более опытных пользователей, чтобы получить подтверждение моих мыслей. Теперь я счастлив, спасибо!   -  person mbg    schedule 13.12.2016
comment
Поэтому я опубликовал это как ответ… :) спасибо   -  person LoicTheAztec    schedule 13.12.2016


Ответы (1)


ДА вам нужно будет уничтожить сеанс корзины или удалить все элементы корзины при переключении языка. Но такого случая никогда не бывает:

Поскольку на самом деле это НЕ поведение клиента, добавление товаров в корзину (для определенного языка) и последующее переключение на другой язык, например, перед оформлением заказа.

Так что это не должно быть проблемой. Это просто поведение разработчика, который всеми возможными способами тестирует электронную коммерцию, не так ли?

person LoicTheAztec    schedule 13.12.2016
comment
Да, это так. Спасибо, что избавили меня от дальнейших головных болей по этому поводу :) - person mbg; 13.12.2016