Custom Permalinks

Descripción

¿Quieres tomar el control de las URL de tu sitio de WordPress? El plugin Custom Permalinks te da el poder de establecer URL únicas y personalizadas para cualquier entrada, página, etiqueta o categoría. Esto significa que puedes diseñar la estructura de tu sitio exactamente como la imaginas, en lugar de estar limitado por los ajustes predeterminados de WordPress. Cuando estableces un enlace permanente personalizado, la URL original de la entrada se redirigirá automáticamente a tu nueva URL personalizada.

Características principales

  • Control individual de enlaces permanentes: asigna URL únicas a cualquier entrada, página, etiqueta o categoría.
  • Control de la estructura del sitio: obtén control total sobre cómo se organizan las URL de tu sitio.
  • Estructuras de enlaces permanentes por tipo de entrada (v3.0.0+): define estructuras de enlaces permanentes personalizados para cada tipo de entrada público usando etiquetas predefinidas, generando URL automáticamente al crear el contenido. Aún puedes editar manualmente cualquier enlace permanente. Si se deja vacío, se aplicarán los ajustes predeterminados.
  • Redirecciones automáticas: las URL antiguas siguen funcionando; los visitantes y los motores de búsqueda son redirigidos automáticamente al nuevo enlace permanente personalizado.

Primeros pasos: ajustes del plugin

Puedes configurar Custom Permalinks navegando a Ajustes > Enlaces permanentes personalizados en tu panel de control de WordPress.

Para establecer un enlace permanente para una entrada, página, categoría o etiqueta individual, edita ese elemento y busca el campo Enlace permanente personalizado cerca de la parte superior (o en la barra lateral) de la pantalla del editor; introduce la ruta de la URL que quieras y guarda.

Etiquetas disponibles para estructuras de enlaces permanentes

Al configurar tus estructuras de enlaces permanentes personalizados, puedes usar una variedad de etiquetas que rellenarán la URL de forma dinámica. Aquí tienes un desglose de lo que está disponible:

  • %year%: el año de la entrada en cuatro dígitos, p. ej.: 2025
  • %monthnum%: el mes en que se publicó la entrada, en dos dígitos, p. ej.: 01
  • %day%: el día en que se publicó la entrada en dos dígitos, p. ej.: 02
  • %hour%: la hora del día en que se publicó la entrada, p. ej.: 15
  • %minute%: el minuto de la hora en que se publicó la entrada, p. ej.: 43
  • %second%: el segundo del minuto en que se publicó la entrada, p. ej.: 33
  • %post_id%: el ID único de la entrada, p. ej.: 123
  • %category%: una versión limpia del nombre de la categoría (su slug). Las subcategorías anidadas aparecerán como directorios anidados en la URL.
  • %author%: A sanitized version of the post author’s name.
  • %postname%: una versión limpia del título de la entrada o página (su slug). Por ejemplo, «This Is A Great Post!» se convierte en this-is-a-great-post en la URL.
  • %parent_postname%: similar a %postname%, pero usa el slug de la página padre inmediato si se selecciona un padre.
  • %parents_postnames%: similar a %postname%, pero incluye los slugs de todas las páginas padres si se seleccionan padres.
  • %title%: el título de la entrada, convertido a slug. Por ejemplo, «This Is A Great Post!» se convierte en this-is-a-great-post. A diferencia de %postname%, que se establece una vez, %title% se actualiza automáticamente en el enlace permanente si el título de la entrada cambia (a menos que la entrada esté publicada o el enlace permanente se edite manualmente).
  • %ctax_TAXONOMY_NAME%: una versión limpia del nombre de una taxonomía personalizada. Reemplaza TAXONOMY_NAME con el nombre real de la taxonomía. También puedes proporcionar un slug predeterminado para cuando no se seleccione ninguna categoría o taxonomía usando ?? (p. ej., %ctax_type??sales% usará «sales» como predeterminado).
  • %ctax_TAXONOMY_NAME_name%: el nombre del término de taxonomía personalizado (en lugar de su slug). Reemplaza TAXONOMY_NAME con el nombre real de la taxonomía. Admite un valor predeterminado usando ?? cuando no se selecciona ningún término (p. ej., %ctax_type_name??Sales%).
  • %ctax_parent_TAXONOMY_NAME%: similar a %ctax_TAXONOMY_NAME%, pero incluye el slug de la categoría o etiqueta padre inmediato en la URL si se selecciona un padre.
  • %ctax_parent_TAXONOMY_NAME_name%: similar a %ctax_TAXONOMY_NAME_name%, pero incluye el nombre del término padre inmediato si se selecciona un padre.
  • %ctax_parents_TAXONOMY_NAME%: similar a %ctax_TAXONOMY_NAME%, pero incluye los slugs de todas las categorías o etiquetas padres en la URL si se seleccionan padres.
  • %ctax_parents_TAXONOMY_NAME_name%: similar a %ctax_TAXONOMY_NAME_name%, pero incluye los nombres de todos los términos padres si se seleccionan padres.
  • %custom_permalinks_TAG_NAME%: los desarrolladores tienen la flexibilidad de definir sus propias etiquetas personalizadas (reemplaza _TAG_NAME con el nombre que desees). Para asegurar que estas etiquetas se resuelvan en los enlaces permanentes correctos, simplemente aplica el filtro custom_permalinks_post_permalink_tag.

