Cum să elimini categoria părinte din permalink? Doar categoria copil să rămână?
Cred că exista un plugin învechit care făcea asta. Există vreo metodă simplă de a realiza acest lucru cu puțin cod? Preferăm să nu folosim un plugin, deoarece asta ne face dependenți de dezvoltator pentru actualizări.
Avem doar două categorii părinte pe care am dori să le eliminăm din toate permalink-urile categoriilor copil: "items" și "genres" (deci ar putea fi adaptat să elimine doar două ID-uri de categorii)
Am văzut că există o soluție pentru postări individuale aici, dar nu cred că funcționează și pentru permalink-urile categoriilor, nu-i așa?

Acest cod face practic tot ce este necesar pentru această întrebare și pentru alta despre eliminarea bazei /category/ din permalinkuri. L-am luat dintr-un plugin care face acest lucru și am decis să folosesc codul direct.
Astfel, permalinkurile vor avea doar cea mai mică categorie copil listată.
Inițial, aveam:
example.com/category/items/books/
iar acum...
example.com/books
Totuși, fluxurile RSS nu par să funcționeze cu acest URL scurt și încă necesită URL-ul complet. (Nu sunt sigur dacă există o soluție pentru asta.) De asemenea, nu modifică permalinkul articolului. Se schimbă doar permalinkul categoriei. Lipiți codul de mai jos în fișierul functions.php. Folosesc WordPress 3.0+.
// Elimină baza categoriei
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;
}
// Adaugă regulile personalizate de rescriere a categoriilor
add_filter('category_rewrite_rules', 'no_category_parents_rewrite_rules');
function no_category_parents_rewrite_rules($category_rewrite) {
//print_r($category_rewrite); // Pentru depanare
$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]';
}
// Suport pentru redirecționare de la vechea bază de categorii
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); // Pentru depanare
return $category_rewrite;
}
// Adaugă variabila de interogare 'category_redirect'
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;
}
// Redirecționează dacă 'category_redirect' este setat
add_filter('request', 'no_category_parents_request');
function no_category_parents_request($query_vars) {
//print_r($query_vars); // Pentru depanare
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;
}

Chiar apreciez acest răspuns, deoarece am căutat timp de peste 2 ore! Am împărtășit asta cu băieții de la wordpress.org în speranța că poate ajuta și pe alții! http://wordpress.org/support/topic/perfect-permalink-possible?replies=4#post-2214102

ceva similar ar funcționa și pentru pagini? http://wordpress.stackexchange.com/questions/173048/does-a-parent-pages-post-title-have-to-appear-in-a-child-page-permalink
