Значение флажка не сохраняется в корзине Woocommerce и оформлении заказа - PullRequest
0 голосов
/ 19 июня 2019

У меня проблема с сохранением значения пользовательского флажка в корзине woocommerce и оформлении заказа.

Я добавил пользовательский флажок к таблице доставки заказа, который добавляет пользовательский пакет, если выбран определенный способ доставки.Если флажок установлен, и я выбираю другой способ доставки, а затем возвращаюсь к определенному способу с флажком, флажок снимается при повторной загрузке ajax сводной информации о корзине.

Я пытался сохранить значение флажка в файлах cookie с чем-то вроде этого

var checkbox = $('#your-form :checkbox:first'),
    checkboxCookieName = 'checkbox-state';

checkbox.prop('checked', +$.cookie(checkboxCookieName));

checkbox.click(function() {
   $.cookie(checkboxCookieName, +this.checked);
});

Но это не сработало.

Код для флажка:

function my_custom_checkout_field() {
    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = $chosen_methods[0]; 
    if ($chosen_shipping == 'nova_poshta_shipping_method') { 
    echo '<div id="my_custom_checkout_field">';

    woocommerce_form_field( 'my_field_name', array(
        'type'      => 'checkbox',
        'checked'      => 'checked',
        'class'     => array('input-checkbox'),
        'label'     => __('<span class="paperbagspan">Добавить фирменный пакет <img class="paperbag" src="https://paradisefruit.com.ua/wp-content/uploads/2019/06/paper-bag.png" style="width:30px"><img class="paperbagpink" style="display:none; width:30px" src="https://paradisefruit.com.ua/wp-content/uploads/2019/06/paper-bag-pink.png" ></span>'),
    ),  WC()->checkout->get_value( 'my_field_name' ) );
    echo '</div>';
}
}
add_action( 'woocommerce_after_shipping_rate', 'checkout_shipping_additional_field', 20, 2 );
function checkout_shipping_additional_field( $method, $index )
{
    if( $method->get_id() == 'nova_poshta_shipping_method' ){
       return my_custom_checkout_field();
    }
}


// Save the custom checkout field in the order meta, when checkbox has been checked
add_action( 'woocommerce_checkout_update_order_meta', 'custom_checkout_field_update_order_meta', 10, 1 );
function custom_checkout_field_update_order_meta( $order_id ) {

    if ( ! empty( $_POST['my_field_name'] ) )
        update_post_meta( $order_id, 'my_field_name', sanitize_text_field($_POST['my_field_name'] ));
}

Что я делаю не так или есть какая-то функция WordPress, которая сохраняет значения настраиваемых полей?

1 Ответ

0 голосов
/ 19 июня 2019

Надеюсь, я правильно понял - т.е. у вас есть флажок, и на каждом входе значение сохраняется в файле cookie.При загрузке страницы вы извлекаете значение cookie и устанавливаете его на флажок.Все работает хорошо, за исключением случаев, когда вы делаете запрос AJAX и загружаете все это.

Похоже, что это скорее проблема JavaScript (а не PHP).

При загрузке страницы вы уже отмечаете флажок как выбранный на основе значения cookie.Однако, когда вы делаете запрос AJAX, вы устанавливаете флажок, и код javascript, который отвечает за установку значения флажка, больше не вызывается (т.е. checkbox.prop ('флажок', + $. Cookie (checkboxCookieName)))).

Вам нужно позвонить:

checkbox.prop('checked', +$.cookie(checkboxCookieName));

по завершении запроса ajax и ПОСЛЕ внедрения HTML

В Woocommerce есть три события:

updated_wc_div updated_cart_totals updated_shipping_method

Я не совсем понимаю, что вы пытаетесь сделать, но вы должны привязать свой код к одному из них в зависимости от ваших потребностей.Способ сделать это (например, используя updated_cart_totals):

$(document).on('updated_cart_totals', function(){
    checkbox.prop('checked', +$.cookie(checkboxCookieName));
});

Надеюсь, это полезно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...