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

11

Das macht mich absolut 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

================================================== ==== ================== ZUSÄTZLICHE INFORMATIONEN ==================

Derzeit registriere ich den Beitragstyp 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 beide als "Literatur" registriere, erhalte ich auf der Seite mysite.com/literature eine 404, aber dies zeigt meinen Permalink wie folgt an: mysite.com/literature/books/mybook

Befolgen Sie die Anweisungen zu dieser Frage - 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, außer dass die mysite.com/literaturePaginierung nicht funktioniert, sodass bei der folgenden URL ein 404-Fehler angezeigt wird:

mysite.com/literature/page/2/

Zukunft
quelle
Was haben Sie aus Neugier bisher versucht?
Matthew Boynes
Diese Antwort brachte mich am nächsten - wordpress.stackexchange.com/questions/5308/… - aber dann funktionierte es nicht mit Paginierung und das vorgeschlagene Plugin funktionierte auch nicht
fxfuture
Cool, froh, dass ich gefragt habe, das hat mir Zeit gespart!
Matthew Boynes

Antworten:

6

Befolgen Sie die Hinweise zu dieser Frage wie bereits zuvor, fügen Sie diese jedoch 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 Nr. 1 für Informatik gilt: Es funktioniert für mich ... ;-)

Aus dem Land von TMI ...

Der Grund, warum die Seiten nicht standardmäßig funktionieren, ist, dass WordPress eine Umschreiberegel für Literatur /% literaturkategorie% /% Buch% /% Seite% einfügt, was absolut sinnvoll ist, wenn Sie darüber nachdenken. Ihre Standard-Permalinks haben also diese konkurrierenden 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 zu ändern, indem wir letztere deaktivieren (wir können sie beibehalten, aber dann hat jedes Umschreiben danach einen weiteren regulären Ausdruck, der beim Laden der Seite ausgeführt werden kann) und sie am Anfang des Arrays hinzufügen.

Unterhaltsame Tatsache: 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 funktionieren nicht!

Matthew Boynes
quelle
Meine Güte, mir ist gerade eingefallen, dass meine Syntax hier falsch war. Komischerweise funktioniert es bei mir und wenn ich es repariere, funktioniert es nicht. Ich werde dranbleiben und meine Antwort aktualisieren, wenn ich es herausfinde ...
Matthew Boynes
Danke für deine Hilfe Matthew. Ich habe das versucht und leider hat es nicht funktioniert. Ich habe meiner Frage weitere Informationen hinzugefügt, die sie hoffentlich besser erklären!
fxfuture
1
Ok, ich entschuldige mich für die Verwirrung. Hatte dort ein wenig Hirngas (muss in letzter Zeit ein paar Hirnbohnen gehabt haben). Meine Antwort wurde aktualisiert und funktioniert wieder für mich. Denken Sie daran, über Ihre Permalinks zu speichern.
Matthew Boynes
1
Oh ok, ich habe deine aktualisierte Frage gesehen. Es ist also nicht so, dass / literatur / fiktion / seite / 2 nicht funktioniert, es ist so, dass / literatur / seite / 2 nicht funktioniert, stimmt das? Wenn ja, ist das eine einfache Lösung, wir werden das Gleiche auf einer
höheren
1
Lassen Sie uns diese Diskussion im Chat fortsetzen
Matthew Boynes