Wie man Permalinks mit Kategoriebasis erhält, die mit Unterkategorien arbeiten

Ich stieß auf ein Problem mit einer Site, die die Kategorie Base benötigt, die auch in der benutzerdefinierten Permalink-Struktur enthalten ist. Ich weiß, dass dies ein Problem ist, und ich habe viele Beiträge wie diese gelesen, die mir einen Einblick gaben …

Ich muss die Permalinks so funktionieren lassen:

http://www.new1450.dev/industries/ {Main blog post only showing category selection} http://www.new1450.dev/industries/development/ {a parent category} http://www.new1450.dev/industries/development/parent-category-i/ {child of parent} http://www.new1450.dev/industries/development/parent-category-i/child-category-i/ {child of child} http://www.new1450.dev/industries/development/parent-category-i/child-category-i/some-cool-post/ {actual post} 

Meine Permalink Einstellungen sind: Benutzerdefinierte Struktur:

 /industries/%category%/%postname%/ 

Kategorie Basis:

 industries/. 

Dadurch arbeite ich mit:

 http://www.new1450.dev/industries/ {Main blog post only showing category selection} http://www.new1450.dev/industries/development/ {a parent category} http://www.new1450.dev/industries/development/parent-category-i/child-category-i/some-cool-post/ {actual post} 

Es scheint also, dass nur die Kinderkategorien ein Problem darstellen.

 http://www.new1450.dev/industries/development/parent-category-i/ {child of parent} http://www.new1450.dev/industries/development/parent-category-i/child-category-i/ {child of child} 

Ich bin in der Lage, die Kategorie-ID abzufangen, indem ich die 404 abfange, aber ich kann nicht sehen, wie man die Kategorie-Seite mit der richtigen Kategorie-ID lädt.

Meine Frage ist also: Gibt es eine Möglichkeit, die Kategorieseite durch Aufruf eines internen Befehls zu laden oder muss ich meine eigene Methode zum Laden der Kategorieseite schreiben? Ich hatte gehofft, dass ich eine WP-function verwenden könnte, da dies ideal wäre. Wenn das der Letztere ist, muss ich etwas besonderes beachten? Ich weiß, ich muss setzen: status_header(200); aber wollte wissen, ob es irgendwelche anderen Überschriften oder wichtige Schritte gibt, die unternommen werden müssen.

Auch eine Weiterleitung funktioniert nicht für meinen Zweck. Ich muss die Kategorieseite mit der neuen ID laden. Wenn es hilft, ist der Haken, den ich in WP verwende, um den 404 zu fangen: template_redirect

Vielen Dank für Ihre Informationen zu diesem Thema.

Solutions Collecting From Web of "Wie man Permalinks mit Kategoriebasis erhält, die mit Unterkategorien arbeiten"

Ich konnte das ziemlich schnell zur Arbeit bringen. Ich bin jetzt in der Lage, meine Kategoriebasis in meinen Permalinks zu haben. Dadurch kann ich jetzt URLs wie:

 http://www.new1450.dev/industries/ {Main blog post only showing category selection} http://www.new1450.dev/industries/development/ {a parent category} http://www.new1450.dev/industries/development/parent-category-i/ {child of parent} http://www.new1450.dev/industries/development/parent-category-i/child-category-i/ {child of child} http://www.new1450.dev/industries/development/parent-category-i/child-category-i/some-cool-post/ {actual post} 

Dies sollte für jede Ebene der Kategorieverschachtelung funktionieren.

Meine Permalink-Einstellungen:

Benutzerdefinierte Struktur: /industries/%category%/%postname%/

Kategorie Basis: industries/. ( /. wird benötigt, da es 404 für Post verhindert)

Code:

 /** * Fix 404 for permalinks using category_base */ function permalinkWithCategoryBaseFix() { global $wp_query; // Only check on 404's if ( true === $wp_query->is_404) { $currentURI = !empty($_SERVER['REQUEST_URI']) ? trim($_SERVER['REQUEST_URI'], '/') : ''; if ($currentURI) { $categoryBaseName = trim(get_option('category_base'), '/.'); // Remove / and . from base if ($categoryBaseName) { // Perform fixes for category_base matching start of permalink custom structure if ( substr($currentURI, 0, strlen($categoryBaseName)) == $categoryBaseName ) { // Find the proper category $childCategoryObject = get_category_by_slug($wp_query->query_vars['name']); // Make sure we have a category if (is_object($childCategoryObject)) { $paged = ($wp_query->query_vars['paged']) ? $wp_query->query_vars['paged']: 1; $wp_query->query(array( 'cat' => $childCategoryObject->term_id, 'paged'=> $paged ) ); // Set our accepted header status_header( 200 ); // Prevents 404 status } unset($childCategoryObject); } } unset($categoryBaseName); } unset($currentURI); } } add_action('template_redirect', 'permalinkWithCategoryBaseFix'); 

Ich hatte ursprünglich:

 $childCategoryObject = get_category_by_slug( ((!empty($wp_query->query_vars['page']) && $wp_query->query_vars['page'] > 1) ? $wp_query->query_vars['category_name'] : $wp_query->query_vars['name']) ); 

anstelle von:

 $childCategoryObject = get_category_by_slug($wp_query->query_vars['name']); 

aber es scheint, dass eine Überprüfung nicht notwendig war. Ich habe diesen Kommentar für den Fall gelassen, dass ich ihn aus einem Grund hatte, an den ich mich nicht erinnern konnte …

Außerdem hatte ich Probleme mit meiner standardmäßigen Kategorie-Paginierung … Eine schnelle Suche gibt viele Leute mit demselben Problem zurück (geht nicht über Seite 2 hinaus), also fügte ich diesen Fix auch hinzu. Ich habe dieses Update in einem WordPress-Plugin gefunden: Kategorie Paginierung behoben . Ich habe den Code aktualisiert und das Update ist unten:

 /** * Fix the problem where next/previous of page number buttons are broken of posts in a category when the custom permalink * The problem is that with a url like this: * /categoryname/page/2 * the 'page' looks like a post name, not the keyword "page" */ function fixCategoryPagination($queryString) { if (isset($queryString['name']) && $queryString['name'] == 'page' && isset($queryString['page'])) { unset($queryString['name']); // 'page' in the query_string looks like '/2', so i'm exploding it list($delim, $page_index) = explode('/', $queryString['page']); $queryString['paged'] = $page_index; } return $queryString; } add_filter('request', 'fixCategoryPagination'); 

Hinweis: Es sollte beachtet werden, dass der Paginierungs-Fix nur für die übergeordneten Kategorien erforderlich war. Die Unterkategorien hatten kein Problem mit der Paginierung.