php - 获取 WooCommerce 可变产品单页中选定的产品变体 ID

标签 php jquery wordpress woocommerce product-variations

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

enter image description here

这些变体只是:30B 30C 30D,而不是分为:30 B C D

我想弄清楚的是:如何获取每个产品变体的运输类别?

我的购物车页面上有类似的内容,但我不知道变体 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?

最佳答案

在可变产品的 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+ 下进行了测试并且可以工作。

So on this base you can make your own function to match your requirements (as you don't give anymore necessary details or code).

一些相关答案示例用法(使用 jQuery 和 Woocommerce 单一产品页面):

关于php - 获取 WooCommerce 可变产品单页中选定的产品变体 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862960/

相关文章:

php - Laravel 导入程序随着时间的推移会变慢

一个文件夹中的 PHP 文件正在执行,但在其他几个文件夹中没有执行

javascript - WooCommerce - 如何禁用属性选项菜单,直到选择上面的菜单?

javascript - 将外部导航栏加载到多个 html 页面中

php - WP Alchemy Meta Box 功能导致 wp-admin 在数据库传输后运行速度极其缓慢

html - 如何使下拉菜单项居中?

php - Wordpress 帖子类别名称链接

php - 将新表格行推送到浏览器的最佳方式是什么?

javascript - ACH Stripe 银行账户验证

javascript - 如何使用 JavaScript 读取 JSON 文件