Rimuovere la categoria genitore dal permalink? Mantenere solo la categoria figlia?
Penso che esistesse un plugin obsoleto per fare questo. C'è un modo per farlo facilmente con un po' di codice? Preferiamo non affidarci a un plugin perché ci renderebbe dipendenti dallo sviluppatore per mantenerlo aggiornato.
Abbiamo solo due categorie genitore che vorremmo rimuovere da tutti i permalink delle loro sottocategorie: "items" e "genres" (quindi potrebbe essere personalizzato per rimuovere solo due ID di categoria)
Ho visto che esisteva una soluzione per i singoli post qui, ma non credo che funzioni anche con i permalink delle categorie, vero?
Questo codice fa praticamente il lavoro per questa domanda e un'altra riguardante la rimozione della base /category/ dai permalink. L'ho preso da un plugin che fa questo, e ho deciso di usare direttamente il codice.
Quindi i permalink mostrano solo la categoria figlia più bassa nell'albero.
Prima avevamo:
example.com/category/items/books/
e ora...
example.com/books
Tuttavia, i feed RSS non sembrano funzionare con questo URL abbreviato, e richiedono ancora l'URL completo. (Non sono sicuro se ci sia una soluzione per questo.) Inoltre, non cambia il permalink degli articoli. Cambia solo il permalink delle categorie. Incolla il codice qui sotto nel tuo file functions.php. Sto usando WordPress 3.0+.
// Rimuove la base delle categorie
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;
}
// Aggiunge le nostre regole personalizzate di riscrittura per le categorie
add_filter('category_rewrite_rules', 'no_category_parents_rewrite_rules');
function no_category_parents_rewrite_rules($category_rewrite) {
//print_r($category_rewrite); // Per debug
$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]';
}
// Supporto per il reindirizzamento dalla vecchia base delle categorie
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); // Per debug
return $category_rewrite;
}
// Aggiunge la variabile di query '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;
}
// Reindirizza se 'category_redirect' è impostato
add_filter('request', 'no_category_parents_request');
function no_category_parents_request($query_vars) {
//print_r($query_vars); // Per debug
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;
}

Apprezzo davvero questa risposta, stavo cercando per più di 2 ore! L'ho condivisa con i ragazzi di wordpress.org perché spero possa aiutare altri! http://wordpress.org/support/topic/perfect-permalink-possible?replies=4#post-2214102

qualcosa di simile funzionerebbe anche per le pagine? http://wordpress.stackexchange.com/questions/173048/does-a-parent-pages-post-title-have-to-appear-in-a-child-page-permalink
