Gibt es eine Möglichkeit, die Erweiterung .html
zu benutzerdefinierten Beitragstypen ohne Plugin hinzuzufügen?
Für Posts kann ich /%postname.html
in den Permalink-Einstellungen verwenden
Für Seiten, die ich verwenden kann:
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';
}
Für benutzerdefinierte Beitragstypen ???
Gibt es einen ähnlichen Code wie den oben genannten, der es mir ermöglicht, den .html
in der benutzerdefinierten Beitragstyp-URL zu ändern oder hinzuzufügen?
Dies scheint zu funktionieren:
Erstellen Sie die Umschreiberegeln wie post-type/post-name.html
. Sie können Arrays verwenden, um Regeln für nur einige Post-Typen zu erstellen, anstatt dies für alle zu tun.
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;
}
Formatieren Sie die neue Permalink-Struktur für diese Beitragstypen.
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' );
}
Hören Sie dann auf, die kanonischen URLs umzuleiten, um den abschließenden Schrägstrich zu entfernen. Dies erfordert möglicherweise etwas mehr Arbeit, da Sie die Umleitung in den meisten Fällen beibehalten möchten.
add_filter( 'redirect_canonical', '__return_false' );
Wie andere hier bereits gesagt haben, müssen Sie nach den oben genannten Schritten die Regeln löschen. Dies ist möglich, indem Sie die Seite options-permalink.php
admin in Dashboard -> Settings -> Permalinks
besuchen.
Sie können hierfür eine Umschreiberegel hinzufügen, die die integrierten Permalinks ersetzt, z. für einen benutzerdefinierten Beitragstyp "Produkt" ...
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');
}
(Vergessen Sie nicht, Ihre Regeln zu löschen, indem Sie Ihre Permalinks erneut speichern oder flush_rules
wie in den @ toscho-Hinweisen oben angegeben verwenden.).
the_permalink()
dies verwenden würden, daher müssen Sie möglicherweise einen Filter für post_link
hinzufügen, um diese Links abzufangen. Sie können dem redirect_canonical
-Filter auch hinzufügen, um die Standard-Permalinks umzuleiten, sodass/product/foo und/product/foo/nach /product/foo.html umleiten.Wenn Sie ein WordPress-Plugin bevorzugen, um die Arbeit für Sie zu erledigen, lesen Sie Benutzerdefinierte Post-Typ-Permalinks im WordPress-Plugin-Repository. Getestet auf WordPress 3.4.1 und es funktioniert einwandfrei.
Navigieren Sie nach der Aktivierung des Plugins zu Dashboard -> Einstellungen -> Permalinks. Sie können für jeden registrierten benutzerdefinierten Beitragstyp spezifische Umschreibungen hinzufügen.