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-posten 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_NAMEcon 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_NAMEcon 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_NAMEcon el nombre que desees). Para asegurar que estas etiquetas se resuelvan en los enlaces permanentes correctos, simplemente aplica el filtrocustom_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
- Ve a Plugins > Añadir nuevo en tu panel de control de WordPress.
- Busca «Custom Permalinks».
- Haz clic en «Instalar ahora» y luego en «Activar» el plugin desde tu página de Plugins.
Manual a través de FTP
- Descarga la carpeta
custom-permalinks. - Sube la carpeta
custom-permalinksa tu directorio/wp-content/plugins/. - 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.
-
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_capsycustom_permalinks_redundant_hyphens. Consulta la sección de personalización avanzada y filtros en GitHub. -
La vista previa del frontend de un constructor de páginas (Cornerstone, etc.) se rompe o pierde su modo de edición en páginas con un enlace permanente personalizado
-
Algunos constructores de páginas cargan su vista previa en vivo o del frontend en un iframe usando una solicitud
POSTque lleva valores especiales que el constructor necesita (por ejemplo,cs_preview_timede Cornerstone). Si esa página también tiene un enlace permanente personalizado, Custom Permalinks puede redirigir la solicitud, y como las redirecciones se siguen comoGET, los datosPOSTdel 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
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_redirectfilter, 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
- Bugs:
3.1.0 – Aug 01, 2025
Permalink Generation:
- Resolved an issue where the
custom_permalinks_generate_post_permalinkfunction was creating duplicate permalinks with appended numbers when triggered programmatically. This ensures a unique, clean URL every time. - Updated the
sanitize_text_fieldfunction to prevent the truncation of permalink tags, such as%category%and%day%, guaranteeing your custom permalink structure remains intact.
Performance:
- The
save_posthook 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_tagto 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.
