我使用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”过滤器, 但是它根本没有帮助。
#1
你必须做几件事才能实现你想要的。
- 添加自定义重写规则:首先, 你必须添加自定义重写规则以检测子类别。 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文件中, 然后转到后端的设置页面并保存永久链接。它应该工作。
评论前必须登录!
注册