get_post_meta在WooCommerce购物车页面不显示的问题修复
WooCommerce购物车自定义字段不显示修复
原代码无法正常输出自定义字段核心是ID获取方式错误,以下是可直接使用的修正版本:
原代码问题点
- 直接调用
$product->ID获取产品ID不符合WooCommerce开发规范,购物车内存在可变产品变体时大概率拿不到正确的ID,导致get_post_meta读不到对应字段值 - 已绑定
woocommerce_before_cart_table钩子(该钩子仅在购物车页触发),循环内重复判断is_cart()属于冗余逻辑 - 没有做空值判断,未设置自定义字段的商品会输出多余空标签打乱布局
- 输出自定义字段未做转义,存在安全隐患和布局错乱风险
修正后完整代码
function display_fork_lift_msg_single_product() { foreach ( WC()->cart->get_cart() as $cart_item ) { $product = $cart_item['data']; if ( empty( $product ) ) continue; // 兼容可变产品变体,优先读取父产品存储的自定义字段 $target_id = $product->is_type('variation') ? $product->get_parent_id() : $product->get_id(); $fork_lift = get_post_meta( $target_id, '_shipping_notes', true ); if ( ! empty( $fork_lift ) ) { echo $product->get_image() . '<br>' . esc_html( $fork_lift ); } } } add_action('woocommerce_before_cart_table', 'display_fork_lift_msg_single_product', 10);
代码说明
- 用WooCommerce官方要求的
get_id()方法获取产品ID,从根源解决ID读错问题 - 自动兼容可变商品场景:如果购物车内是可变产品的规格变体,会自动读取父商品下配置的
_shipping_notes字段,不需要给每个变体单独配置字段 - 只有当商品配置了配送备注字段时才输出对应商品图和备注,无备注的商品不会输出多余内容
- 对备注内容做HTML转义,避免特殊符号破坏页面结构
内容的提问来源于stack exchange,提问作者Joel Alemaida
相关产品推荐
相关产品推荐

