将产品/可下载选项添加到各个产品变型

时间:2020-04-02 08:48:24

标签: wordpress woocommerce

我在商店中有一堆可下载的产品,所有产品都有不同的变体。其中之一是该产品的试用版,我希望能够相应地进行标记。 设置不同的变体时,可以在WooCommerce中分别为每个变体设置“可下载”,“虚拟”等。 我想添加的是该变体本身而不是常规产品中的另一个复选框([试用版),但我找不到添加该对象的正确位置。

这是经过反复试验后我尝试过的方法:

add_filter( 'product_type_options', 'add_trialversion_product_option' );
function add_trialversion_product_option( $product_type_options ) 
{
    $product_type_options['trialversion'] = array(
        'id'            => '_trialversion',
        'wrapper_class' => 'show_if_variable',
        'label'         => __( 'Trial Version', 'woocommerce' ),
        'description'   => __( '', 'woocommerce' ),
        'default'       => 'no'
    );
    return $product_type_options;
}


add_action( 'woocommerce_save_product_variation', 'save_trialversion_option_fields'  );
function save_trialversion_option_fields( $post_id ) 
{
    $is_trialversion = isset( $_POST['_trialversion'] ) ? 'yes' : 'no';
    update_post_meta( $post_id, '_trialversion', $is_trialversion );
}

虽然这通常会在变量产品中添加“试用版”复选框,但这并不是我想要的,因为我想将产品的某些变体设置为试用版,而将某些变体设置为普通版

我希望我只是缺少一些明显的东西,但是由于我不是woocommerce专家,因此在查找它方面遇到了一些麻烦。

感谢您的帮助:)

我在这里添加了图片,以防万一我想在哪里添加复选框: woocommerce screenshot

1 个答案:

答案 0 :(得分:3)

这将适用于每个对象,并添加到所需的位置,因为变体选项与您要过滤的位置不同。

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' );
        }
    }    
}
相关问题