it-swarm.com.de

Fügen Sie benutzerdefinierten Beitragstypen die Erweiterung HTML (Punkt-HTML) hinzu

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?

9
user983248

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.

7
vmassuchetto

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.).

Vorbehalte

  • Ich glaube nicht, dass Funktionen wie 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.
  • Sie müssten zusätzliche Umschreibungen für andere URLs hinzufügen, die Ihre Site verwendet, wie z. B. Feed-URLs, nachfolgende Seiten, Trackbacks usw. Der obige Code funktioniert nur für die Hauptseite des benutzerdefinierten Beitragstyps.
4
Matthew Boynes

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.

2
Michael Ecklund