Est-il possible d'ajouter l'extension .html
à des 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 de post personnalisés ???
Existe-t-il un élément de code similaire à celui ci-dessus qui me permette de modifier ou d’ajouter le .html
à l’URL de type message personnalisé?
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 permalien 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 souhaiterez probablement conserver la redirection dans la plupart des cas.
add_filter( 'redirect_canonical', '__return_false' );
Comme d’autres l’ont dit, après avoir suivi ce qui précède, il vous faudra effacer les règles, ce qui est possible en visitant la page administrateur options-permalink.php
dans Dashboard -> Settings -> Permalinks
.
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).
the_permalink()
l'utilisent, vous devrez donc peut-être ajouter un filtre pour post_link
pour intercepter ces liens. Vous pouvez également ajouter au filtre redirect_canonical
pour rediriger les liaisons permanentes par défaut, de sorte que/product/foo et/product/foo/redirect vers /product/foo.html.Si vous préférez un plugin WordPress pour gérer le travail à votre place, consultez Custom Post Type Permalinks dans le référentiel du plugin WordPress. Testé sur WordPress 3.4.1 et cela fonctionne parfaitement.
Après avoir activé le plug-in, accédez simplement à Tableau de bord -> Paramètres -> Permaliens. Vous pouvez ajouter des réécritures spécifiques pour chaque type de publication personnalisé enregistré.