Los enlaces permanentes de las URLs son el modo en el que WordPress, y sus extensiones, crear las direcciones web de los contenidos. Puedes cambiar esta estructura de URLs en los ajustes de enlaces permanentes de WordPress fácilmente, aunque no se recomienda hacerlo a menudo, para evitar indexar URLs que, tras un cambio, podrían no funcionar.
Así, en base a cómo configures la estructura de enlaces permanentes, se crearán las URLs de tus entradas, categorías, etiquetas y páginas.
Índice de contenidos
Enlaces permanentes de WooCommerce
Cuando instalas WooCommerce para crear una tienda online con WordPress se añaden a esta página de ajustes algunas opciones más de enlaces permanentes, las correspondientes a productos y sus taxonomías (categorías, atributos, etc.).
De este modo, si dejas los ajustes de enlaces permanentes por defecto de WooCommerce, al acceder a una URL de un producto será así:
- Base del producto:
https://midominio.com/producto/nombre-producto/
- Base de la tienda:
https://midominio.com/tienda/nombre-producto/
- Base de la tienda y nombre de categoría:
https://midominio.com/tienda/nombre-categoria/nombre-producto/
- Base personalizada:
https://midominio.com/personalizado/nombre-producto/
En general es bastante flexible esta parte, permitiéndote muchas posibilidades, desde las muy informativas (con la base de la categoría) a las más sencillas (base de la tienda).
Pero es que además, están los enlaces permanentes de categorías, etiquetas y atributos, con la peculiaridad de que aquí no hay manera de evitar que se añada automáticamente al enlace permanentes la base de la taxonomía.
O sea, que aunque dejes en blanco el campo en los ajustes de enlaces permanentes las URLs de tus taxonomías llevarán la base, o sea:
- Categorías de producto:
https://midominio.com/categoria-producto/nombre-categoria/
- Etiquetas de producto:
https://midominio.com/etiqueta-producto/nombre etiqueta/
No hay manera (nativa) de quitar ese /categoria-producto/
o /etiqueta-producto/
que sobra absolutamente, no aporta nada, es como el /category/
de los enlaces permanentes de categorías de WordPress: no aporta nada.
Igualmente, mantener la base /producto/
en los productos tampoco aporta nada, y tendrías URLs más sencillas y limpias solo con el nombre del producto ¿verdad? Pues vamos a poner solución a todo esto…
Cómo quitar la base /producto/ de los enlaces permanentes de WooCommerce
Tememos 2 maneras sencillas de conseguirlo…
Con ajuste + código
Para quitar la base /producto/
de los enlaces permanentes de los productos, solo necesitas hacer 2 cosas:
- Selecciona la base de producto (
/producto/
) en los ajustes de enlaces permanentes y guarda los cambios. - Añade el código de abajo a tu archivo de funciones o
functions.php
del tema o plugin de funciones, lo que prefieras…
/* Quitar producto del slug de productos de WooCommerce */ function ayudawp_quitar_slug_producto( $post_link, $post, $leavename ) { if ( 'product' != $post->post_type || 'publish' != $post->post_status ) { return $post_link; } $post_link = str_replace( '/producto/', '/', $post_link ); return $post_link; } add_filter( 'post_type_link', 'ayudawp_quitar_slug_producto', 10, 3 ); function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'product', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'product', 'page' ) ); $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct', 99 );
Guarda los cambios y a partir de este momento las URLs de tus productos serán del tipo: https://midominio.com/nombre-producto/
.
Con un plugin específico
La otra posibilidad es usar el plugin gratuito Premmerce Permalink Manager. Después de instalarlo pásate por su página de configuración y cambia el ajuste de WooCommerce por defecto al de slug del producto.
Si lo prefieres, también tienes la opción de añadir antes el nombre de la categoría del producto, por si quieres unas URLs aún más semánticas.
Cómo quitar la base /categoria-producto/ de los enlaces permanentes de WooCommerce
El siguiente paso en la simplificación y personalización de las URLs de nuestra tienda online es quitar el innecesario /categoria-producto/
de los slugs de los archivos de las categorías de productos.
En esta ocasión tenemos también varias maneras (gratis) de hacerlo…
Con código y truco «rarito»
Este primer método requiere de 2 pasos. Para empezar, ve a los ajustes de enlaces permanentes de WordPress y, en el apartado de la URL base de la categoría pon simplemente un punto (.) y guarda cambios.
Raro ¿eh? No pasa nada, vamos a por el siguiente y último paso.
Ahora añade el siguiente código como prefieras:
/* Archivos de categorias de productos sin base */ add_filter( 'request', function( $vars ) { global $wpdb; if( ! empty( $vars['pagename'] ) || ! empty( $vars['category_name'] ) || ! empty( $vars['name'] ) || ! empty( $vars['attachment'] ) ) { $slug = ! empty( $vars['pagename'] ) ? $vars['pagename'] : ( ! empty( $vars['name'] ) ? $vars['name'] : ( !empty( $vars['category_name'] ) ? $vars['category_name'] : $vars['attachment'] ) ); $exists = $wpdb->get_var( $wpdb->prepare( "SELECT t.term_id FROM $wpdb->terms t LEFT JOIN $wpdb->term_taxonomy tt ON tt.term_id = t.term_id WHERE tt.taxonomy = 'product_cat' AND t.slug = %s" ,array( $slug ))); if( $exists ){ $old_vars = $vars; $vars = array('product_cat' => $slug ); if ( !empty( $old_vars['paged'] ) || !empty( $old_vars['page'] ) ) $vars['paged'] = ! empty( $old_vars['paged'] ) ? $old_vars['paged'] : $old_vars['page']; if ( !empty( $old_vars['orderby'] ) ) $vars['orderby'] = $old_vars['orderby']; if ( !empty( $old_vars['order'] ) ) $vars['order'] = $old_vars['order']; } } return $vars; });
Guarda el código y los archivos de categorías de producto ya no tendrán añadido el /categoria-producto/
antes del nombre de cada categoría. Las URLs pasarán de https://midominio.com/categoria-producto/nombre-categoria-producto/
a https://midominio.com/nombre-categoria-producto/
.
Con un plugin especializado
Ahora vamos a hacer lo mismo pero ayudándonos de un plugin específico, que sirve expresamente para esta funcionalidad, y me refiero de nuevo a la versión gratuita de Premmerce Manager Lite.
Solo tienes que instalarlo, activarlo y, en su página de ajustes, cambiar el ajuste por defecto de WordPress a cualquiera de los dos que ofrece:
- Solamente el slug de la categoría.
- Ruta completa de la categoría, incluyendo categoría padre y subcategoría.
Prueba y elige el que mejor se adapte a tus necesidades.
Con tu plugin de SEO(Press)
La otra posibilidad para quitar el /categoria-producto/
de tus URLs es, si utilizas el plugin SEOPress (gratis), marcar la casilla al efecto, disponible en los ajustes avanzados del plugin.
Nota importante: Siempre que hagas cambios de este tipo a los slugs, ya sea con código o plugins, guarda ajustes de los enlaces permanentes de WordPress, sin modificar nada, simplemente pásate por la página y guarda cambios, para que de este modo se apliquen las modificaciones que hayas realizado.
¿Te gustó este artículo? ¡Ni te imaginas lo que te estás perdiendo en YouTube!
Bestial artículo Fernando, gracias por tanta aportación
Que consecuencias puede tener esto a nivel SEO, desconozco si al cambiar el SLUG puede afectar a la URL posicionada. Es algo que nunca me atrevo a hacer por las consecuencias que pudiera tener para mi tienda.
Quedo atento a tu respuesta
Todo cambio de enlaces permanentes puede provocar montones (o todos) de errores 404 si no haces una redirección de los anteriores a los nuevos. Un plugin como Redirection ayuda mucho tenerlo siempre activo para estas cosas 😉
Hola, Fernando,
A mí me salta la duda de que lo ideal es que las url de producto lleven la palabra tienda a principio de todo, es decir, http://www.midominio.es/tienda/categoria-producto/producto, esto se puede hacer fácilmente con los ajustes de enlaces permanentes. El problema viene cuando estás dentro de una categoría, la palabra tienda desaparece, http://www.midominio/categoria-producto. Si en la Base de de las categorías de producto pones la palabra tienda te da un error 404 y no se muestran las categorías. Eso pasa cuando pones la misma palabra en Base de categorías y base personalizada de la tienda. Pero claro por tema SEO lo ideal es que la palabra Tienda apareciese tanto en las url de las categorias como en la de producto:
http://www.midominio/tienda/categoria-producto
http://www.midominio/tienda/categoria-producto/producto
Sabes cómo se podría conseguir eso, porque los plugins que ofreces no te da la opción de poner la palabra tienda delante.
Un saludo y muchas gracias por tu blog
Si te he entendido ¿no te funcionaría añadir manualmente en los ajustes de enlaces permanentes /tienda/ antes de la base de producto y de la base de categoria, etc?
Exacto, no funciona, si pones la palabra Tienda en base de producto y en base de categoría de producto al entrar en las categorías te da un error 404 y no lo entiendo muy bien, la verdad, porque tiene todo el sentido que tiren de la misma url. He probado quitandole la «a» a la palabra tienda en la base de categorias y funciona pero exactamente al misma palabra no.
Me gustaría que estuviese la palabra Tienda para que salga en los breadcrumbs, porque eso te permite volver a la tienda de una manera más intuitiva que si esta Inicio/categoria-producto. Es mucho mejor Inicio/Tienda/categoria-producto, sobre todo porque estás dentro de la Tienda.
Pues acabo de probarlo (ya me has picado) y funciona perfectamente 😀
Prueba aquí: https://aulawp.com/woo/ y verás como funciona.
Lo he configurado así: https://i.imgur.com/KOSYKLA.jpg
Hola, Fernando,
Creo que me he explicado mal. No quiero que aparezca categoria-producto. Igual lo he puesto demasiado genérico. Te pongo un ejemplo de lo que quiero en una tienda que estoy haciendo:
Inicio/tienda/vajillas
Inicio/tienda/vajillas/plato-hondo
No quiero la palabra categoria-producto, si no la categoría en particular, la que corresponda:
Si yo pongo en Base personalizada del producto: /tienda/%product_cat%/
Y pongo lo mismo para la base de categoria de producto (esto lo pongo porque quiero que en las categorias me salga también la Tienda delante): /tienda/%product_cat%/
Esta configuración no funciona.
Perdona, que me he explicado mal y te he hecho perder el tiempo.
Un saludo y gracias
Hola Pepa: Por si te sirve de algo te sugiero que eches un vistazo a éste plugin https://es.wordpress.org/plugins/permalink-manager-for-woocommerce/
Hola maestro: He comprobado que los dos fragmentos de código que proporcionas funcionan; pero también he comprobado que lo que cuenta éste post https://www.enriquejros.com/producto-permalinks-woocommerce/ sobre que las páginas se duplican también es cierto.
O sea, que al ocultar la base «categoria-producto» en la url de las categorías o la base «producto» en la url de los productos tendremos dos páginas con el mismo contenido, pues woocommerce sigue creando las páginas con url con base.
Por ese motivo imagino que sería necesario redirigir las que crea woocommerce a las que creamos nosotros ocultando la base, y no sé si también será necesario trás redirigir implementar metaetiqueta canonical a dichas páginas
Por último, por si sirve a alguien que vea éste comentario, te comento que intentando hacer lo que quería con las url he localizado éste plugin https://es.wordpress.org/plugins/permalink-manager-for-woocommerce/ que tiene alguna característica gratuita más que Premmerce. Saludos
Probaré lo que dices 🙂