Recientemente necesitaba cambiar la estructura de mis urls en WordPress, el enlace estaba configurado para estar en la raíz de mi sitio y necesitaba el nuevo formato para tener la categoría. La estructura de enlace permanente era /% postname% / y
ahora en el nuevo formato sería /% category% /% postman%
/. Un ejemplo práctico:
- Enlace antiguo: https://marquesfernandes.com/o-que-e-python-e-pra-que-serve/
- Nuevo enlace: https://marquesfernandes.com/desenvolvimento/o-que-e-python-e-pra-que-serve/
Si simplemente cambia la estructura y no redirige, todos los enlaces antiguos irán a una página de Error 404 – Página no encontrada. Entonces, ¿cómo hacer este cambio sin romper los enlaces ya creados e indexados en Google?
Lo que tenemos que hacer es intentar capturar la URL que causaría el error 404 e intentar encontrar el nuevo enlace permanente de la publicación. Si no se encuentra ningún enlace, mostraremos la página no encontrada. El método es muy simple, siempre que haya algo en su URL anterior que podamos usar para encontrar el nuevo enlace, como /% postname%
/, podemos encontrar y redirigir a la página correcta.
Para ello, agregaremos el siguiente script al archivo functions.php
del tema activo de WordPress:
add_action ('template_redirect', 'maybe_redirect_404_old_permalink');
function maybe_redirect_404_old_permalink () {
// Realice esta función solo si es una página 404
if (! is_404 ()) {
regreso;
}
// Truco para obtener la URL completa
$ url = add_query_arg ('', '');
// Tomamos la parte relacionada con% postname%
$ partes = explotar ('/', $ url);
$ partes = array_filter ($ partes);
$ tamaño = recuento ($ partes);
$ maybe_slug = $ parte[ $size ]s;
// Intentamos encontrar el nuevo enlace en la base de datos
$ args = matriz (
'nombre' => $ maybe_slug,
'post_type' => 'publicación',
'post_status' => 'publicar',
'numberposts' => 1,
);
$ publicaciones = get_posts ($ args);
// Encontramos la publicación
if ($ publicaciones &&! empty ($ publica[0]ciones-> ID)) {
$ post_id = $ publicacion[0]es-> ID;
$ post_url = get_permalink ($ post_id);
// Redirigimos a la nueva URL con el estado de redireccionamiento permanente 301
if ($ post_url) {
wp_safe_redirect ($ post_url, 301);
}
}
// Si llegas aquí es porque no se encontró ninguna publicación
// y se mostrará la página 404
}
¡Gracias a Ben Lobaugh, el creador original de esta solución!
Muy buena estructura, muchas gracias por la información.