Cómo habilitar enlaces permanentes jerárquicos para taxonomías jerárquicas
Si tienes una categoría llamada "término" y una subcategoría llamada "subtérmino", puedes acceder a los posts del subtérmino en /categoria/subcategoria. Pero esto no funciona por defecto con taxonomías personalizadas. Estas son accesibles en /taxonomia/subtermino, pero no en /taxonomia/termino/subtermino.
Este tema se ha tratado en el Wordpress Trac (http://core.trac.wordpress.org/ticket/12659), y parece que tienen una solución, pero como nunca he usado el Trac y no entiendo completamente su lenguaje (diffs, etc.), necesito que alguien con más experiencia me explique cómo implementarlo. ¿Hay código allí que deba pegar en los archivos del núcleo de WordPress? ¿Esto ya está implementado y puedo añadir algo al functions.php de mi tema?
Si es posible, preferiría no modificar ningún archivo del núcleo. ¡Ayuda!

Esto está implementado en WordPress desde la versión 3.1.
Cuando registras tu taxonomía, asegúrate de establecer rewrite hierarchical como verdadero, así como la taxonomía misma:
<?php
register_taxonomy('genre',array('book'), array(
'hierarchical' => true, // esto lo hace jerárquico en la interfaz de usuario
'labels' => $labels,
'show_ui' => true,
'query_var' => true,
'rewrite' => array( 'hierarchical' => true ), // esto crea URLs jerárquicas
));

¿Existe alguna manera de agregar un parámetro a una taxonomía personalizada ya registrada? Todas mis taxonomías fueron construidas con un plugin, así que sería genial si pudiera agregar algo a functions.php que simplemente añada 'rewrite' => array( 'hierarchical' => true ) a esas taxonomías.

Todavía estoy buscando la respuesta a esta pregunta—ver http://wordpress.stackexchange.com/questions/17444/add-overwrite-a-parameter-on-an-existing-post-type-taxonomy

Probablemente sea más sencillo agregar las taxonomías tú mismo y no usar el plugin.

El problema es que trabajo con otras personas que necesitan la interfaz gráfica (GUI). El parámetro de reescritura jerárquica es lo único que muchos de estos plugins aún no admiten.

@supertrue - ¿necesitan poder registrar taxonomías a través de una GUI? Una vez que registras una taxonomía, podrán usar la GUI para administrar términos. Solo me aseguro de que no haya confusión aquí - nunca me he encontrado con una situación donde nuevas taxonomías necesitaran añadirse tan frecuentemente. Una taxonomía completa, no solo términos dentro de la taxonomía.

¿Hay alguna forma de agregar un parámetro a una taxonomía personalizada ya registrada? Todas mis taxonomías fueron creadas con un plugin, así que sería genial si pudiera agregar algo a functions.php que simplemente añada 'rewrite' => array( 'hierarchical' => true ) a esas taxonomías.
Deberías poder usar register_taxonomy
para volver a registrar la taxonomía que deseas modificar.
http://core.trac.wordpress.org/browser/tags/3.4.2/wp-includes/taxonomy.php#L305
ADVERTENCIA: ¡Código no probado!
(Solo de memoria, principalmente. No me hago responsable por sitios rotos.):
function reregister_taxonomy() {
# los tipos de post a los que está registrada la taxonomía
$post_types = array('post');
# establece esto al nombre de la taxonomía
$tax_name = 'TAXONOMY_NAME_TO_CHANGE';
# carga la taxonomía ya creada como array para poder
# pasarla de nuevo como $args a register_taxonomy
$tax = (array)get_taxonomy($tax_name);
if ($tax) {
# ajusta las necesidades jerárquicas
$tax['hierarchical'] = true;
$tax['rewrite']['hierarchical'] = true;
# ajusta las mejoras jerárquicas (estas podrían ignorarse)
$tax['labels']['parent_item'] = sprintf(__("Parent %s"),
$tax->labels->singular_name);
$tax['labels']['parent_item_colon'] = sprintf(__("Parent %s:"),
$tax->labels->singular_name);
# convierte capacidades a array como lo espera register_taxonomy
$tax['capabilities'] = (array)$tax['cap'];
# convierte etiquetas a array
$tax['labels'] = (array)$tax['labels'];
# registra la taxonomía con nuestras nuevas configuraciones
register_taxonomy($tax_name, array('post'), $tax);
}
}
# acción init con una prioridad tardía para que otras taxonomías se carguen
# alternativamente podría hacerse con el hook de acción `registered_taxonomy`
add_action('init', 'reregister_taxonomy', 9999);
Solo después de escribir esto me di cuenta de que esta pregunta tenía un año y medio de antigüedad, quizás alguien lo encuentre útil de todos modos.

Para que los enlaces permanentes jerárquicos funcionen, necesitas agregar reglas de reescritura. He logrado armar un código que hace que un tipo de entrada personalizado con una taxonomía personalizada funcione con términos padre/hijo reflejados en los enlaces permanentes. ¡No es perfecto, pero funciona!
function keha_add_rewrite_rules() {
// Regla para estructura jerárquica: posttype_slug/taxonomia_padre/taxonomia_hija/entrada
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/(.+?)$', 'index.php?taxonomy=$matches[1]&taxonomy=$matches[2]&posttype=$matches[3]', 'top' );
// Regla para estructura: posttype_slug/taxonomia/entrada/
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/$', 'index.php?posttype=$matches[2]', 'top' );
// Regla alternativa para estructura jerárquica
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/(.+?)$', 'index.php?posttype=$matches[3]', 'top' );
// Regla para taxonomías: posttype_slug/taxonomia/
add_rewrite_rule( '^posttype_slug/(.+?)/(.+?)/?$', 'index.php?taxonomy=$matches[2]', 'top' );
// Regla básica para taxonomía individual
add_rewrite_rule( '^posttype_slug/(.+?)$', 'index.php?taxonomy=$matches[1]', 'top' );
}
// Ejecutar la función durante la inicialización de WordPress
add_action('init', 'keha_add_rewrite_rules');
Puedes ver mi ejemplo funcional en Github:
https://github.com/keha76/WordPress-CPT-Hierarchical-Taxonomy-Permalinks

Gracias a @anubhava
Un pequeño estudio sobre la API de Rewrite de WP encontró la solución.
1) He creado una URL de rewrite personalizada y la he colocado en mi archivo 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) Y finalmente solo guardé la página de enlaces permanentes sin ningún cambio y eso hizo el truco.