Nota importante: para las entradas nuevas, Custom Permalinks seguirá actualizando el enlace permanente mientras la entrada esté en modo borrador, suponiendo que se haya definido una estructura en los ajustes del plugin. Una vez que la entrada se publique o su enlace permanente se actualice manualmente, el plugin dejará de realizar actualizaciones automáticas para esa entrada específica.

Custom Permalinks: ajuste fino con filtros

Custom Permalinks ofrece una gama de filtros que permiten a los desarrolladores controlar con precisión su comportamiento. Puedes explorar todos los filtros disponibles, completos con ejemplos de fragmentos de código, en nuestro repositorio de GitHub.

Para obtener ayuda:

  • Usuarios premium: si necesitas ayuda para implementar estos filtros, no dudes en ponerte en contacto con nosotros a través de nuestro soporte de contacto premium.
  • Otros usuarios: también puedes ponerte en contacto directamente con el autor del plugin a través de LinkedIn.

¿Necesitas ayuda o has encontrado un error?

  • Soporte: para soporte por correo electrónico personalizado, considera adquirir Custom Permalinks Premium. Aunque se puede proporcionar algo de soporte básico en los foros de WordPress.org, el soporte por correo electrónico tiene prioridad para los usuarios premium.
  • Informes de errores: si encuentras un error, infórmalo en GitHub. Asegúrate de proporcionar información completa para reproducir el problema. GitHub es para informes de errores, no para preguntas generales de soporte.

Si experimentas algún problema que rompa el sitio después de actualizar, infórmalo en el foro de WordPress o en GitHub con información detallada. Siempre puedes volver a una versión anterior descargándola desde https://wordpress.org/plugins/custom-permalinks/advanced/.

Instalación

Tienes dos formas de instalar Custom Permalinks:

Desde dentro de WordPress

  1. Ve a Plugins > Añadir nuevo en tu panel de control de WordPress.
  2. Busca «Custom Permalinks».
  3. Haz clic en «Instalar ahora» y luego en «Activar» el plugin desde tu página de Plugins.

Manual a través de FTP

  1. Descarga la carpeta custom-permalinks.
  2. Sube la carpeta custom-permalinks a tu directorio /wp-content/plugins/.
  3. Activa Custom Permalinks a través del menú «Plugins» en tu panel de control de WordPress.

FAQ

¿Qué ocurre con la URL original cuando establezco un enlace permanente personalizado?

Custom Permalinks redirige automáticamente la URL original (predeterminada) a tu nuevo enlace permanente personalizado, por lo que los enlaces existentes, los marcadores y el posicionamiento en los motores de búsqueda siguen funcionando.

¿Afectará esto al SEO de mi sitio?

No debería perjudicarlo, ya que la URL original redirige a la nueva, los motores de búsqueda y los enlaces entrantes existentes siguen resolviéndose correctamente. Usar enlaces permanentes personalizados limpios y descriptivos también puede hacer que tus URL sean más legibles, lo que generalmente es bueno para el SEO.

¿Puedo establecer enlaces permanentes personalizados para categorías y etiquetas, no solo para entradas y páginas?

Sí. Custom Permalinks es compatible con entradas, páginas, cualquier tipo de entrada personalizado público, y categorías o etiquetas (y otros términos de taxonomía personalizados).

¿Funciona con tipos de entrada personalizados, como los productos de WooCommerce?

Sí. Puedes establecer un enlace permanente personalizado individual en cualquier tipo de entrada personalizado público, o definir una estructura de enlace permanente automática para todo el tipo de entrada desde Ajustes > Enlaces permanentes personalizados.

¿Es Custom Permalinks compatible con WPML o Polylang?

Sí, el plugin es compatible tanto con WPML como con Polylang, incluyendo entradas traducidas que cada una tiene su propio enlace permanente personalizado.

¿Puedo permitir que un no administrador gestione los enlaces permanentes?

Sí. El plugin añade un rol dedicado de gestor de enlaces permanentes personalizados (y las capacidades correspondientes) para que puedas permitir que usuarios específicos no administradores vean o editen los enlaces permanentes sin darles acceso completo de administrador.

¿Puedo usar letras con acentos, mayúsculas o guiones adicionales en mis enlaces permanentes?

