You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取WooCommerce活跃商品变体图片URL并传递至WordPress小工具

问题

我正在尝试将WooCommerce的活跃商品变体信息传递至WordPress小工具。当前小工具中用于显示图片的代码如下:

$product = wc_get_product(get_the_ID());
$artwork_url = wp_get_attachment_url($product->get_image_id());
$unit = get_option('woocommerce_dimension_unit');
$height2 = $product->get_height();
$width2 = $product->get_width();
$height = $height2;
$title = get_the_title();
$price = $product->get_price();
$measurements_display = $widget->dimensions == 1 ? 'WxH' : 'HxW';

其中$artwork_url存在问题:网站前端的变体选项可正常显示对应变体图片,但小工具无法通过该变量获取到活跃变体的图片URL。我尝试过获取缩略图、特色图片等,也定义过$variations、$variable_product等变量,但均未成功,恳请各位提供解决建议。

解决方案

1. 通过会话存储传递活跃变体ID

小工具无法直接感知前端选中的变体,需要先在产品页监听变体选择事件,把选中的变体ID存入会话:

// 产品页添加JS代码,监听变体选择
jQuery(document).ready(function($) {
    $('form.variations_form').on('show_variation', function(event, variation) {
        $.post(ajaxurl, {
            action: 'save_active_variation',
            variation_id: variation.variation_id,
            product_id: variation.product_id
        });
    });
});

在主题的functions.php中添加AJAX处理函数,保存会话:

add_action('wp_ajax_save_active_variation', 'save_active_variation');
add_action('wp_ajax_nopriv_save_active_variation', 'save_active_variation');

function save_active_variation() {
    if(isset($_POST['variation_id']) && isset($_POST['product_id'])) {
        session_start();
        $_SESSION['active_variation_' . $_POST['product_id']] = $_POST['variation_id'];
        wp_die();
    }
}

2. 修改小工具代码读取变体图片

在小工具中先检查会话中的活跃变体ID,再获取对应图片:

$product_id = get_the_ID();
$product = wc_get_product($product_id);

// 默认使用父产品图片
$artwork_url = wp_get_attachment_url($product->get_image_id());
$height2 = $product->get_height();
$width2 = $product->get_width();
$price = $product->get_price();

// 读取会话中的活跃变体
session_start();
$active_variation_id = isset($_SESSION['active_variation_' . $product_id]) ? $_SESSION['active_variation_' . $product_id] : false;

if($active_variation_id && $product->is_type('variable')) {
    $variation = wc_get_product($active_variation_id);
    if($variation && $variation->get_image_id()) {
        $artwork_url = wp_get_attachment_url($variation->get_image_id());
    }
    // 同步变体的尺寸和价格
    $height2 = $variation->get_height();
    $width2 = $variation->get_width();
    $price = $variation->get_price();
}

// 其余代码保持不变
$unit = get_option('woocommerce_dimension_unit');
$height = $height2;
$title = get_the_title();
$measurements_display = $widget->dimensions == 1 ? 'WxH' : 'HxW';

3. 备选方案:通过URL参数传递变体ID

如果会话方式不适用,可在变体选择后修改URL参数:

$('form.variations_form').on('show_variation', function(event, variation) {
    let url = new URL(window.location);
    url.searchParams.set('variation_id', variation.variation_id);
    window.history.replaceState({}, '', url);
});

然后在小工具中读取URL参数:

$active_variation_id = isset($_GET['variation_id']) ? intval($_GET['variation_id']) : false;
// 后续获取变体图片、尺寸的逻辑同会话方案

内容的提问来源于stack exchange,提问作者user3228513

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 02:35:21