En ocasiones nos vemos en la problemática de tener varios custom post type y queremos darle una estructura determinada de permalink a entradas pero no queremos que afecte al resto de customs.
Desde la sección enlaces permanentes de WordPress si la editamos y le añadimos dicho cambio afectará a todos los enlaces de tipo post que tengamos en el site. (justamente lo que queremos evitar)
Por ejemplo: Queremos añadirle a las entradas de nuestro wordpress el path /blog/ y que este solo se aplique a la parte de entradas y solamente a entradas.
Para ello usaremos un pequeño código que añadiremos en el functions.php de nuestro tema.
function reescritura_permalink( $wp_rewrite ){
$slug = "blog";
$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;
}
function cambiar_bloglink($post_link, $id=0){
$slug = "blog";
$post = get_post($id);
if( is_object($post) && $post->post_type == 'post'){
return home_url('/'.$slug.'/'. $post->post_name.'/');
}
return $post_link;
}
add_action('generate_rewrite_rules', 'reescritura_permalink');
add_filter('post_link', 'cambiar_bloglink', 1, 3);
Con esto estaremos modificando las entradas para que tengan /blog/ delante de cada una de ellas. Si queremos que tenga otro tipo de slug, solamente tenemos que cambiar el contenido de la variable $slug por el valor que queramos.
Si una vez añadido el código no hace efecto, tendremos que ir a enlaces permanentes de nuestro wordpress y guardas la configuración para que wordpress coja los cambios.
0 Comments