Для удаления префикса категории я использовала такое:
вмешивалась сначала в wp_rewrite, а потом в генерацию ссылок на категорию
Правила надо было создавать каждый раз при создании новой категории.
<?php
add_filter('category_link', 'no_category_parents',1000,2);
add_action('generate_rewrite_rules', 'my_rewrite_rules')
//Генерация перенаправления
function my_rewrite_rules( $wp_rewrite ) {
$newCategoryLink = '%category%';
$wp_rewrite->extra_permastructs['category']['struct'] = $newCategoryLink;
$categories = get_terms(array('category'), array('hide_empty' => '0'));
if( $categories ){
foreach( $categories as $cat ){
$catArr[] = $cat->slug;
}
}
//Слить все названия категорий в конструкцию (кат1|кат2|кат3)
$cat = implode('|', $catArr);
//И перенаправлять на страницу категорий
$rulesArr['('.$cat.')/?$'] = 'index.php?category_name=$matches[1]';
$wp_rewrite->rules = $rulesArr + $wp_rewrite->rules;
//Работа с созданием ссылки на категорию
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;
}