将WooCommerce中'on backorder'替换为产品自定义字段值
替换WooCommerce预订产品的"Available on backorder"文本为自定义字段内容
没问题,这个需求完全可以实现!你之前用统一文本替换的思路是对的,只需要调整代码来读取每个产品的自定义字段值就行,具体步骤如下:
1. 给产品添加自定义字段
首先你需要给每个需要自定义交货周期的产品添加专属自定义字段:
- 打开产品编辑页面,点击右上角的屏幕选项,勾选「自定义字段」;
- 在页面底部的自定义字段区域,点击「添加自定义字段」;
- 输入字段名称(键):比如
lead_time(这个名称要记好,后面代码里会用到),然后输入字段值:比如Approx lead time: 2-4 working weeks; - 点击「添加自定义字段」保存。
如果觉得原生自定义字段操作麻烦,也可以用Advanced Custom Fields插件创建一个专门的文本字段,设置为仅在产品类型下显示,操作更直观。
2. 修改过滤函数读取自定义字段
替换你之前的代码,用下面这段实现个性化文本替换:
add_filter( 'woocommerce_get_availability', 'custom_backorder_lead_time_text', 10, 2 ); function custom_backorder_lead_time_text( $availability, $product ) { // 仅处理允许预订的产品 if ( $product->is_on_backorder( 1 ) ) { // 获取产品的自定义字段值,这里的'lead_time'要和你设置的字段键完全一致 $lead_time = get_post_meta( $product->get_id(), 'lead_time', true ); // 如果自定义字段有值,就替换预订文本;没有值的话保留默认文本 if ( ! empty( $lead_time ) ) { $availability['availability'] = str_replace( 'Available on backorder', $lead_time, $availability['availability'] ); } // 如果你想给没设置字段的产品统一一个默认文本,可以开启下面的else分支: // else { // $availability['availability'] = str_replace( 'Available on backorder', '默认交货周期:1-3工作日', $availability['availability'] ); // } } return $availability; }
代码说明:
- 我们用到了过滤函数的第二个参数
$product,这样就能精准获取当前产品的自定义字段; get_post_meta()函数用来读取产品的自定义字段值,注意字段键要和你设置的完全匹配(大小写敏感);- 先判断产品是否处于允许预订状态,再替换文本,避免影响正常在售的产品;
- 预留了默认文本的分支,你可以根据需求自由开启。
3. 测试效果
把代码添加到你的主题functions.php文件(建议用子主题,避免主题更新丢失代码),或者用自定义代码插件(比如Code Snippets)添加。然后编辑产品设置好自定义字段,刷新产品页面就能看到对应的个性化交货周期文本了。
如果遇到问题,先检查自定义字段的键名是否和代码里的lead_time完全一致,或者确认产品确实设置为「Allow backorders」状态。
内容的提问来源于stack exchange,提问作者Josh Dyas
相关产品推荐
相关产品推荐

