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

求助:如何正确移除文章标题中的分类名?含撇号场景失效问题

问题解决:带撇号的分类名无法从文章标题中移除

问题原因

你的代码中使用了\b单词边界匹配分类名,但\b仅在单词字符(字母、数字、下划线)与非单词字符的分界处生效。当分类名包含撇号(')这类非单词字符时,\b会将分类名拆分成多个片段,导致正则无法匹配到完整的分类名,因此无法正确移除。

修复方案

把正则中的\b单词边界替换为负向断言(?<!\w)和(?!\w),它们能确保匹配的分类名前后不是单词字符,不受撇号等非单词字符的影响。同时,为避免替换后出现多余空格,可对结果做空格清理。

修改后的完整代码:

<?php
$category = get_queried_object();
if ($category) {
    $category_name = $category->name; // 获取当前分类名称
    $category_id = $category->term_id;
    $query = new WP_Query(array(
        'cat' => $category_id,
        'tag_id' => 11, // 显示带有标签ID 11的文章
        'posts_per_page' => 10
    ));

    if ($query->have_posts()) {
        echo '<ul>';
        while ($query->have_posts()) {
            $query->the_post();
            $post_title = get_the_title();
            // 转义分类名中的正则特殊字符
            $escaped_category_name = preg_quote($category_name, '/');
            // 使用负向断言替代\b,适配含撇号的分类名
            $title_without_category = preg_replace('/(?<!\w)' . $escaped_category_name . '(?!\w)/i', '', $post_title);
            // 清理多余空格(去除首尾空格+合并中间多个空格为一个)
            $title_without_category = preg_replace('/\s+/', ' ', trim($title_without_category));
            echo '<li><a href="' . get_permalink() . '" style="text-decoration: none;">' . $title_without_category . '</a> </li>';
        }
        echo '</ul>';
    } else {
        echo '<p class="noposts" style="padding-left: 2em;">No posts found for ' . $category_name . '. If you have any suggestions, please let us know.</p>';
    }

    wp_reset_postdata();
}
?>

关键修改说明

  • 替换正则边界:/(?<!\w)...(?!\w)/i 确保分类名前后不是单词字符,完整匹配带撇号的分类名
  • 空格清理:通过trim()和preg_replace处理替换后可能出现的多余空格,保证标题格式整洁

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 14:24:55