it-swarm.com.de

Sollte das nicht einfach sein ?! Benutzerdefinierter Post-Typ/benutzerdefinierter Taxonomie-Permalink

Das macht mich total verrückt. Ich habe Tage damit verbracht, dies zu beheben, und ich kann nicht herausfinden, warum dies so schwierig ist, da dies sicherlich eine sehr häufige Permalink-Struktur ist!

Ich habe Hunderte von Antworten und Beiträgen durchgesehen und keine davon scheint das Problem zu lösen.

Ich möchte einfach diese Struktur:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

So erreiche ich folgendes:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Jedes Mal, wenn ich etwas versuche, erhalte ich 404-Fehler oder die Pagnination funktioniert nicht.

Ich verstehe nicht, warum das so schwer ist!

Jede Hilfe sehr geschätzt!

Vielen Dank

================================================ ==== ================= WEITERE INFORMATIONEN ===================

Derzeit registriere ich den Post-Typ und die Taxonomie wie folgt:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Wenn ich beides als 'Literatur' registriere, erhalte ich auf der Seite mysite.com/literature eine 404, aber dies zeigt meinen Permalink an als: mysite.com/literature/books/mybook

Nachdem Sie den Rat zu dieser Frage befolgt haben - Benutzerdefinierte Beitragstypen, Taxonomien und Permalinks

Ich habe dies zu meinen Funktionen hinzugefügt:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

Und änderte meinen Beitragstyp in 'slug' => 'literature/%literature_category%' Und änderte meine Taxonomie in 'slug' => 'literature'

Dies funktioniert hervorragend, mit der Ausnahme, dass die Paginierung von mysite.com/literature nicht funktioniert. Daher erhalte ich einen 404-Fehler bei der folgenden URL:

mysite.com/literature/page/2/

11
fxfuture

Befolgen Sie die Ratschläge zu dieser Frage wie Sie es bereits getan haben, fügen Sie dies jedoch zu Ihrem Code hinzu:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Zuletzt gehen Sie zu Einstellungen> Permalinks und klicken Sie auf Speichern. Wenn es immer noch nicht funktioniert, speichern Sie Ihre Permalinks erneut. Manchmal habe ich das Gefühl, du musst sie zweimal retten, aber wer weiß. Wie auch immer, lassen Sie mich wissen, wie Sie ausmachen. Beachten Sie, dass die Standardantwort 1 für Informatik gilt: Es funktioniert bei mir ... ;-)

Aus dem Land der TMI ...

Als Referenz warum die Seiten standardmäßig nicht funktionieren, liegt daran, dass WordPress eine Umschreiberegel für Literatur /% literature_category% /% book% /% page% einfügt, was absolut sinnvoll ist, wenn Sie darüber nachdenken . Für Ihre Standard-Permalinks gelten die folgenden Regeln in dieser Reihenfolge:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Alles, was wir hier wirklich tun, ist, die Reihenfolge dieser Elemente zu ändern, indem Sie das letztere deaktivieren (wir können es beibehalten, aber dann muss bei jedem erneuten Schreiben noch ein regulärer Ausdruck ausgeführt werden, der beim Laden der Seite ausgeführt wird) und am Anfang des Arrays hinzufügen.

Wissenswertes: Wenn Sie jemals ein "Buch" mit dem Titel "Seite" haben und es mehrere Seiten hat, wird diese Reihenfolge in Konflikt geraten und die nachfolgenden Seiten werden nicht funktionieren!

6
Matthew Boynes