猿问

复选框值未保存在 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 功能可以保存自定义字段值?


慕妹3146593
浏览 121回答 1
1回答

慕容森

我希望我理解正确——即您有一个复选框,并且在每个输入上,该值都存储在 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(){&nbsp; &nbsp; checkbox.prop('checked', +$.cookie(checkboxCookieName));});希望它有用。
随时随地看视频慕课网APP
我要回答