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

WooCommerce结账页面基于商品价格使用if语句的实现及代码位置咨询

解决WooCommerce结账页商品价格条件判断及文件位置问题

嘿,我来帮你搞定这个问题——既给你写好可用的代码,也把WordPress/WooCommerce的文件逻辑讲清楚,避免你再困惑。

一、编写单个商品价格的条件判断代码

首先,推荐用WooCommerce的钩子(filter)来实现,这种方式不用修改核心文件,主题更新也不会丢代码。你可以用woocommerce_cart_item_price钩子,它会作用于购物车和结账页的每个商品价格区域,完美符合你的需求。

直接用这段代码:

add_filter( 'woocommerce_cart_item_price', 'add_custom_text_based_on_item_price', 10, 3 );
function add_custom_text_based_on_item_price( $price_html, $cart_item, $cart_item_key ) {
    // 获取当前商品的单价(如果需要含税价格,换成get_price_including_tax())
    $_this_item_price = $cart_item['data']->get_price();
    
    // 你的条件判断逻辑,这里可以自定义文本样式
    if ( $_this_item_price > 30 ) {
        $custom_text = '<br><span style="color: green; font-size: 0.9em;">blah blah blah</span>';
    } else {
        $custom_text = '<br><span style="color: #d9534f; font-size: 0.9em;">something else</span>';
    }
    
    // 把自定义文本追加到原有价格后面
    return $price_html . $custom_text;
}

这段代码会在每个商品的价格下方,根据价格显示对应的自定义文本,完全贴合你要的效果。

二、代码该放哪里?绝对别碰核心文件!

WordPress的最佳实践是用子主题的functions.php或者自定义插件:

  • 子主题functions.php:登录后台→外观→主题文件编辑器,找到当前激活的子主题的functions.php,把代码粘贴到文件最末尾(注意不要破坏原有代码,比如不要放在<?php标签外面)。
  • 自定义插件:如果不想依赖主题,新建一个PHP文件(比如wc-custom-price-text.php),开头加上插件声明:
<?php
/*
Plugin Name: WooCommerce 价格自定义文本
Description: 在结账页根据商品价格显示不同文本
Version: 1.0
Author: 你的名字
*/

然后把上面的钩子代码放进去,上传到wp-content/plugins/目录,后台激活插件就行。

三、帮你理清WooCommerce模板结构(解决你的困惑)

如果你非要修改模板文件(不推荐,钩子更安全),结账页的商品列表模板路径是:

  • WooCommerce核心模板:wp-content/plugins/woocommerce/templates/checkout/review-order.php
  • 但你必须复制这个文件到子主题目录,路径是wp-content/themes/你的子主题/woocommerce/checkout/review-order.php,修改子主题里的文件才不会被插件更新覆盖。

在这个文件里,找到循环输出商品的代码块,大概是这样的:

<?php foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) :
    $_product = apply_filters( 'woocommerce_cart_item_product', $cart_item['data'], $cart_item, $cart_item_key );
    if ( $_product && $_product->exists() && $cart_item['quantity'] > 0 && apply_filters( 'woocommerce_checkout_cart_item_visible', true, $cart_item, $cart_item_key ) ) :
?>
    <tr class="<?php echo esc_attr( apply_filters( 'woocommerce_cart_item_class', 'cart_item', $cart_item, $cart_item_key ) ); ?>">
        <td class="product-name">
            <?php echo apply_filters( 'woocommerce_cart_item_name', $_product->get_name(), $cart_item, $cart_item_key ) . '&nbsp;'; ?>
            <?php echo apply_filters( 'woocommerce_checkout_cart_item_quantity', ' <strong class="product-quantity">' . sprintf( '&times;&nbsp;%s', $cart_item['quantity'] ) . '</strong>', $cart_item, $cart_item_key ); ?>
            <?php echo wc_get_formatted_cart_item_data( $cart_item ); ?>
        </td>
        <td class="product-total">
            <?php echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key ); ?>
        </td>
    </tr>
<?php endif; endforeach; ?>

你可以在product-total的td里插入你的判断:

<td class="product-total">
    <?php 
    $item_price = $_product->get_price();
    echo apply_filters( 'woocommerce_cart_item_subtotal', WC()->cart->get_product_subtotal( $_product, $cart_item['quantity'] ), $cart_item, $cart_item_key );
    
    // 你的条件判断
    if ( $item_price > 30 ) {
        echo '<br><span>blah blah blah</span>';
    } else {
        echo '<br><span>something else</span>';
    }
    ?>
</td>

但再次强调,优先用钩子的方式,更灵活也更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:04:06