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

Deja una respuesta

Avatar placeholder

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *