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

自定义SMS通知插件导致WooCommerce订单后台商品图片不显示

问题原因排查

核心触发问题

你代码中注册的地址过滤器参数不匹配,是导致页面HTML结构被破坏、商品图片加载失败的直接原因:

  • 你注册过滤器时指定接收3个参数:
add_filter( 'woocommerce_order_formatted_shipping_address', 'filter_woocommerce_order_formatted_shipping_address', 10, 3 ); 
add_filter( 'woocommerce_order_formatted_billing_address', 'filter_woocommerce_order_formatted_shipping_address', 10, 3 ); 

但对应的回调函数只定义了2个入参:

function filter_woocommerce_order_formatted_shipping_address( $array, $order )

PHP会抛出「缺少参数3」的警告,若站点开启了错误显示,警告内容会直接插入到页面HTML中,破坏商品图片标签结构,导致图片无法加载。

其他连带问题

  • sms_notif_filter_phone函数逻辑错误:你先将手机号强转为int类型,再用strpos查找字符串前缀,strpos要求入参为字符串类型,会抛出参数类型错误的PHP警告,进一步污染页面输出。
  • 自定义订单状态注册钩子不规范:wc_register_post_statuses是动作钩子回调,应该用add_action挂载到init,你误用了add_filter,虽然不直接触发错误,但属于不规范用法。

修复方案

  1. 修正地址过滤器参数,二选一即可:
  • 方案1:给回调函数补全第三个可选参数
function filter_woocommerce_order_formatted_shipping_address( $array, $order, $raw_address = null ) {
  • 方案2:将过滤器的参数接收数量改为2
add_filter( 'woocommerce_order_formatted_shipping_address', 'filter_woocommerce_order_formatted_shipping_address', 10, 2 ); 
add_filter( 'woocommerce_order_formatted_billing_address', 'filter_woocommerce_order_formatted_shipping_address', 10, 2 ); 
  1. 修正手机号过滤函数逻辑:
function sms_notif_filter_phone($phone_number) {
    // 先转字符串处理前缀
    $phone_str = trim((string)$phone_number);
    if (strpos($phone_str, '+216') === 0) {
        $phone_str = substr($phone_str, 4);
    } elseif (strpos($phone_str, '216') === 0) {
        $phone_str = substr($phone_str, 3);
    }
    // 清除非数字字符
    $phone_str = preg_replace('/[^0-9]/', '', $phone_str);
    return strlen($phone_str) === 8 ? (int)$phone_str : null;
}
  1. 修正订单状态注册钩子类型:
add_action( 'init', 'wc_register_post_statuses');

修改完成后清空缓存重新访问订单详情页即可恢复商品图片加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 10:09:06