将产品/可下载选项添加到单个产品变体

Posted

技术标签:

【中文标题】将产品/可下载选项添加到单个产品变体【英文标题】:Add product/downloadable option to individual product variants 【发布时间】:2020-07-14 04:31:31 【问题描述】:

我在商店里有一堆可下载的产品,它们都有不同的变体。其中之一是该产品的试用版,我希望能够相应地标记它。 在设置不同的变体时,可以在 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】:

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

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' );
        
        

【讨论】:

这很好用,非常感谢。我现在意识到另一个问题,但我不确定这是一个后续问题还是完全不同的问题:WordPress 插件“Germanized”有一个选项可以在结帐期间显示复选框,并附有条件。其中之一是数字下载类型,但我无法在那里找到新的“试用版”设置。还有其他地方我必须配置它以使“试用版”与“可下载”、“虚拟”等一起显示吗? 您绝对可以在结账时添加一些东西。不过,您所问的问题听起来像是 SO 的另一个问题。

以上是关于将产品/可下载选项添加到单个产品变体的主要内容,如果未能解决你的问题,请参考以下文章

添加将更改 Woocommerce 简单产品中价格的选择字段

在常规单个产品页面的自定义选项卡中显示“相关产品”

在WooCommerce中产品缺货时更改单个添加到购物车文本

WooCommerce 产品循环中添加 Ajax 选项的复选框添加到购物车

在Woocommerce中添加并保存管理产品变体自定义字段

使用 WooCommerce 选择变体时更新产品页面上的价格