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

WordPress问题:category_description过滤<br />及href属性

解决WordPress分类描述HTML标签/属性保存丢失的问题

这个问题我帮不少开发者排查过,核心原因就是WordPress默认会对分类描述的用户输入内容做严格的HTML过滤,像<br />、rel="nofollow"、target="_blank"这类内容,会被默认的wp_kses_post或相关过滤函数清理掉。下面给你几个实用的解决办法:

方法1:允许特定标签与属性(推荐,兼顾安全)

通过过滤器修改WordPress允许的HTML规则,让分类描述保留你需要的标签和属性。把这段代码放到你的子主题functions.php里:

// 为分类描述开放指定HTML标签和属性
add_filter( 'wp_kses_allowed_html', 'custom_allow_category_desc_elements', 10, 2 );
function custom_allow_category_desc_elements( $allowed_tags, $context ) {
    // 仅针对分类描述的上下文生效
    if ( 'category_description' === $context ) {
        // 允许<br>标签(无需属性)
        $allowed_tags['br'] = array();
        // 给a标签添加rel、target属性权限
        if ( isset( $allowed_tags['a'] ) ) {
            $allowed_tags['a']['rel'] = array();
            $allowed_tags['a']['target'] = array();
        }
    }
    return $allowed_tags;
}

// 移除分类描述的默认强过滤规则
remove_filter( 'pre_term_description', 'wp_filter_kses' );
remove_filter( 'term_description', 'wp_kses_data' );

这段代码既保留了WordPress的基础安全过滤,又针对性开放了你需要的内容,适合大多数场景。

方法2:直接自定义分类描述输出逻辑

如果方法1不生效,你可以直接接管分类描述的输出流程,跳过默认过滤:

// 移除默认的分类描述过滤
remove_filter( 'category_description', 'wp_kses_data' );

// 自定义输出函数,按需处理内容
add_filter( 'category_description', 'custom_render_category_desc', 10, 1 );
function custom_render_category_desc( $description ) {
    // 如果你完全信任输入内容,可直接返回原描述
    // 若要兼顾安全,可手动用wp_kses指定允许的标签:
    // return wp_kses( $description, array(
    //     'br' => array(),
    //     'a' => array(
    //         'href' => array(),
    //         'rel' => array(),
    //         'target' => array()
    //     )
    // ) );
    return $description;
}

⚠️ 注意:如果是多用户站点,不建议直接返回原描述,最好保留wp_kses的自定义规则,防止XSS攻击。

方法3:用自定义字段替代(适合复杂场景)

如果不想折腾代码过滤规则,也可以给分类添加自定义字段来存储带HTML的描述:

  1. 安装并启用Advanced Custom Fields插件(或自行开发自定义字段功能)
  2. 给分类添加一个「富文本编辑器」类型的自定义字段(比如命名为custom_category_desc)
  3. 在主题模板中调用这个字段输出内容:
<?php
$custom_desc = get_field( 'custom_category_desc', 'category_' . get_queried_object_id() );
if ( $custom_desc ) {
    echo $custom_desc;
}
?>

额外注意事项

  • 所有代码建议放到子主题的functions.php中,避免主题更新导致代码丢失
  • 测试生效前,记得清理WordPress缓存和浏览器缓存
  • 多用户站点一定要严格控制允许的标签,禁止开放script、iframe等危险标签

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 04:14:04