Por defecto, Custom Permalinks sanitiza los enlaces permanentes de la misma forma que el núcleo de WordPress (minúsculas, sin acentos, sin guiones repetidos). Los desarrolladores pueden eliminar estas restricciones con los filtros custom_permalinks_allow_accents, custom_permalinks_allow_caps y custom_permalinks_redundant_hyphens. Consulta la sección de personalización avanzada y filtros en GitHub.

Algunos constructores de páginas cargan su vista previa en vivo o del frontend en un iframe usando una solicitud POST que lleva valores especiales que el constructor necesita (por ejemplo, cs_preview_time de Cornerstone). Si esa página también tiene un enlace permanente personalizado, Custom Permalinks puede redirigir la solicitud, y como las redirecciones se siguen como GET, los datos POST del constructor se pierden y la vista previa se rompe.

Puedes indicar a Custom Permalinks que omita su redirección para esa solicitud con el filtro custom_permalinks_avoid_redirect, añadido a tu tema o a un plugin específico del sitio:

add_filter( 'custom_permalinks_avoid_redirect', function( $permalink ) {
    if ( isset( $_POST['cs_preview_time'] ) ) { // Adjust to match the field your builder sends.
        return true;
    }
    return false;
} );

Consulta la sección de personalización avanzada y filtros en GitHub para este y otros filtros disponibles.

¿Qué ocurre con mis enlaces permanentes personalizados si desactivo o desinstalo el plugin?

Desactivar el plugin mantiene todos tus enlaces permanentes personalizados guardados en la base de datos; reactivarlo los restaura inmediatamente. Desinstalar (eliminar) el plugin elimina permanentemente todos los enlaces permanentes personalizados guardados y los ajustes del plugin, y tus URL volverán a la estructura de enlaces permanentes predeterminada de WordPress.

Mi enlace permanente personalizado no se guarda o la página no redirige; ¿qué debo comprobar?

  • Asegúrate de que Ajustes > Enlaces permanentes no esté configurado como «Simple».
  • Confirma que ningún otro plugin de SEO o redirección (Yoast, RankMath, Redirection, etc.) tenga una regla conflictiva para la misma URL.
  • Comprueba que el enlace permanente no esté ya siendo usado por otra entrada; Custom Permalinks no aplicará una URL duplicada.
  • ¿Sigues atascado? Consulta «¿Necesitas ayuda o has encontrado un error?» más arriba, o ponte en contacto a través de GitHub o del soporte premium.

Reseñas

23 de junio de 2026
I have a website with thousands of posts on it, and using this for permalinks has caused a slew of issues over the years of me running it. Unfortunately, I’ve got little choice but to keep using it since it has all the data for my permalinks inside of it. The particular issue that I’m currently facing really hurts my website. It causes the inability to bulk edit posts properly. There is a bug in which the first post in the order of the ones I’ve selected has its permalink copied over the posts underneath it. So if I select a bunch of posts in the editor, with the intention of *just* changing tags, it’ll also copy the first post’s permalink to all the ones I’ve selected. When this happens, you have no choice but to go back and manually edit all of those permalinks back. This wastes hours of my time. I almost did this to a lot of pages on accident before I even noticed what happened. It’s hard to recommend something with such a glaringly bad bug. I’m not interested in going out of my way to purchase premium support for something that hasn’t been updated in nearly a year, either. I have nothing I can do except grit my teeth through this and press on. That’s hugely unacceptable in my eyes. I highly recommend skipping over this plugin and finding a different one. There’s plenty of others like it.
21 de febrero de 2024
Excellent plugin. I would really like to see categories included as well.
10 de diciembre de 2023
Once you have installed this plugin, there is no turning back. These redirections are causing SEO issues and Google won’t index my website because of them. I faced multiple URL crashes when I desactivated the plugin.
Leer todas las 117 reseñas

Colaboradores y desarrolladores

«Custom Permalinks» es un software de código abierto. Las siguientes personas han colaborado con este plugin.

Colaboradores

«Custom Permalinks» está traducido en 18 idiomas. Gracias a los traductores por sus contribuciones.

Traduce «Custom Permalinks» a tu idioma.

¿Interesado en el desarrollo?

Revisa el código , echa un vistazo al repositorio SVN o suscríbete al registro de desarrollo por RSS.

Registro de cambios

3.2.0 – Aug 20, 2026

