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

WordPress中wc_display_item_meta自动生成p标签无法移除/替换问题咨询

解决方案

wc_display_item_meta 默认输出的字段值外层自动包裹p标签,而Outlook桌面端采用Word作为渲染引擎,对类选择器、非行内样式的支持度极低,调整HTML结构是唯一能保证全邮件客户端兼容的方案,以下是三种可落地的实现方式:

方案1:仅修改当前quote-table.php文件输出(不影响其他模块)

将原有else分支的代码替换为以下内容,先获取输出的HTML字符串再替换p标签为span标签:

<div class="subtitle">
    <?php
    if ( $im ) {
        $im->display();
    } else {
        // 第三个参数设为false不直接输出,返回HTML字符串
        $meta_html = wc_display_item_meta( $item, [], false );
        // 替换p标签为span标签
        $meta_html = str_replace( ['<p ', '</p>'], ['<span ', '</span>'], $meta_html );
        echo $meta_html;
    }
    ?>
</div>

方案2:全局过滤输出(所有调用wc_display_item_meta的场景都会生效)

将以下代码添加到主题functions.php文件或自定义插件的主文件中,无需修改原有业务代码:

add_filter( 'woocommerce_display_item_meta', function( $html, $item, $args ) {
    // 可自行添加判断条件,仅在邮件场景下生效
    return str_replace( ['<p ', '</p>'], ['<span ', '</span>'], $html );
}, 10, 3 );

方案3:手动输出元数据(完全自定义结构,邮件兼容性最优)

完全弃用wc_display_item_meta的自动输出逻辑,自己控制HTML结构和行内样式,彻底避免多余标签生成:

<div class="subtitle">
    <?php
    if ( $im ) {
        $im->display();
    } else {
        $meta_list = $item->get_formatted_meta_data();
        if ( ! empty( $meta_list ) ) :
    ?>
        <ul style="font-size:small;margin:0;padding:0;list-style:none">
            <?php foreach ( $meta_list as $meta ) : ?>
            <li style="margin:0;padding:0">
                <strong><?php echo esc_html( $meta->key ); ?>:</strong>
                <span style="margin:0;color:#8d8d8d;"><?php echo wp_kses_post( $meta->value ); ?></span>
            </li>
            <?php endforeach; ?>
        </ul>
    <?php 
        endif;
    }
    ?>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 10:18:03