it-swarm.com.de

Entfernen Sie den benutzerdefinierten Pfostentyp

Ich erstelle eine neue Website basierend auf einem Thema mit benutzerdefiniertem Beitragstyp und WordPress 3.2.1.

Das Problem ist, dass mein Inhalt zuvor% postname% permalinks verwendet hat und meine gesamte SEO darauf aufbaut. Fügen Sie mithilfe von CPT einen Slug wie den folgenden hinzu: http://meinesite.com/slug-cpt/postname

Ich habe diese Regel in der Funktion register_post_type ausprobiert, aber sie funktioniert nicht:

'rewrite' => array ('slug' => false, 'with_front' => false)

Ich habe das auch gelesen, aber es ist nicht gut für mich: Permalinks in benutzerdefinierten Beitragstypen

Irgendeine Idee ?

1
Aurélien Denis

Dies ist eine knifflige Aufgabe, ich hatte genau das gleiche Problem, aber nach viel Debugging und Fehlerbehebung konnte ich sie beheben.

Der Trick besteht darin, eine neue Umschreiberegel hinzuzufügen:

function book_rewrite_rule() {
    add_rewrite_rule( '(.*?)$', 'index.php?book=$matches[1]', 'top' );
}
add_action( 'after_theme_setup', 'book_rewrite_rule' );
2
Joakim Ling

Die Frage ist ziemlich alt, aber es gibt immer noch Probleme. Der beste Weg, um den Slug aus der URL zu entfernen, besteht darin, ein paar Codezeilen in Ihre functions.php -Datei zu schreiben.

Eine andere Möglichkeit besteht darin, die Umschreibeparameter wie folgt zu übergeben:

'rewrite' => array('slug' => '/', 'with_front' => false)

Dies wird jedoch nicht empfohlen, da dies auf anderen Seiten 404-Fehler verursacht. Sie sollten sich also für die Lösung entscheiden, in den functions.php Ihres Themas zu gelangen.

/**
 * Remove the slug from published post permalinks. Only affect our CPT 
though.
 */
function sh_remove_cpt_slug( $post_link, $post, $leavename ) {

    if ( in_array( $post->post_type, array( 'cpt' ) )
        || 'publish' == $post->post_status )
        $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
        return $post_link;
}
add_filter( 'post_type_link', 'sh_remove_cpt_slug', 10, 3 );

Dadurch wird der Slug aus der URL für den veröffentlichten Beitrag entfernt. Dies verursacht weiterhin einen Fehler, da angegeben wird, dass nur die Post-Typen "post" und "page" eine URL ohne einen Post-Type-Slug haben können.

Um WP beizubringen, dass unser CPT auch URL ohne Slug enthält, müssen wir dies in unseren functions.php eintragen.

function sh_parse_request_tricksy( $query ) {

    // Only loop the main query
    if ( ! $query->is_main_query() ) {
        return;
    }

    // Only loop our very specific rewrite rule match
    if ( 2 != count( $query->query )
        || ! isset( $query->query['page'] ) )
        return;

    // 'name' will be set if post permalinks are just post_name, otherwise the page rule will match
    if ( ! empty( $query->query['name'] ) ) {
        $query->set( 'post_type', array( 'cpt' ) );
    }
}
add_action( 'pre_get_posts', 'sh_parse_request_tricksy' );

Ref: https://wordpress.stackexchange.com/a/320711/98322

0
Annapurna