复选框值未保存在Woocommerce购物车和结帐中

时间:2019-06-19 10:48:43

标签: javascript php ajax wordpress woocommerce

我在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 :(得分:0)

我希望我能正确理解-即您有一个复选框,并且在每个输入中,该值都存储在cookie中。在页面加载时,您提取cookie值并将其设置为复选框。一切正常,除了您执行AJAX请求并加载整个程序时。

这似乎更多是JavaScript问题(而不是PHP)。

在页面加载中,您已经根据Cookie值将复选框标记为选中。但是,当您执行AJAX请求时,您会拉出该复选框,并且不再调用负责设置复选框值的javascript代码  (即checkbox.prop('checked',+ $。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));
});

希望它有用。