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() ) {
        return;
    }
  
    // Truco para obtener la URL completa
    $url = add_query_arg( '', '' );
 
    // Tomamos la parte relacionada con %postname%
    $parts = explode( '/', $url );
    $parts = array_filter( $parts );
    $size = count( $parts );
    $maybe_slug = $parts[ $size ];
 
    // Intentamos encontrar el nuevo enlace en la base de datos
    $args = array(
        'name'        => $maybe_slug,
        'post_type'   => 'post',
        'post_status' => 'publish',
        'numberposts' => 1,
    );
 
    $posts = get_posts( $args );
 
    // Encontramos la publicación
    if( $posts && ! empty( $posts[0]->ID ) ) {
        $post_id = $posts[0]->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!

0 0 voto
Nota do Artigo
Subscribe
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x