wordpress 在WooCommerce可变产品单页中获取所选的产品变化ID

kmbjn2e3  于 2022-11-22  发布在  WordPress
关注(0)|答案(1)|浏览(273)

对于我的WooCommerce可变产品,我在单个产品页面上实现了一个自定义尺寸选择器,并在一个表中有这些尺寸:

这些变化只是:30B30C30D,而不是拆分为:30BCD
我想弄清楚的是:如何获取每个产品变体的运输类别?
我在购物车页面上有类似的内容,但我不知道变体ID是什么,也不知道如何从单个产品页面获得它:

$product_id = ( 0 != $cart_item['variation_id'] ) ? $cart_item['variation_id'] : $cart_item['product_id'];
// need the variation id for the above to be able to do the rest:

$product_shipping_classes = get_the_terms( $product_id, 'product_shipping_class' );
$product_shipping_class_name = ( $product_shipping_classes && ! is_wp_error( $product_shipping_classes ) ) ? current( $product_shipping_classes )->name : '';

一旦我有了变体ID,我就知道该怎么做了。我只是不知道如何获得它,以便完成其余的工作。我唯一需要获得的东西是产品ID和变体的slug(在这个页面上还有一个颜色属性)。
但是,我已经给了产品一个默认的变体来使用(所以设置了隐藏的variation_id)。
也许需要首先获取该值以了解所选颜色的id,然后才能获取其他颜色的变体id?

t9eec4r0

t9eec4r01#

在可变产品的WooCommerce产品单页中,你不能在PHP中获得所选的产品变体,因为它是一个现场活动(客户端,而不是服务器端)。
要做到这一点的方法是使用JavaScript/jQuery来获得它.由于你没有提供任何相关的代码,这个单一的产品页面关于您的可变产品,是不可能的,我给予你一个真实的的工作代码,将完全符合您的需求.
在单个产品页面上获取可变产品的所选变体ID (在本例中,我在“添加到购物车”按钮下方动态显示所选变体ID)

add_action( 'woocommerce_single_product_summary', 'single_product_variable_customization', 3, 0 );
function single_product_variable_customization() {
    global $product;

    // Only for variable products on single product pages
    if ( $product->is_type('variable') && is_product() ) {

    ##  ==>  ==>  Here goes your php code (if needed)  ==>  ==>  ##

    // Passing a variable to javascript
    $string1 = "The selected Variation ID is: ";
    $string2 = "No Variation ID is selected ";
    ?>
    <script>
    jQuery(document).ready(function($) {

        // Initializing
        var myText1 = '<?php echo $string1; ?>', myText2 = '<?php echo $string2; ?>';

        // Get and display the default variation ID after add-to-cart button (initialization)
        if( '' != $('input.variation_id').val() )
            $('div.woocommerce-variation-add-to-cart').after('<div class="selected-variation-id">'+myText1+$('input.variation_id').val()+'</div>');
        else
            $('div.woocommerce-variation-add-to-cart').after('<div class="selected-variation-id">'+myText2+'</div>'); // No ID selected

        console.log($('input.variation_id').val()); // Output in the browser console

        // Get and display the chosen variation ID after add-to-cart button
        $('select').blur( function(){
            if( '' != $('input.variation_id').val() )
                $('div.selected-variation-id').html(myText1+$('input.variation_id').val());
            else
                $('div.selected-variation-id').html(myText2); // No ID selected

            console.log($('input.variation_id').val()); // Output in the browser console
        });
    });
    </script>
    <?php
    }
}
  • 代码在您的活动子主题(或主题)的function.php文件中,也可以在任何插件文件中。*

这段代码是在WooCommerce 3+下测试和工程。
因此,在此基础上,您可以创建自己的函数来满足您的需求(因为您不再给予任何必要的细节或代码)。
一些相关的答案例子用法(与jQuery和Woocommerce单一产品页面):

  • WooCommerce 3中的缺货产品的重命名添加到购物车按钮
  • 在WooCommerce 3中通过选择的变化价格替换可变产品价格
  • 可变产品选择器:获取实时选定值
  • 将所选产品变化数据传递到联系表7查询表中

相关问题