En ocasiones, necesitamos modificar la estructura de enlaces permanentes en WordPress para que solo las entradas del blog tengan el slug /blog/, mientras que el resto de páginas y tipos de contenido personalizados mantendrán sus slugs originales.

Este ajuste es interesante para mejorar la organización del contenido de cara a nuestras herramientas de analítica y SEO.

Si hacemos el ajuste desde las opciones de WordPress en Ajustes > Enlaces permanentes, ese cambio se aplicará a todas las URLs de nuestra página en WordPress, por eso proponemos esta alternativa a través de código fuente de tu functions.php

Paso 1: Añadir el código en el functions de tu tema

Añade el siguiente código al final de tu archivo functions.php de tu tema activo:

// Añadir reglas de reescritura personalizadas para entradas con /blog/
add_action('generate_rewrite_rules', 'dcms_posts_add_rewrite_rules');
function dcms_posts_add_rewrite_rules($wp_rewrite) {
    $slug = "blog"; // Puedes personalizar "blog" por cualquier otro nombre o palabra que desees
    $new_rules = [
        $slug.'/page/([0-9]{1,})/?$' => 'index.php?post_type=post&paged='. $wp_rewrite->preg_index(1),
        $slug.'/(.+?)/?$' => 'index.php?post_type=post&name='. $wp_rewrite->preg_index(1),
    ];
    $wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
    return $wp_rewrite->rules;
}

// Modificar los enlaces permanentes de las entradas para incluir /blog/
add_filter('post_link', 'dcms_posts_change_blog_links', 1, 3);
function dcms_posts_change_blog_links($post_link, $post, $leavename) {
    $slug = "blog"; // Puedes personalizar "blog" por cualquier otro nombre o palabra que desees
    if (is_object($post) && $post->post_type == 'post') {
        // Utiliza $post->post_name para incluir el slug editado
        $post_name = $leavename ? '%postname%' : $post->post_name;
        return home_url('/'.$slug.'/'.$post_name.'/');
    }
    return $post_link;
}

// Redirigir entradas del blog sin /blog/ a la URL correcta con /blog/
add_action('template_redirect', 'redirect_to_blog_url');
function redirect_to_blog_url() {
    if (is_single() && 'post' == get_post_type()) {
        $current_url = home_url(add_query_arg([], $_SERVER['REQUEST_URI']));
        $slug = "blog"; // Puedes personalizar "blog" por cualquier otro nombre o palabra que desees
        $correct_url = home_url('/'.$slug.'/'. get_post_field('post_name', get_post()) .'/');

        if (strpos($current_url, '/'.$slug.'/') === false) {
            wp_redirect($correct_url, 301);
            exit();
        }
    }
}

Paso 2: Comprobaciones finales

  1. Actualizar Permalinks: Después de implementar estos cambios, es crucial actualizar los permalinks en Ajustes > Enlaces Permanentes. Solo haz clic en Guardar cambios para regenerar las reglas de reescritura.
  2. Limpiar Caché: Si utilizas un plugin de caché, asegúrate de limpiar la caché después de realizar estos cambios.

Siguiendo estos pasos, habrás configurado correctamente tu sitio en WordPress para que las entradas del blog tengan el slug /blog/, y para redirigir automáticamente cualquier URL incorrecta. ¡Esperamos que este tutorial te haya sido de ayuda!

Si tienes alguna duda o necesitas ayuda para implementar esta configuración en tu sitio web, no dudes en contactar con nosotros. Estamos aquí para ayudarte a optimizar tu web.

Compartir en

Relacionados


23/02/2024
Añadir campo personalizado a email de WooCommerce

Si utilizas Advanced Custom Fields en WordPress con WooCommerce, es muy posible que utilices algún campo personalizado en cada producto. Si quieres que ese campo […]

Mejorar SEO canonicals Prestashop

Os compartirmos un fragmento de código que mejora el comportamiento de las etiquetas canonical en Prestashop. La etiqueta canonical se utiliza para indicar a los […]

6 consejos sencillos para proteger tu WordPress

Proteger WordPress es crucial para mejorar la seguridad de tu sitio web. Aquí hay algunos consejos sencillos que puedes implementar: Recuerda que la prevención es […]