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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:51:45