Woocommerce 产品变化价目表

Posted

技术标签:

【中文标题】Woocommerce 产品变化价目表【英文标题】:Woocommerce product variation price list 【发布时间】:2022-01-22 00:11:14 【问题描述】:

我试图弄清楚如何在单个产品页面中将所有变体价格显示为文本。

例如,如果产品有 5 个不同的价格,1 - 500、2 - 900、3 - 2100、4 - 2500、5 - 3000 我希望它在所有产品页面上以文本形式显示。

这样:

变化 1 - 500 2 - 900。

现在我手动执行此操作,将它们全部写下来,这样用户就不必在下拉菜单中向下滚动以查看价格,但我希望在更改价格时自动完成,因此我不必更改此文本每次。我尝试了不同的钩子,但找不到合适的。

我试过这个,但无法使用钩子并在产品页面中显示它

add_filter( 'woocommerce_get_price_html', 'custom_price_format', 10, 2 );
add_filter( 'woocommerce_variable_price_html', 'custom_price_format', 10, 2 );
function custom_price_format( $price, $product ) 

    // 1. Variable products
    if( $product->is_type('variable') )

        // Searching for the default variation
        $default_attributes = $product->get_default_attributes();
        // Loop through available variations
        foreach($product->get_available_variations() as $variation)
            $found = true; // Initializing
            // Loop through variation attributes
            foreach( $variation['attributes'] as $key => $value )
                $taxonomy = str_replace( 'attribute_', '', $key );
                // Searching for a matching variation as default
                if( isset($default_attributes[$taxonomy]) && $default_attributes[$taxonomy] != $value )
                    $found = false;
                    break;
                
            
            // When it's found we set it and we stop the main loop
            if( $found ) 
                $default_variaton = $variation;
                break;
             // If not we continue
            else 
                continue;
            
        
        // Get the default variation prices or if not set the variable product min prices
        $regular_price = isset($default_variaton) ? $default_variaton['display_price']: $product->get_variation_regular_price( 'min', true );
        $sale_price = isset($default_variaton) ? $default_variaton['display_regular_price']: $product->get_variation_sale_price( 'min', true );
    
    // 2. Other products types
    else 
        $regular_price = $product->get_regular_price();
        $sale_price    = $product->get_sale_price();
    

    // Formatting the price
    if ( $regular_price !== $sale_price && $product->is_on_sale()) 
        // Percentage calculation and text
        $percentage = round( ( $regular_price - $sale_price ) / $regular_price * 100 ).'%';
        $percentage_txt = __(' Save', 'woocommerce' ).' '.$percentage;

        $price = '<del>' . wc_price($regular_price) . '</del> <ins>' . wc_price($sale_price) . $percentage_txt . '</ins>';
    
    return $price;

【问题讨论】:

【参考方案1】:

将以下函数放在您的 functions.php 中。您可以将 get_price_html() 替换为 $product-&gt;get_price();$product-&gt;get_regular_price(); $product-&gt;get_sale_price();,具体取决于您希望显示数据的方式。

function list_variation_prices() 
    global $product;
    if($product->get_type() === 'variable'):
        $variations = $product->get_children();
        if($variations):
            echo '<ul>';
            foreach($variations as $variation):
                $vproduct = wc_get_product($variation);
                echo '<li>'.$vproduct->get_price_html().'</li>';
            endforeach;
            echo '</ul>';
        endif;
    endif;

/** Change priority to change where you want to show it. Default priorities
     * @hooked woocommerce_template_single_title - 5
     * @hooked woocommerce_template_single_rating - 10
     * @hooked woocommerce_template_single_price - 10
     * @hooked woocommerce_template_single_excerpt - 20
     * @hooked woocommerce_template_single_add_to_cart - 30
     * @hooked woocommerce_template_single_meta - 40
     * @hooked woocommerce_template_single_sharing - 50
     * @hooked WC_Structured_Data::generate_product_data() - 60
*/
add_action('woocommerce_single_product_summary','list_variation_prices',25);

【讨论】:

看起来不错。我改变了 add_action('woocommerce_short_description','list_variation_prices',25);在简短的描述中显示它。有用。但是它会以某种方式重复,所以我将价格设置了 14 次(anonfiles.com/z2qd56ydwf/vcccv_png),我可以在价格之前添加金额吗?现在我确定所有价格,前 50 美元 100 美元我可以添加,所以我在前 2 件 - 50 美元 4 件之前 - 100 美元 我已经在干净的店面主题上对此进行了测试,没有任何问题。你能 var_dump($variatons) 看看它返回了多少个变体 id 吗?价格前的金额是什么意思?

以上是关于Woocommerce 产品变化价目表的主要内容,如果未能解决你的问题,请参考以下文章

如何根据月份增加 woocommerce 产品变化价格

更新 WooCommerce 可变产品变化库存数量问题

使用 phpmyadmin 在 Woocommerce 中按产品变化报告特定产品

woocommerce 自定义产品类型 - 使变化成为可能

用 WooCommerce 3 中选择的变化价格替换可变价格范围

php 在商店页面上显示WooCommerce产品变化下拉列表