En este artículo veremos cómo agregar el slug de blog como parte de la url en WordPress, veremos dos formas de realizarlo, la primera a través de la configuración y para otros casos especiales veremos cómo hacerlo a través de código.
Resultado Final
Al final lo que queremos obtener es algo similar a lo que se muestra en la siguiente imagen:

Opción 1- Usando la configuración de WordPress
Si tus entradas tienen asignada la categoría que quieres mostrar como parte de la url, es decir si tienes una categoría llamada blog, tal como es muestra en la siguiente imagen:

Entonces lo único que tienes que hacer es una configuración en: Ajustes > Enlaces Permanentes, selecciona “Estructura personalizada” y luego agrega el código de categoría como parte de la url.

Opcion 2 – Usando código
Si tus entradas no tienen asignada la categoría blog (ver la siguiente imagen), o si tienes algún Custom Post Type que entra en conflicto con la configuración de urls, entonces puedes evaluar agregar el slug de “blog” directamente a través de código.

Asegúrate primero de tener las urls permanentes configuradas en “Nombre de la Entrada”, tal como se muestra en la siguiente imagen:

El siguiente código sólo tiene efecto en las entradas, agregando el slug blog en la url cuando se consulta una entrada individual.
En el código anterior:
- Usamos el hook generate_rewrite_rules para agregar nuevas reglas de sobrescritura, estas incluyen la nueva estructura de urls parra las entradas individuales y para la paginación
- El otro hook post_link es un complemento que igualmente tiene efecto sólo en las entradas
- Si en caso deseas cambiar el texto “blog” simplemente reemplaza la variable $slug en ambas funciones
- El código esta basado en esta discusión
Código alterno simplificado con opción de redirección para SEO
Es posible cambiar el slug cambiando directamente el registro del Custom Post Type, esto simplifica el código. Además de eso se ha incluído la opción de redirección, útil si quieres redirigir las urls que ya estan indexadas sin el slug “blog”.
add_filter( 'register_post_type_args', 'dcms_change_slug_posts', 20, 2 );
function dcms_change_slug_posts( $args, $post_type ) {
if ( $post_type == "post" ) {
$args['rewrite'] = array(
'slug' => 'blog'
);
}
return $args;
}
add_filter('the_permalink', 'dcms_change_post_permalink');
function dcms_change_post_permalink( $link ) {
global $post;
if ( $post->post_type === 'post' ) {
$link = str_replace( $post->post_name, 'blog/' . $post->post_name, get_permalink( $post ) );
}
return $link;
}
add_action('template_redirect', 'dcms_redirect_to_blog_slug');
function dcms_redirect_to_blog_slug() {
if ( is_main_query() && is_single() && get_post_type() === 'post' ) {
if ( strpos( trim( add_query_arg( array() ), '/' ), 'blog' ) !== 0 ) {
global $post;
$url = str_replace( $post->post_name, 'blog/' . $post->post_name, get_permalink( $post ) );
wp_safe_redirect( $url, 301 );
exit();
}
}
}
Conclusión
Como has podido ver, puedes cambiar la estructura de urls de las entradas y adaptarla a tus necesidades, puedes realizar esto ya sea a través de la configuración o a través de código.
¿Aún con dudas?, en el siguiente video se detallan los puntos anteriores.
Estaba usando el código pero si se utiliza Elementor está generando problemas con el slug no lo deja editar, toca publicar el artículo y luego volver a abrirlo para editar el slug
Hola, si has usado la opción uno debería se transparente para Elementor, es decir, no tendrías por que tener problemas. Es posible que igual sea otro el problema podrías probar ir desactivando plugins o actualizar los que tengas. Saludos.
Hola Jhon,
Si quiero usar la segunda opción que propones, ¿será necesario aplicar redirecciones al htaccess, verdad?
Quiero aplicarlo en un blog que ya lleva algún tiempo activo y tiene bastante contenido, pero no quiero romperlo todo al aplicar esta modificación.
Muchas gracias!
Hola, efectivamente, si cambias la estructura de urls y tienes esas urls ya posicionadas, entonces deberás hacer redirecciones para no perjudicar tu SEO.
Hola Jhon,
Muchas gracias por compartir este recurso, me ha resuelto una necesidad para una migración que estoy desarrollando. Una pregunta, ¿sabrías adaptar este código para conseguir el slug /content/ en los archivos de tipo página? 😉
Hola, en el código podrías probar cambiando el post_type=post por post_type=page, la otra opción más simple sería que hagas una página padre llamada content y colocar todas las otras páginas dentro. Saludos.
Buenos días Jhon,
Gracias por tu artículo. He seguido los pasos para agregar el slug blog (opción 2, con código) y en mi web, que está a dos idiomas, las entradas en inglés perfecto pero las de castellano van a error404.
Es un problema de redireccionamiento o había que hacer algo más al tener 2 idiomas?
Muchas gracias!
Hola, al estar usando un plugin de idiomas primero prueba la opción 1 ya que es la más transparente para plugins que hacen cambios con las urls.