为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
慕妹3146593 2021-08-28 15:32:00
我在 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 checkedadd_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 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

我希望我理解正确——即您有一个复选框,并且在每个输入上,该值都存储在 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));

});

希望它有用。


查看完整回答
反对 回复 2021-08-28
  • 1 回答
  • 0 关注
  • 120 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信