我的博客文章可以分为多个类别,因此可以从
访问mywebsite.com/root-category/children-category-A/blog-post
和
mywebsite.com/root-category/children-category-B/blog-post
我需要一个重定向规则(在htaccess中或使用wp_redirect()函数),该规则始终将博客文章重定向到
mywebsite.com/root-category/blog-post
我的尝试
$category_parent_check = get_the_category();
$category_parent_id = $category_parent_check[0]->category_parent;
if ( $category_parent_id != 0 ) {
$category_parent = get_term( $category_parent_id, 'category' );
$css_slug = $category_parent->slug;
} else {
$css_slug = $category_parent_check[0]->slug;
}
if ($css_slug == "root-category") {
wp_redirect(get_site_url() . "/root-category" . wp_make_link_relative( get_page_link())); exit;
}
我是在single.php中完成此操作的,但我没有想到$css_slug == "root-category"
永远都是正确的,并且会导致无休止的重定向。
那我该如何实现呢?
编辑
我的htaccess
<Files xmlrpc.php>
Order Deny,Allow
Deny from all
</Files>
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule ^root-category/[^/]+/(.+)$ $1/$2 [L,NC,R=301,NE]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
答案 0 :(得分:1)
由于您希望使用R
标志进行完全重定向,因此在主.htaccess 正下方 RewriteEngine On
行的单个重定向规则中执行此操作要容易得多:
RewriteEngine On
RewriteRule ^(root-category)/[^/]+/(.+)$ /$1/$2 [L,NC,R=301,NE]
# remaining rules go below this line
请确保在新的浏览器中对此进行测试,以避免旧的缓存。
答案 1 :(得分:0)
请在您的function.php
中使用以下代码,因此我认为它将从永久链接中删除子类别。
add_filter( 'post_link', 'my_filter_post_link' );
function my_get_all_child_categories( $category_id ) {
$subcategories = array();
$category = get_category( $category_id );
if ( $category->parent ) {
$subcategories[] = $category->slug . '/';
$results = my_get_all_child_categories( $category->parent );
$subcategories = array_merge( $subcategories, $results );
}
return $subcategories;
}
function my_filter_post_link( $permalink, $post, $leavename ) {
if ( 'post' != get_post_type( $post ) )
return $permalink;
switch ( $post->post_type ) {
case 'post':
$categories = get_the_category( $post->ID );
$subcategories = array();
foreach ( $categories as $category ) {
$results = my_get_all_child_categories( $category->term_id );
$subcategories = array_merge( $subcategories, $results );
}
$permalink = str_replace( $subcategories, '', $permalink );
break;
}
return $permalink;
}
答案 2 :(得分:0)
通过WordPress管理员,您可以更改博客的单个页面网址:
转到
Settings >> Permalinks
选择自定义结构单选,然后在文本框中输入此重写规则
/%category%/%postname%/
希望它能对您有所帮助。