问题描述
使用/%category%/%postname%/
为固定链接我得到一个 URL 字符串的所有类别,特定的帖子被包含在我想要的 url 中的类别被过滤到只有一个分支的类结构,而不是从根父类别。
我有一个旅游博客,我有这个类别结构:地方> countryName> regionName> cityName 例如:www.mytravelblog.com/places/indonesia/java/jakarta/myPostName/
我想跳过 URL 中的根类别,或者甚至只使用最小的子例如:www.mytravelblog.com/jakarta/myPostName
可能吗? (WP 3.0.1)
最佳解决方法
这应该是可能的首先,你很幸运,www.mytravelblog.com/jakarta/myPostName/
已经可以工作,它显示你的帖子,不会重定向到更长的版本 (至少它似乎在我身边) 。这意味着您只需要处理生成的链接,并不会影响传入的 URL 处理方式或”canonicalized” 。
要修改的 get_permalink()
的结果通过 post_link
进行过滤。所以你可以做这样的事情:
add_filter( 'post_link', 'remove_parent_cats_from_link', 10, 3 );
function remove_parent_cats_from_link( $permalink, $post, $leavename )
{
$cats = get_the_category( $post->ID );
if ( $cats ) {
// Make sure we use the same start cat as the permalink generator
usort( $cats, '_usort_terms_by_ID' ); // order by ID
$category = $cats[0]->slug;
if ( $parent = $cats[0]->parent ) {
// If there are parent categories, collect them and replace them in the link
$parentcats = get_category_parents( $parent, false, '/', true );
// str_replace() is not the best solution if you can have duplicates:
// myexamplesite.com/luxemburg/luxemburg/ will be stripped down to myexamplesite.com/
// But if you don't expect that, it should work
$permalink = str_replace( $parentcats, '', $permalink );
}
}
return $permalink;
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。