我使用以下代码在产品中添加了其他变体选项:
add_action('woocommerce_variation_options', 'he_add_to_variation_option', 10, 3);
function he_add_to_variation_option( $loop, $variation_data, $variation){
$is_trial = (get_post_meta($variation->ID, '_trialversion', true)) ? ' checked' : '';
?>
<label class="tips" data-tip="<?php esc_attr_e( 'Enable this option to make as a trial version', 'woocommerce' ); ?>">
<?php esc_html_e( 'Trial Version?', 'woocommerce' ); ?>
<input type="checkbox" class="checkbox variable_is_trial_version" name="_trialversion[<?php echo esc_attr( $variation->ID ); ?>]"<?php echo $is_trial;?>/>
</label>
<?php
}
add_action( 'woocommerce_save_product_variation', 'save_trialversion_option_fields' );
function save_trialversion_option_fields( $post_id ) {
if ( isset( $_POST['_trialversion'] ) ){
foreach ( $_POST['_trialversion'] as $productid=>$checked ){
update_post_meta( $productid, '_trialversion', 'yes' );
}
}
}
效果很好,显示在变量中,并正确保存在数据库中。
到现在为止还挺好。
现在,如果产品被标记为“试用版”,我想在结帐时添加一个额外的复选框。我也使用了“德语”插件,该插件具有用于自定义复选框的选项,但是我无法识别上述代码所做的更改。
如何为试用版变体完成自定义复选框?不管有没有德语,这时我只想让它工作。也许有一个免费的插件,但是如果我可以通过添加一些代码来做到这一点,那可能会更容易。
该复选框必须是完成购买试用版所必需的。
希望有人对如何做到这一点有所了解。期待您的答复!
当产品变体启用“试用版”时,将在结帐页面上添加一个新复选框
woocommerce_save_product_variation
不应该包含foreach循环,该函数的第二个参数已经包含一个计数器$i
通常,复选框的问题也应解决
function add_to_variation_option( $loop, $variation_data, $variation){
$is_trial = get_post_meta( $variation->ID, '_trialversion', true);
if ( $is_trial == 'yes' ) {
$is_trial = 'checked';
} else {
$is_trial = '';
}
?>
<label class="tips" data-tip="<?php esc_attr_e( 'Enable this option to make as a trial version', 'woocommerce' ); ?>">
<?php esc_html_e( 'Trial Version?', 'woocommerce' ); ?>
<input type="checkbox" class="checkbox variable_is_trial_version" name="_trialversion[<?php echo esc_attr( $loop ); ?>]"<?php echo $is_trial;?>/>
</label>
<?php
}
add_action('woocommerce_variation_options', 'add_to_variation_option', 10, 3);
function save_trialversion_option_fields( $variation_id, $i ) {
if ( !empty($_POST['_trialversion']) && !empty( $_POST['_trialversion'][$i] ) ) {
update_post_meta( $variation_id, '_trialversion', 'yes' );
} else {
update_post_meta( $variation_id, '_trialversion', 'no' );
}
}
add_action( 'woocommerce_save_product_variation', 'save_trialversion_option_fields', 10, 2 );
/**
* Add checkbox field to the checkout
**/
function my_custom_checkout_field( $checkout ) {
// Get $product object from Cart object
$cart = WC()->cart->get_cart();
foreach( $cart as $cart_item ) {
// The WC_Product object
$product = wc_get_product( $cart_item['product_id'] );
// Checks the product type, 'variable', returns boolean
if ( $product->is_type( 'variable' ) ) {
// Get variation id
$variation_id = $cart_item['data']->get_id();
// Get post meta
$trialversion = get_post_meta( $variation_id, '_trialversion', true);
// Found
if ( $trialversion == 'yes' ) {
$trialversion = 'found';
// Break loop
break;
}
}
}
// Found
if ( isset($trialversion) && $trialversion == 'found' ) {
echo '<div id="my-new-field">';
woocommerce_form_field( 'my_checkbox', array(
'type' => 'checkbox',
'class' => array('input-checkbox'),
'label' => __('I agree'),
'required' => true,
), $checkout->get_value( 'my_checkbox' ));
echo '</div>';
}
}
add_action('woocommerce_after_order_notes', 'my_custom_checkout_field', 10, 1 );
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句