Come abilitare permalink gerarchici per tassonomie gerarchiche
Se hai una categoria chiamata "term" e una sottocategoria chiamata "subterm", puoi accedere ai post di subterm all'indirizzo /cat/subcat. Ma questo non funziona subito con le tassonomie personalizzate. Sono accessibili all'indirizzo /taxonomy/subterm, ma non /taxonomy/term/subterm.
Hanno discusso di questo nel Wordpress Trac (http://core.trac.wordpress.org/ticket/12659), e sembra che abbiano una soluzione, ma dato che non ho mai usato il Trac e non capisco completamente il suo linguaggio (diff, ecc.), ho bisogno che qualcuno più esperto mi dica come implementarlo. C'è del codice lì che devo incollare nei file core di WordPress? È già implementato e posso aggiungere qualcosa al functions.php del mio tema?
Se possibile preferirei non modificare alcun file core. Aiuto!

Questo è implementato in WordPress dalla versione 3.1.
Quando registri la tua tassonomia, assicurati di impostare rewrite hierarchical a true così come la tassonomia stessa:
<?php
register_taxonomy('genre',array('book'), array(
'hierarchical' => true, // rende la tassonomia gerarchica nell'interfaccia utente
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'hierarchical' => true ), // abilita URL gerarchici
));

Esiste un modo per aggiungere un parametro a una tassonomia personalizzata già registrata? Tutte le mie tassonomie sono state create con un plugin, quindi sarebbe bello se potessi aggiungere qualcosa a functions.php che semplicemente aggiunga 'rewrite' => array( 'hierarchical' => true ) a quelle tassonomie.

Sto ancora cercando la risposta a questa domanda—vedi http://wordpress.stackexchange.com/questions/17444/add-overwrite-a-parameter-on-an-existing-post-type-taxonomy

Probabilmente è più semplice aggiungere le tassonomie da soli e non usare il plugin.

Il problema è che lavoro con altre persone che hanno bisogno dell'interfaccia grafica. Il parametro di riscrittura gerarchica è l'unica cosa che molti di questi plugin ancora non supportano.

@supertrue - hanno bisogno di poter registrare le tassonomie tramite un'interfaccia grafica? Una volta registrata una tassonomia, potranno usare l'interfaccia grafica per gestire i termini. Voglio solo assicurarmi che non ci sia confusione - non ho mai incontrato una situazione in cui fosse necessario aggiungere nuove tassonomie così frequentemente. Un'intera tassonomia, non solo i termini all'interno della tassonomia.

Esiste un modo per aggiungere un parametro a una tassonomia personalizzata già registrata? Tutte le mie tassonomie sono state create con un plugin, quindi sarebbe utile se potessi aggiungere qualcosa al file functions.php che aggiunga semplicemente 'rewrite' => array( 'hierarchical' => true ) a quelle tassonomie.
Dovresti essere in grado di utilizzare register_taxonomy
per ri-registrare la tassonomia che desideri modificare.
http://core.trac.wordpress.org/browser/tags/3.4.2/wp-includes/taxonomy.php#L305
ATTENZIONE: Codice non testato!
(Solo a memoria, principalmente. Non mi assumo responsabilità per siti danneggiati.):
function reregister_taxonomy() {
# i post type a cui la tassonomia è registrata
$post_types = array('post');
# imposta questo sul nome della tassonomia
$tax_name = 'NOME_DELLA_TASSONOMIA_DA_MODIFICARE';
# carica la tassonomia già creata come array così possiamo
# passarla nuovamente come $args a register_taxonomy
$tax = (array)get_taxonomy($tax_name);
if ($tax) {
# modifica le necessità gerarchiche
$tax['hierarchical'] = true;
$tax['rewrite']['hierarchical'] = true;
# modifica le migliorie gerarchiche (queste potrebbero essere ignorate)
$tax['labels']['parent_item'] = sprintf(__("Genitore %s"),
$tax->labels->singular_name);
$tax['labels']['parent_item_colon'] = sprintf(__("Genitore %s:"),
$tax->labels->singular_name);
# converte le capacità in array come previsto da register_taxonomy
$tax['capabilities'] = (array)$tax['cap'];
# converte le etichette in array
$tax['labels'] = (array)$tax['labels'];
# registra la tassonomia con le nuove impostazioni
register_taxonomy($tax_name, array('post'), $tax);
}
}
# azione init con priorità alta così altre tassonomie sono caricate
# in alternativa si potrebbe fare con l'hook `registered_taxonomy`
add_action('init', 'reregister_taxonomy', 9999);
Solo dopo aver scritto questo codice mi sono reso conto che questa domanda era vecchia di un anno e mezzo, magari qualcuno lo troverà utile comunque.

Per far funzionare i permalink gerarchici è necessario aggiungere delle regole di riscrittura. Sono riuscito a mettere insieme del codice che rende funzionante un custom post type con una tassonomia personalizzata che supporta termini padre/figlio riflessi nei permalink. Non è perfetto, ma funziona!
function keha_add_rewrite_rules() {
// Aggiunge regole di riscrittura per gestire la gerarchia nei permalink
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/(.+?)$', 'index.php?taxonomy=$matches[1]&taxonomy=$matches[2]&posttype=$matches[3]', 'top' );
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/$', 'index.php?posttype=$matches[2]', 'top' );
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/(.+?)$', 'index.php?posttype=$matches[3]', 'top' );
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/?$', 'index.php?taxonomy=$matches[2]', 'top' );
add_rewrite_rule( '^posttype_slug/(.+?)$', 'index.php?taxonomy=$matches[1]', 'top' );
}
// Aggiunge l'azione per le regole di riscrittura durante l'init
add_action('init', 'keha_add_rewrite_rules');
Visualizza il mio esempio funzionante su Github:
https://github.com/keha76/WordPress-CPT-Hierarchical-Taxonomy-Permalinks

Grazie a @anubhava
Un piccolo studio sulle API di Rewrite di WP ha permesso di trovare la soluzione.
1) Ho creato un URL rewrite personalizzato e l'ho inserito nel mio functions.php
function services_rewrite_basic() {
add_rewrite_rule('^services/.*', 'index.php?page_id=110&level=$matches[1]&level=$matches[1]&level=$matches[1]', 'top');
}
add_action('init', 'services_rewrite_basic');
2) Infine ho semplicemente salvato la pagina dei permalink senza alcuna modifica e ha funzionato.
