Wie ändere ich die Permalink-Struktur für den benutzerdefinierten Beitragstyp und dessen Taxonomien?


10

Dies ist ein Repost einer früheren Frage, die ich hatte, aber ich möchte jetzt näher darauf eingehen, um dies vollständig lösen zu können.

Bei (normalen) Posts ist das Ändern des Permalinks so einfach wie das Aufrufen von Einstellungen> Permalink und das Ändern auf einen beliebigen Wert, z. B. den allgemein verwendeten %category%/%postname%.html. Das alles funktioniert. Wenn dies nur für den benutzerdefinierten Beitragstyp und seine Taxonomien so einfach wäre.

Das ist es, was ich gerne erreiche.

  1. http://mywordpress.com/portfolio.html - Alle Beiträge in allen Kategorien anzeigen.
  2. http://mywordpress.com/portfolio/music/ - Alle Beiträge in dieser Kategorie anzeigen.
  3. http://mywordpress.com/portfolio/music/trance/ - Alle Beiträge in dieser (untergeordneten) Kategorie anzeigen.
  4. http://mywordpress.com/portfolio/music/trance/Tiesto.html - Zeigen Sie den Beitrag an.

Was ich bisher bekommen habe ist folgendes:

  1. Zuerst habe ich ein custom_post_typebenanntes Projekt und eine taxonomy Projektkategorie erstellt .
  2. Ich habe ein Seitenportfolio erstellt und ihm eine Seitenvorlage gegeben, in der alle post_type = projectBeiträge aufgelistet sind. Wie kann ich dem Permalink von Seiten .html hinzufügen? Es ist jetzt mit http://mywordpress.com/portfolio verknüpft, während ich http://mywordpress.com/portfolio.html möchte . Dies sollte das erste Problem lösen.
  3. Dann wird es schwierig, weil wir nicht vorher wissen, wie viele Unterkategorien es gibt, vielleicht gibt es sogar keine. Die Struktur, nach der wir suchen, ist also portfolio/(CATEGORY PATH FROM TOP TO CHILD)/post.html. Ich stecke immer noch fest. Ich denke, ich sollte irgendwie die letzte Kategorie zum Pfad hinzufügen und diese entlang der project_category weitergeben , was zu einer taxonomy.php-Datei führen sollte, in der ich sie richtig verarbeiten kann.
  4. Ich habe das auch nicht angegangen, aber es sollte %postname%.htmlam Ende etwas damit zu tun haben.

Ich hoffe, mein Problem ist klar und es gibt mutige Entwickler, die mir helfen, dieses Problem anzugehen, das mich bereits vier volle Tage beschäftigt hat!


1
Die Lösung, die ich in der letzten Frage gegeben habe, hätte so funktionieren sollen, wenn Sie sie richtig implementiert hätten. Das einzige ist, dass Sie den HTML-Teil nicht bekommen können
Manny Fleurmond

Ja, aber es war an einen bestimmten Pfad gebunden, also nur Kategorie / Unterkategorie / Seite, während es möglicherweise keine Unterkategorien oder noch mehr gibt. Das ist dynamischer.
Mark

Oder ich habe es nicht richtig implementiert;)
Mark

Antworten:


4

Ok, ich denke ich könnte eine Lösung haben. Ich habe keine Ahnung, ob dies der richtige Weg ist, um dies zu erreichen, aber im Moment scheint es das einzige zu sein, was zu funktionieren scheint.

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');

function mmp_rewrite_rules($rules) {
    $newRules                               = array();
    $newRules['portfolio/(.+)/(.+?).html$'] = 'index.php?project=$matches[2]';
    $newRules['portfolio/(.+)/?$']          = 'index.php?project_category=$matches[1]'; 

    return array_merge($newRules, $rules);
}


add_filter('request', 'mmp_rewrite_request');

function mmp_rewrite_request($vars) {
    if (isset($vars['project_category'])) {
        if (strpos($vars['project_category'], '/') !== false) {
            $categories = explode('/', $vars['project_category']);
            $vars['project_category'] = $categories[count($categories) - 1];
        }
    }

    return $vars;
}

Der Anforderungsfilter ist eine gute Möglichkeit zum Filtern, wenn wir nach einer Kategorie (tatsächlich Begriff) und einem Beitrag fragen. Es ermöglicht das Hinzufügen nur einer Umschreiberegel und das Abrufen der Beitragsseite, unabhängig davon, ob sich der Beitrag in einer Kategorie, einer Unterkategorie befindet oder nicht.
ZalemCitizen

1

2 verschiedene Methoden:

* Siehe Hinweise am Ende dieses Beitrags.


Sie möchten beispielsweise eine solche Permalink-Struktur haben:
/ MAIN_CATEGORY / SUB_CAT_2 / Another_SUBCAT / my-post

Zunächst müssen Sie möglicherweise Permalinks auf /% category% /% postname% setzen . Dann...




METHODE 1:

STANDARD Kategorien (Erstellen MAIN_CATEGORY, SUB_CAT_1, and etc..), und registrieren Sie die CUSTOM POST, einschließlich diesen Parameter:

'taxonomies'    => array('category'..)

und verwenden Sie diese Codes, um Permalinks zu ändern: /wordpress//a/195643/33667
Nach dem Veröffentlichen eines CUSTOM POST (falls unter einer Kategorie angehängt) lautet die URL:
example.com/MAIN_CATEGORY/SUB_CAT_1/my-post



Methode 2:

(ps diese Methode wird nicht empfohlen, wenn Sie Hunderte oder Tausende von Posts veröffentlichen möchten)

Registrieren Sie den CUSTOM POST (benannt MAIN_CATEGORY), einschließlich der folgenden Parameter:

    "supports"      => array('page-attributes'......
    "hierarchical"  => true,

Veröffentlichen Sie dann benutzerdefinierte Beiträge wie folgt: (dh veröffentlichen Sie mehrere benutzerdefinierte Beiträge mit dem Namen . Danach, wenn Sie einen anderen Beitrag veröffentlichen, aber als übergeordnetes Element auswählen .
SUB_CAT_2, SUB_CAT_1..SUB_CAT_2





ps
1) Wenn Sie ein Neuling sind, lesen Sie Folgendes : Registrieren Sie CUSTOM POST und Registrieren von CUSTOM POST bei TAXONOMY
2) Wenn Sie Suchfunktionen für Unterebenen benötigen, verwenden Sie eine benutzerdefinierte Suchabfrage


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.