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 ) . ' '; ?> <?php echo apply_filters( 'woocommerce_checkout_cart_item_quantity', ' <strong class="product-quantity">' . sprintf( '× %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
相关产品推荐
相关产品推荐

