Enlever le type de post de l'url Wordpress

Pour simplifier la lecture de l'url, il est parfois bien pratique d'enlever le nom du type de post automatiquement ajouté à chaque article Wordpress.

Il suffit d'ajouter quelques lignes de code au fichier functions.php de votre thème et de paramétrer les permaliens à /%postname%/.

Il faut d'abord enregistrer un type de post custom de la manière habituelle :

$args = array(
    'description' => 'Nouveau type de post',
    'label' => __('Nouveau type de post'),
    'public' => true,
    'rewrite' => array( 'slug' => 'typedepost'),
);
register_post_type( 'photograph' , $args );

En changeant bien sûr Nouveau type de post et typedepost avec les noms désirés.

Puis on enlève le slug de l'url du type de post créé, avec un if statement pour ne pas impacter le reste du contenu.

function custom_remove_cpt_slug( $post_link, $post, $leavename ) {

    if ( 'typedepost' != $post->post_type || 'publish' != $post->post_status ) {
        return $post_link;
    }

    $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );

    return $post_link;
}
add_filter( 'post_type_link', 'custom_remove_cpt_slug', 10, 3 );

Cette première modification engendrera une erreur 404 quand vous essayerez de visualiser votre article, car Wordpress ne reconnaît plus le type de post, il faut donc ajouter à la suite :

function custom_parse_request_tricksy( $query ) {

    if ( ! $query->is_main_query() )
        return;

    if ( 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) {
        return;
    }

    if ( ! empty( $query->query['name'] ) ) {
        $query->set( 'post_type', array( 'post', 'typedepost', 'page' ) );
    }
}
add_action( 'pre_get_posts', 'custom_parse_request_tricksy' );
BLOG COMMENTS POWERED BY DISQUS