Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.
Cómo configurar el slug /blog/ solo para entradas en WordPress y redirigir correctamente
15 julio, 2024
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
- 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.
- 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.