php - 如何修复 wordpress 嵌套子类别存档页面的 url 问题
问题描述
我已经使用 UnderStrap 构建了一个自定义的 Wordpress 主题。我的网站使用存档页面来显示所有类别/子类别的内容。结构就像
父类别 > 子类别
我存档页面的 URL 结构是 www.example.com/category/parent-category/subcategory。这工作正常,但现在的问题是,如果我使用以下 URL,它仍在加载子类别内容
www.example.com/category/subcategory www.example.com/category/any-string/subcategory
有没有办法可以阻止它并开始显示 404 错误?
我尝试了一个“redirect_canonical”过滤器,但它根本没有帮助。
解决方案
你必须做几件事来实现你想要的。
- 添加自定义重写规则:首先您必须添加自定义重写规则以检测子类别。默认情况下,WordPress 不会这样做。
function theme_custom_rewrites() {
add_rewrite_tag("%parent_category_name%", "([a-z0-9\-_]+)");
add_rewrite_rule('^category/([a-z0-9\-_]+)/([a-z0-9\-_]+)/?', 'index.php?parent_category_name=$matches[1]&category_name=$matches[2]', 'top');
add_rewrite_rule('^category/([a-z0-9\-_]+)/?', 'index.php?category_name=$matches[1]', 'top');
}
add_action('init', 'theme_custom_rewrites');
- 添加 404 状态和模板加载代码:
function load_404_page_for_subcategory_pages() {
global $wp_query;
$category_slug = get_query_var('category_name');
$parent_category_slug = get_query_var('parent_category_name');
$parent_category = get_category_by_slug($parent_category_slug);
$category = get_category_by_slug($category_slug);
if( !$parent_category && $category->parent != 0) {
$wp_query->set_404();
status_header( 404 );
get_template_part( 404 );
exit();
}
}
add_action('wp', 'load_404_page_for_subcategory_pages');
将这两个钩子添加到 functions.php 文件中,然后转到后端的设置页面并保存永久链接。它应该工作。
推荐阅读
- r - 尚不支持 foreach %dopar% 长向量:memory.c:3782
- java - Bytebuddy - Stackmanipulation 实现 lambda 调用
- python - 为什么属性不更新?
- flutter - Xcode:不支持的操作系统版本,iphone os 版本 14.7 & Xcode 12.5.1
- angular - Angular/Typescript:声明传递给“find”的lambda的返回类型
- wpf - WPF ProgressBar 控件始终在 Window 7 中覆盖 Webview2 并闪烁白点问题
- python-sphinx - Sphinx 将超链接添加到引用的模块
- gradle - 收到垃圾邮件“启动 Gradle 守护程序,在 x 秒内启动”并填满我的全部记忆
- for-loop - App Script For Loop 很慢 需要优化代码以加快更新速度
- docker - 如何识别 PREvant 管理的 Docker 容器