¿Cómo cambiar la estructura de enlaces permanentes para tipos de contenido personalizados y sus taxonomías?
Esta es una republicación de una pregunta anterior que tuve, pero me gustaría entrar en más detalles ahora para poder resolverla completamente.
Entonces, nuevamente, con las entradas (normales) cambiar el permalink es tan fácil como ir a Ajustes > Enlaces permanentes y cambiarlo a lo que quieras, como el ampliamente utilizado %category%/%postname%.html
. Todo esto funciona. Si solo fuera así de fácil para el tipo de contenido personalizado y sus taxonomías también.
Esto es lo que me gustaría lograr.
- http://mywordpress.com/portfolio.html - Mostrar todas las entradas en todas las categorías.
- http://mywordpress.com/portfolio/music/ - Mostrar todas las entradas en esta categoría.
- http://mywordpress.com/portfolio/music/trance/ - Mostrar todas las entradas en esta categoría (hija).
- http://mywordpress.com/portfolio/music/trance/Tiesto.html - Mostrar la entrada.
Esto es lo que tengo hasta ahora:
- Primero creé un
custom_post_type
llamado project y unataxonomy
project_category. - Creé una página Portfolio y le di una Plantilla de Página que listará todas las entradas con
post_type = project
. ¿Cómo puedo agregar .html al permalink de las páginas? Ahora enlaza a http://mywordpress.com/portfolio mientras que quiero http://mywordpress.com/portfolio.html. Esto debería resolver el primer problema. - Luego las cosas se ponen difíciles, porque no sabemos de antemano cuántas subcategorías hay, tal vez no haya ninguna. Entonces la estructura que buscamos es
portfolio/(RUTA DE CATEGORÍA DESDE SUPERIOR A HIJA)/post.html
. Todavía estoy atascado en este punto. Creo que de alguna manera debería obtener la última categoría agregada a la ruta y pasarla junto con project_category, lo que debería llevar a un archivo taxonomy.php donde puedo procesarlo adecuadamente. - Tampoco he abordado esto, pero debería tener algo que ver con
%postname%.html
al final de algo.
¡Espero que mi problema esté claro y que haya desarrolladores valientes que me ayuden a resolver este problema que ya me ha mantenido ocupado durante CUATRO días completos!
Ok, creo que podría tener una solución. No tengo idea si esta es la forma correcta de lograr esto, pero por ahora es lo único que parece funcionar.
add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
$newRules = array();
$newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
$newRules['portfolio/(.+)/?$'] = 'index.php?project_category=$matches[1]';
return array_merge($newRules, $rules);
}
add_filter('request', 'mmp_rewrite_request');
function mmp_rewrite_request($vars) {
if (isset($vars['project_category'])) {
if (strpos($vars['project_category'], '/') !== false) {
$categories = explode('/', $vars['project_category']);
$vars['project_category'] = $categories[count($categories) - 1];
}
}
return $vars;
}

El filtro de solicitud es una buena manera de filtrar si estamos preguntando por una categoría (un término en realidad) y una publicación. Permite agregar solo una regla de reescritura y obtener la página de publicación sin importar si la publicación está en una categoría, una subcategoría o no está en ninguna.

Después de golpearme la cabeza durante horas, encontré este plugin muy útil.
https://wordpress.org/plugins/custom-post-type-permalinks/
A continuación se muestra la captura de pantalla de las opciones que ofrece.

2 Métodos Diferentes:
*Ver notas al final de esta publicación.
Por ejemplo, deseas tener una estructura de enlaces permanentes como esta:
/CATEGORIA_PRINCIPAL/SUBCAT_2/Otra_SUBCAT/mi-publicacion
Primero, puede que necesites configurar los enlaces permanentes a /%category%/%postname%. Luego...
MÉTODO 1:
Crea categorías ESTÁNDAR (CATEGORIA_PRINCIPAL
, SUBCAT_1
, etc...
), y registra el CUSTOM POST, incluyendo este parámetro:
'taxonomies' => array('category'..)
y usa estos códigos para cambiar los enlaces permanentes: https://wordpress.stackexchange.com/a/195643/33667
Luego, después de publicar un CUSTOM POST (si está asignado a una categoría), la URL será:
ejemplo.com/CATEGORIA_PRINCIPAL/SUBCAT_1/mi-publicacion
MÉTODO 2:
(nota: este método no se recomienda si planeas publicar cientos o miles de posts)
Registra el CUSTOM POST (llamado CATEGORIA_PRINCIPAL
), incluyendo estos parámetros:
"supports" => array('page-attributes'......
"hierarchical" => true,
Luego, publica posts personalizados así:
(Es decir, publica varios posts personalizados, llamados SUBCAT_2, SUBCAT_1..
. Después, cuando publiques otro post, selecciona SUBCAT_2
como padre.
Notas:
1) Si eres principiante, revisa: Registrar CUSTOM POST y Registrar CUSTOM POST con TAXONOMÍA
2) Si necesitas funcionalidad de búsqueda para subniveles, usa consultas de búsqueda personalizadas
