Ajouter une extension .html (dot HTML) aux types d'articles personnalisés

9

Est-il possible d'ajouter l'extension .html aux types de publication personnalisés sans plugin ?

Pour les publications, je peux utiliser /%postname.html sur les paramètres de permalien

Pour les pages que je peux utiliser:

add_action('init', 'change_page_permalink', -1);
function change_page_permalink() {
    global $wp_rewrite;
    if ( strstr($wp_rewrite->get_page_permastruct(), '.html') != '.html' ) 
        $wp_rewrite->page_structure = $wp_rewrite->page_structure . '.html';
}

Pour les types d'articles personnalisés ???

Existe-t-il un morceau de code similaire à celui ci-dessus qui me permette de modifier ou d’ajouter le .html à l’URL de type message personnalisé?

    
posée user983248 19.07.2012 - 15:47

3 réponses

7

Cela semble fonctionner:

Créez les règles de réécriture telles que post-type/post-name.html . Vous pouvez utiliser des tableaux pour créer les règles de certains types de publication au lieu de les appliquer à tous.

add_action( 'rewrite_rules_array', 'rewrite_rules' );
function rewrite_rules( $rules ) {
    $new_rules = array();
    foreach ( get_post_types() as $t )
        $new_rules[ $t . '/([^/]+)\.html$' ] = 'index.php?post_type=' . $t . '&name=$matches[1]';
    return $new_rules + $rules;
}

Formatez la nouvelle structure de lien permanent pour ces types de publication.

add_filter( 'post_type_link', 'custom_post_permalink' ); // for cpt post_type_link (rather than post_link)
function custom_post_permalink ( $post_link ) {
    global $post;
    $type = get_post_type( $post->ID );
    return home_url( $type . '/' . $post->post_name . '.html' );
}

Et puis arrêtez de rediriger les URL canoniques pour supprimer la barre oblique finale. Cela pourrait nécessiter un peu plus de travail, car vous voudrez probablement conserver la redirection dans la plupart des cas.

add_filter( 'redirect_canonical', '__return_false' );

Comme d’autres l’ont dit ici, vous devrez effacer les règles après avoir effectué ce qui précède. C’est possible en visitant la page options-permalink.php admin dans Dashboard -> Settings -> Permalinks .

    
réponse donnée vmassuchetto 28.07.2012 - 06:41
4

Vous pouvez ajouter une règle de réécriture qui remplace les permaliens intégrés, par exemple. pour un type de message personnalisé "produit" ...

add_action('init', 'add_html_ext_to_custom_post_types');
function add_html_ext_to_custom_post_types() {
    add_rewrite_rule('^product/([^/]+)\.html', 'index.php?product=$matches[1]', 'top');
}

(N'oubliez pas de purger vos règles en ré-enregistrant vos permaliens ou en utilisant flush_rules de la manière indiquée par @toscho ci-dessus).

Mises en garde

  • Je ne pense pas que des fonctions comme the_permalink() l'utilisent. Vous devrez donc peut-être ajouter un filtre pour post_link pour capturer ces liens. Vous pouvez également ajouter des éléments au filtre redirect_canonical pour rediriger les permaliens par défaut, de sorte que / product / foo et / product / foo / redirect vers /product/foo.html.
  • Vous devrez ajouter des réécritures supplémentaires pour les autres URL utilisées par votre site, telles que les URL de flux, les pages suivantes, les rétroliens, etc. Le code ci-dessus ne fonctionnerait que pour la page principale Type de message personnalisé.
réponse donnée Matthew Boynes 27.07.2012 - 17:45
2

Si vous préférez un plugin WordPress pour gérer le travail pour vous, consultez Permaliens de type message personnalisé dans le référentiel de plug-in WordPress. Testé sur WordPress 3.4.1 et cela fonctionne parfaitement.

Après avoir activé le plug-in, accédez au tableau de bord - > Paramètres - > Permaliens Vous pouvez ajouter des réécritures spécifiques pour chaque type d'article personnalisé enregistré.

    
réponse donnée Michael Ecklund 19.07.2012 - 16:03

Lire d'autres questions sur les étiquettes