我在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功能吗?
答案 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));
});
希望它有用。