Php 如何通过WooCommerce签出时的复选框添加多个产品(ajax)
因此,我有一个脚本,当在签出时选中复选框时,我使用该脚本将特定产品添加到购物车。AJAX用于添加和删除所述产品 我的问题是,我如何才能干净、正确地操作此代码,以允许使用第二个复选框添加其他产品。比如说,在未来我希望能够添加1或2个额外的“附加组件”,我如何在不重复代码的情况下做到这一点 这就是我目前的问题。我有时相当得体,但我经常发现自己在复制代码,因为我知道这是不必要的。非常感谢您的帮助(如果您能解释一下,我将不胜感激。如果没有,我可以通过检查更改来学习。)Php 如何通过WooCommerce签出时的复选框添加多个产品(ajax),php,jquery,ajax,wordpress,woocommerce,Php,Jquery,Ajax,Wordpress,Woocommerce,因此,我有一个脚本,当在签出时选中复选框时,我使用该脚本将特定产品添加到购物车。AJAX用于添加和删除所述产品 我的问题是,我如何才能干净、正确地操作此代码,以允许使用第二个复选框添加其他产品。比如说,在未来我希望能够添加1或2个额外的“附加组件”,我如何在不重复代码的情况下做到这一点 这就是我目前的问题。我有时相当得体,但我经常发现自己在复制代码,因为我知道这是不必要的。非常感谢您的帮助(如果您能解释一下,我将不胜感激。如果没有,我可以通过检查更改来学习。) //显示自定义签出字段 添加操作(
//显示自定义签出字段
添加操作('woocommerce\u checkout\u order\u review'、'add\u a\u product1',10);
函数add_a_product1(){
$value=WC()->session->get('add_a_product');
woocommerce\u form\u字段('cb\u add\u product',数组(
'键入'=>'复选框',
“标签”=>”。(仅需12.99美元即可添加产品1),
'class'=>array('form-row-wide'),
),$value==“是”?真:假);
}
//jqueryajax请求
添加操作('wp_footer'、'checkout_custom_jquery_script');
函数签出\自定义\ jquery\脚本(){
//仅签出页面
如果(is_checkout()&&!is_wc_endpoint_url()):
//删除加载时的“ship_different”自定义WC会话
如果(WC()->session->get('add_a_product')){
WC()->session->unset(“添加产品”);
}
如果(WC()->session->get('product\u added\u key')){
WC()->session->uu unset('product_added_key');
}
//jQuery Ajax代码
?>
jQuery(函数($){
if(wc\u checkout\u参数的类型==“未定义”)
返回false;
$('form.checkout')。在('change','cb#u add_product',函数()上{
var value=$(this.prop('checked')==true?'yes':'no';
$.ajax({
键入:“POST”,
url:wc_checkout_params.ajax_url,
数据:{
“操作”:“添加产品”,
“添加产品”:值,
},
成功:功能(结果){
$('body')。触发器('update_checkout');
控制台日志(结果);
}
});
});
});
// Display a custom checkout field
add_action( 'woocommerce_checkout_order_review', 'add_a_product1' , 10 );
function add_a_product1() {
$value = WC()->session->get('add_a_product');
woocommerce_form_field( 'cb_add_product', array(
'type' => 'checkbox',
'label' => ' ' . __('Add <span style="color:#ef4a23;">PRODUCT 1</span> for just <span style="color:#ef4a23;">$12.99?</span>'),
'class' => array('form-row-wide'),
), $value == 'yes' ? true : false );
}
// The jQuery Ajax request
add_action( 'wp_footer', 'checkout_custom_jquery_script' );
function checkout_custom_jquery_script() {
// Only checkout page
if( is_checkout() && ! is_wc_endpoint_url() ):
// Remove "ship_different" custom WC session on load
if( WC()->session->get('add_a_product') ){
WC()->session->__unset('add_a_product');
}
if( WC()->session->get('product_added_key') ){
WC()->session->__unset('product_added_key');
}
// jQuery Ajax code
?>
<script type="text/javascript">
jQuery( function($){
if (typeof wc_checkout_params === 'undefined')
return false;
$('form.checkout').on( 'change', '#cb_add_product', function(){
var value = $(this).prop('checked') === true ? 'yes' : 'no';
$.ajax({
type: 'POST',
url: wc_checkout_params.ajax_url,
data: {
'action': 'add_a_product',
'add_a_product': value,
},
success: function (result) {
$('body').trigger('update_checkout');
console.log(result);
}
});
});
});
</script>
<?php
endif;
}
// The Wordpress Ajax PHP receiver
add_action( 'wp_ajax_add_a_product', 'checkout_ajax_add_a_product' );
add_action( 'wp_ajax_nopriv_add_a_product', 'checkout_ajax_add_a_product' );
function checkout_ajax_add_a_product() {
if ( isset($_POST['add_a_product']) ){
WC()->session->set('add_a_product', esc_attr($_POST['add_a_product']));
echo $_POST['add_a_product'];
}
die();
}
// Add remove product
add_action( 'woocommerce_before_calculate_totals', 'adding_removing_specific_product' );
function adding_removing_specific_product( $cart ) {
if (is_admin() && !defined('DOING_AJAX'))
return;
if ( did_action( 'woocommerce_before_calculate_totals' ) >= 2 )
return;
// HERE the specific Product ID
$product_id = 2759;
if( WC()->session->get('add_a_product') == 'yes' && ! WC()->session->get('product_added_key') )
{
$cart_item_key = $cart->add_to_cart( $product_id );
WC()->session->set('product_added_key', $cart_item_key);
}
elseif( WC()->session->get('add_a_product') == 'no' && WC()->session->get('product_added_key') )
{
$cart_item_key = WC()->session->get('product_added_key');
$cart->remove_cart_item( $cart_item_key );
WC()->session->__unset('product_added_key');
}
}