如何在WooCommerce商品标题中展示限量版画的当前编号?
解决WooCommerce限量版画标题显示当前编号的方案
嘿,这个需求特别贴合艺术画廊的场景,我刚好有一套可行的实现思路,你可以跟着下面的步骤来操作:
核心思路
我们需要通过WooCommerce的钩子来修改商品标题,逻辑是:获取该版画已售出的数量,计算当前可购买的编号(已售数+1),然后把这个编号拼接在原标题后面。如果需要支持每个商品单独设置限量数,还可以添加自定义字段来实现。
基础版实现(无限量设置)
先从最简单的版本开始,直接在商品标题后追加当前版画编号。把下面的代码添加到你的主题functions.php文件或者自定义插件中:
add_filter( 'woocommerce_product_title', 'custom_edition_number_product_title', 10, 2 ); function custom_edition_number_product_title( $title, $product ) { // 只针对简单产品生效(如果是可变产品,需要单独调整逻辑) if ( ! $product->is_type('simple') ) { return $title; } // 获取该商品已售出的总数量 $sold_quantity = $product->get_total_sales(); // 计算当前可购买的版画编号 $current_edition = $sold_quantity + 1; // 拼接新标题 $updated_title = $title . ' - 第' . $current_edition . '幅'; return $updated_title; }
添加后,当你卖出20幅时,商品标题就会自动变成「版画名称 - 第21幅」啦。
进阶版实现(支持限量设置)
如果需要给每幅版画单独设置限量数,比如有的是100幅,有的是50幅,还能在售罄时显示提示,那可以添加自定义字段来实现:
第一步:添加限量数自定义字段
这段代码会在商品编辑页的「常规」选项卡下添加一个“版画限量数”的输入框:
// 在商品编辑页添加限量数字段 add_action( 'woocommerce_product_options_general_product_data', 'add_edition_limit_field' ); function add_edition_limit_field() { woocommerce_wp_text_input( array( 'id' => '_edition_limit', 'label' => '版画限量数', 'type' => 'number', 'custom_attributes' => array( 'min' => '1', 'step' => '1' ), 'desc_tip' => true, 'description' => '设置该版画的总限量数量,比如100' ) ); } // 保存限量数字段的值 add_action( 'woocommerce_process_product_meta', 'save_edition_limit_field' ); function save_edition_limit_field( $post_id ) { $edition_limit = isset( $_POST['_edition_limit'] ) ? absint( $_POST['_edition_limit'] ) : ''; update_post_meta( $post_id, '_edition_limit', $edition_limit ); }
第二步:修改标题逻辑,加入限量判断
替换之前的标题过滤代码,用下面的版本:
add_filter( 'woocommerce_product_title', 'custom_edition_number_with_limit_product_title', 10, 2 ); function custom_edition_number_with_limit_product_title( $title, $product ) { if ( ! $product->is_type('simple') ) { return $title; } $sold_quantity = $product->get_total_sales(); $edition_limit = get_post_meta( $product->get_id(), '_edition_limit', true ); // 如果没设置限量数,直接显示当前编号 if ( empty( $edition_limit ) ) { $current_edition = $sold_quantity + 1; return $title . ' - 第' . $current_edition . '幅'; } // 如果已售达到限量,显示售罄提示 if ( $sold_quantity >= $edition_limit ) { return $title . ' - 已售罄'; } // 正常状态下,显示编号+总限量 $current_edition = $sold_quantity + 1; return $title . ' - 第' . $current_edition . '幅(共' . $edition_limit . '幅)'; }
注意事项
- 代码不要直接修改WooCommerce核心文件,放在主题的
functions.php或者自定义插件里更安全,避免更新主题/插件时丢失。 - 如果你的商品是可变产品(比如不同尺寸的版画),需要调整代码逻辑,因为可变产品的销量是按变体统计的,你可能需要针对每个变体单独处理编号。
- 测试时可以模拟几次购买,看看标题是否正确更新,售罄状态是否正常显示。
内容的提问来源于stack exchange,提问作者fafchook
相关产品推荐
相关产品推荐

