如何让WooCommerce Product Subtitle插件支持HTML标签输入?
嘿,这个需求我之前帮客户搞定过,给你两个靠谱的方案,既能让商品副标题输入框支持HTML,又尽量避免插件更新带来的问题:
方案1:替换默认的输入过滤规则
WooCommerce Product Subtitle插件默认会用sanitize_text_field()函数过滤输入内容,这个函数会把所有HTML标签都清除掉。我们可以通过钩子替换这个过滤逻辑,让它允许安全的HTML标签:
把下面的代码添加到你的主题functions.php文件里,或者自定义的功能插件中:
// 移除插件默认的副标题输入过滤 remove_filter( 'woocommerce_product_subtitle', 'sanitize_text_field' ); // 替换为允许安全HTML的过滤规则(wp_kses_post会保留常见的安全标签) add_filter( 'woocommerce_product_subtitle', 'wp_kses_post' );
方案2:自定义副标题输出逻辑(更稳妥)
有时候就算输入允许HTML,插件输出的时候可能会用esc_html()转义内容,导致HTML变成纯文本显示。这时候我们可以替换插件的输出函数,直接输出带HTML的内容:
同样把代码加到主题functions.php或自定义插件里:
// 移除插件默认的副标题输出动作 remove_action( 'woocommerce_single_product_summary', 'woocommerce_product_subtitle_display', 15 ); // 添加自定义的副标题输出函数 add_action( 'woocommerce_single_product_summary', 'custom_product_subtitle_display', 15 ); function custom_product_subtitle_display() { global $product; // 获取保存的副标题内容 $subtitle = get_post_meta( $product->get_id(), '_product_subtitle', true ); if ( ! empty( $subtitle ) ) { // 输出带HTML的副标题,用wp_kses_post保证安全 echo '<p class="product-subtitle">' . wp_kses_post( $subtitle ) . '</p>'; } }
重要注意事项
- 安全第一:尽量用
wp_kses_post()而不是直接输出原始内容,这个函数会自动过滤掉危险的HTML标签(比如<script>),防止XSS攻击。如果你需要允许特殊标签,可以参考wp_kses()函数自定义允许的标签列表。 - 避免插件更新失效:不要直接修改插件的核心文件,否则插件更新后你的改动会丢失。上面的方案都是用钩子实现,属于“无侵入式”修改。
- 权限控制:如果你的网站有多个编辑用户,记得限制只有管理员角色能修改商品副标题,避免恶意用户插入不安全的代码。
内容的提问来源于stack exchange,提问作者Natasja M
相关产品推荐
相关产品推荐