Permalink Generation:
* Added support for name-based custom taxonomy permalink tags:
* %ctax_TAXONOMY_NAME_name%
* %ctax_parent_TAXONOMY_NAME_name%
* %ctax_parents_TAXONOMY_NAME_name%
* Use multiple custom taxonomies tags at the same time in permalink
* Updated documentation to describe the new tags and clarify the difference between slug-based and name-based taxonomy tags.

  • Bug:
    • Fixed a PHP warning («Attempt to read property ‘term_id’ on null») on tag/category archive pages in some setups. PR #138
    • Fixed an «Undefined array key _custom_permalinks_term_nonce« warning when saving a category or tag without touching its Custom Permalink field.
    • Fixed the auto-generated slug silently failing to save on posts that didn’t yet have a post_name, when a permalink structure was set to auto-generate permalinks. PR #148
    • Fixed %parent_postname% and %parents_postnames% silently dropping the post’s own slug from the generated permalink when used without also including %postname% in the structure. PR #149
    • Fixed WPML internal links pointing to the original page instead of the translated page’s own custom permalink (e.g. links created with the Gutenberg link tool).
    • Fixed custom permalinks getting overwritten with another product’s permalink when bulk editing multiple products/posts in a single request.
    • Fixed the language directory getting duplicated (e.g. /de/de/your-slug/) in permalinks generated for WPML directory-based language negotiation, and hardened the WPML permalink filter against a non-string return value that could corrupt the REST API’s JSON response when saving a post from the Block Editor.
    • Fixed a stale permalink cache entry for permalinks with a trailing slash, which could cause a newly saved custom permalink to 404 until the cache expired. PR #153
    • Fixed translated pages resolving to the wrong language’s post (wrong-language redirects, 404s on a translation, editor opening the wrong translation) when two WPML/Polylang translations shared the same custom permalink outside of «different domain per language» mode.
    • Fixed WooCommerce My Account endpoints (e.g. edit-address, edit-account) redirecting back to the base My Account page instead of loading, when the My Account page has a custom permalink set.
    • Fixed emptying the Custom Permalink field and saving not removing the saved permalink.
    • Fixed a request that only differed from the saved permalink by a trailing slash failing to resolve — it now redirects to the canonical permalink instead.
    • Fixed the trailing-slash redirect ignoring the custom_permalinks_avoid_redirect filter, which could still break page builders’ front-end preview iframes (e.g. Cornerstone) after applying the documented workaround.

3.1.2 – Sep 24, 2025

3.1.1 – Sep 19, 2025

3.1.0 – Aug 01, 2025

Permalink Generation:

  • Resolved an issue where the custom_permalinks_generate_post_permalink function was creating duplicate permalinks with appended numbers when triggered programmatically. This ensures a unique, clean URL every time.
  • Updated the sanitize_text_field function to prevent the truncation of permalink tags, such as %category% and %day%, guaranteeing your custom permalink structure remains intact.

Performance:

  • The save_post hook will now only run on public post types. This change prevents unnecessary processing on post types like «Menus», which can significantly improve performance on sites with complex configurations.

Maintenance:

  • Improved internationalization (I18N) support.
  • Fixed a bug where the cache group was not properly clearing when using the flush button.

Language:

  • Updated the plugin with the latest language packs.

3.0.1 – Jul 22, 2025

Fix PHP warning on url_to_postid() filter.

3.0.0 – Jul 22, 2025

This release of Custom Permalinks brings significant enhancements to post type permalink management, introduces new customization options, and refines the overall user and developer experience.

Added

  • Post Type Permalink Structures: Introduced robust functionality to define custom permalink structures for each public Post Type directly within the plugin settings. This allows for automatic URL generation based on predefined tags upon content creation, offering greater flexibility while still allowing manual edits.
  • New Available Permalink Tags: Expanded the list of dynamic tags that can be used in permalink structures, including:
    • %parent_postname%: For immediate parent page slugs.
    • %parents_postnames%: For all parent page slugs.
    • %title%: A dynamic slug that updates with post title changes (until published or manually edited).
    • %ctax_parent_TAXONOMY_NAME%: For immediate parent custom taxonomy slugs.
    • %ctax_parents_TAXONOMY_NAME%: For all parent custom taxonomy slugs.
    • %custom_permalinks_TAG_NAME%: Allows developers to define and resolve their own custom tags.
  • WP All Import Compatibility: Added support to generate/update permalinks when importing posts using the WP All Import plugin.
  • New Filter Examples: Included clear code examples for custom_permalinks_post_permalink_tag to set custom values from ACF fields, and for programmatically generating permalinks for single posts and entire post types.

Improved

  • Post Caching: Enhanced post caching mechanisms and optimized cache deletion upon updates for better performance.
  • Permalink Retrieval: Improved logic to allow fetching posts against customized permalinks.
  • Filter Documentation: Refined existing filter descriptions and improved code formatting for clarity.
  • Plugin Purpose Clarity: Updated documentation to explicitly state that original post URLs will automatically redirect to the customized URLs, ensuring seamless transitions.

Earlier versions

  • For the changelog of earlier versions, please refer to the separate changelog.txt file.