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

WooCommerce邮件通知场景下is_wc_endpoint_url()的替代方案

问题根源

is_wc_endpoint_url() 仅用于检测当前访问的是否为WooCommerce前端端点页面(如我的账户、订单详情页),向客户发送订单邮件的触发逻辑位于后台/定时任务上下文,不属于前端端点请求,因此原判断逻辑失效。

解决方案

替换原有的端点判断逻辑,改用did_action('woocommerce_email_before_order_table')检测当前是否处于订单邮件渲染上下文,该判断对管理员和客户邮件均生效。


修改后:新增订单项元数据代码

function action_woocommerce_order_item_meta_start( $item_id, $item, $order, $plain_text ) {
    // 仅在邮件通知场景、且为商品订单项时执行
    if ( did_action( 'woocommerce_email_before_order_table' ) && $item->is_type('line_item') ) {
        echo '<ul class="wc-item-meta"><li><strong class="wc-item-meta-label">Label</strong><p>Value order id = ' . $order->get_id() . '</p></li></ul>';
    }
}
add_action( 'woocommerce_order_item_meta_start', 'action_woocommerce_order_item_meta_start', 10, 4 );

修改点:将原!is_wc_endpoint_url()判断替换为did_action( 'woocommerce_email_before_order_table' ),确保仅在渲染邮件内容时输出自定义元数据。


修改后:修改订单项元数据代码

function filter_woocommerce_order_item_get_formatted_meta_data( $formatted_meta, $item ) {
    // 非邮件通知场景直接返回原数据
    if ( ! did_action( 'woocommerce_email_before_order_table' ) )
        return $formatted_meta;

    foreach ( $formatted_meta as $key => $meta ) {
        $formatted_meta[$key]->display_key = 'new key';
        $formatted_meta[$key]->display_value = 'new value';
    }
    
    return $formatted_meta;
}
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'filter_woocommerce_order_item_get_formatted_meta_data', 10, 2 );

修改点:将原is_admin() || is_wc_endpoint_url()判断替换为!did_action( 'woocommerce_email_before_order_table' ),仅在邮件渲染场景下修改元数据内容。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 04:36:05