如何修改WordPress主题按钮模块PHP代码以支持HTML输入
我太懂你这糟心的情况了——想在按钮文本里加带图片的HTML代码,结果前端直接把标签转成纯文本显示,完全达不到预期效果。试了wp_kses没起效,那咱们就从你给出的button.php代码入手,一步步搞定它。
先看你提到的关键代码片段:
$button_text = $this->props['button_text']; // 以及传递给render_button的这行 'button_text' => $button_text,
问题大概率出在两个环节:要么是$this->props['button_text']本身已经被主题做了转义处理,要么是render_button方法里对button_text用了esc_html()这类强制转义的函数。咱们分两步修改:
第一步:确保获取的按钮文本保留HTML格式
把获取button_text的代码改成这样:
$button_text = wp_kses_post( $this->props['button_text'] );
wp_kses_post是WordPress专门为处理文章类HTML设计的函数,它会自动保留<p>、<a>、<img>这类安全的HTML标签,同时过滤掉恶意代码,比直接去掉转义要安全得多。之前你用wp_kses没效果,大概率是没传入正确的允许标签集合,而wp_kses_post已经预设了适合前端显示的标签列表,不用自己额外配置。
第二步:检查并修改render_button方法里的转义逻辑
接下来你需要找到主题里的render_button函数(应该和当前代码在同一个类里,或者在模块的基类文件中),定位它处理button_text的地方。比如如果里面有类似这样的代码:
$button_content = esc_html( $button_text );
或者在拼接按钮HTML时用esc_html()包裹了$button_text,那必须把esc_html()换成wp_kses_post(),比如:
$button_content = wp_kses_post( $button_text );
因为esc_html()会把所有HTML标签转义成实体字符,这就是你看到代码被转义的直接原因,换成wp_kses_post()就能让合法的HTML正常渲染了。
重要提醒
修改主题核心文件前,一定要用子主题!不然主题更新后你的修改会全部丢失。如果找不到render_button的位置,可以在主题文件夹里用搜索工具查找这个函数名,一般能很快定位到。
内容的提问来源于stack exchange,提问作者MindPhuq

