¿Cómo cambiar la estructura de enlaces permanentes para tipos de contenido personalizados y sus taxonomías?

20 sept 2011, 14:35:16
Vistas: 35.9K
Votos: 12

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.

  1. http://mywordpress.com/portfolio.html - Mostrar todas las entradas en todas las categorías.
  2. http://mywordpress.com/portfolio/music/ - Mostrar todas las entradas en esta categoría.
  3. http://mywordpress.com/portfolio/music/trance/ - Mostrar todas las entradas en esta categoría (hija).
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Mostrar la entrada.

Esto es lo que tengo hasta ahora:

  1. Primero creé un custom_post_type llamado project y una taxonomy project_category.
  2. 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.
  3. 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.
  4. 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!

3
Comentarios

La solución que di en la última pregunta debería haber funcionado de esa manera, si la implementaste correctamente. Lo único es que no puedes obtener la parte html

Manny Fleurmond Manny Fleurmond
20 sept 2011 17:43:40

Sí, pero estaba bloqueada a una ruta específica, así que solo categoría/subcategoría/página mientras que podría no haber subcategorías o incluso más. Esto es más dinámico.

Mark Mark
20 sept 2011 18:58:51

O no lo implementé correctamente ;)

Mark Mark
20 sept 2011 18:59:01
Todas las respuestas a la pregunta 3
1

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;
}
20 sept 2011 17:28:13
Comentarios

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.

ZalemCitizen ZalemCitizen
30 oct 2018 13:14:54
0

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.

Opciones del plugin Custom Post Type Permalinks

7 abr 2016 04:57:39
0

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í: Ejemplo de publicación de posts personalizados
(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

10 nov 2014 12:23:37