不确定这有多干净或容易,但似乎有效。这段代码基本上解决了这个问题和另一个关于从永久链接中删除父类别的问题。从一个插件获得了它,并决定只使用原始代码。
因此,permalinks只列出了最低的子类别。
首先,我们有:
实例com/类别/项目/书籍/
现在。。。
实例com/书籍
然而,RSS提要似乎不能使用这个较短的url,仍然需要长格式的url。(不确定是否有解决方案。)将下面的代码粘贴到函数中。php文件。我正在使用Wordpress 3.0+。
// Remove category base
add_filter(\'category_link\', \'no_category_parents\',1000,2);
function no_category_parents($catlink, $category_id) {
$category = &get_category( $category_id );
if ( is_wp_error( $category ) )
return $category;
$category_nicename = $category->slug;
$catlink = trailingslashit(get_option( \'home\' )) . user_trailingslashit( $category_nicename, \'category\' );
return $catlink;
}
// Add our custom category rewrite rules
add_filter(\'category_rewrite_rules\', \'no_category_parents_rewrite_rules\');
function no_category_parents_rewrite_rules($category_rewrite) {
//print_r($category_rewrite); // For Debugging
$category_rewrite=array();
$categories=get_categories(array(\'hide_empty\'=>false));
foreach($categories as $category) {
$category_nicename = $category->slug;
$category_rewrite[\'(\'.$category_nicename.\')/(?:feed/)?(feed|rdf|rss|rss2|atom)/?$\'] = \'index.php?category_name=$matches[1]&feed=$matches[2]\';
$category_rewrite[\'(\'.$category_nicename.\')/page/?([0-9]{1,})/?$\'] = \'index.php?category_name=$matches[1]&paged=$matches[2]\';
$category_rewrite[\'(\'.$category_nicename.\')/?$\'] = \'index.php?category_name=$matches[1]\';
}
// Redirect support from Old Category Base
global $wp_rewrite;
$old_base = $wp_rewrite->get_category_permastruct();
$old_base = str_replace( \'%category%\', \'(.+)\', $old_base );
$old_base = trim($old_base, \'/\');
$category_rewrite[$old_base.\'$\'] = \'index.php?category_redirect=$matches[1]\';
//print_r($category_rewrite); // For Debugging
return $category_rewrite;
}
// Add \'category_redirect\' query variable
add_filter(\'query_vars\', \'no_category_parents_query_vars\');
function no_category_parents_query_vars($public_query_vars) {
$public_query_vars[] = \'category_redirect\';
return $public_query_vars;
}
// Redirect if \'category_redirect\' is set
add_filter(\'request\', \'no_category_parents_request\');
function no_category_parents_request($query_vars) {
//print_r($query_vars); // For Debugging
if(isset($query_vars[\'category_redirect\'])) {
$catlink = trailingslashit(get_option( \'home\' )) . user_trailingslashit( $query_vars[\'category_redirect\'], \'category\' );
status_header(301);
header("Location: $catlink");
exit();
}
return $query_vars;
}