如何为WordPress单一分类(Android)自定义文章固定链接?
WordPress单一分类自定义固定链接解决方案
问题场景
想给WordPress里「Android」分类的文章单独设置固定链接格式:https://example.com/android/mypost/,其他分类的文章保持原有格式(比如https://example.com/mypost2/),但尝试了两段代码并刷新固定链接后,访问新链接出现404错误。
现有代码问题分析
- 第一段代码:只修改了文章链接的显示内容,但没有给WordPress添加对应的URL重写规则,导致服务器无法识别新的URL结构,返回404。
- 第二段代码:重写规则里写错了路径标识,把
android写成了new_slug,规则完全不匹配,自然无法生效。
正确实现代码
把以下代码添加到主题的functions.php文件中:
// 修改Android分类文章的固定链接显示 add_filter('post_link', 'android_custom_permalink', 10, 3); function android_custom_permalink($permalink, $post, $leavename) { // 仅针对文章类型,且属于Android分类的内容 if ($post->post_type === 'post' && has_category('android', $post)) { $permalink = trailingslashit(home_url('/android/' . $post->post_name . '/')); } return $permalink; } // 添加自定义重写规则,让WordPress识别新的URL结构 add_action('init', 'android_add_rewrite_rules'); function android_add_rewrite_rules() { // 匹配/android/文章别名/的结构,映射到对应的文章 add_rewrite_rule( '^android/([^/]+)/?$', 'index.php?name=$matches[1]', 'top' ); } // 重定向旧链接到新链接(防止用户访问旧地址) add_action('template_redirect', 'android_redirect_old_permalink'); function android_redirect_old_permalink() { if (is_singular('post') && in_category('android')) { $current_url = trailingslashit(get_permalink()); $expected_url = trailingslashit(home_url('/android/' . get_post()->post_name . '/')); // 如果当前访问的不是正确的新链接,就重定向 if ($current_url !== $expected_url) { wp_redirect($expected_url, 301); exit; } } }
操作步骤
- 将上述代码粘贴到当前激活主题的
functions.php文件末尾; - 登录WordPress后台,进入「设置」→「固定链接」,不需要修改任何设置,直接点击「保存更改」按钮(这一步会刷新WordPress的重写规则,让新规则生效);
- 测试访问Android分类下的文章,确认新链接可以正常打开,旧链接会自动重定向到新链接。
内容的提问来源于stack exchange,提问作者meloni
相关产品推荐
相关产品推荐

