Es scheint, dass alle Webressourcen, die auf dem Thema des Entfernens eines benutzerdefinierten Beitragstyps basieren, z
yourdomain.com/CPT-SLUG/post-name
Inzwischen sind Lösungen sehr veraltet, die häufig auf vor WP 3.5 installierte Versionen verweisen. Eine übliche ist:
'rewrite' => array( 'slug' => false, 'with_front' => false ),
innerhalb Ihrer register_post_type Funktion. Das funktioniert nicht mehr und ist irreführend. Also frage ich die Community im 3. Quartal 2018 am Rande von WordPress 5 ...
Was sind die modernen und effizienten Möglichkeiten, um den Post Type Slug aus der URL eines benutzerdefinierten Post Type-Posts innerhalb des Rewrite-Arguments oder irgendwo anders zu entfernen?
UPDATE: Es scheint verschiedene Möglichkeiten zu geben, dies zu erzwingen, um mit regulären Ausdrücken zu arbeiten. Insbesondere die Antwort von Jan Beck, falls Sie beständig bereit sind, die Erstellung von Inhalten zu überwachen, um sicherzustellen, dass keine widersprüchlichen Seiten- / Post-Namen erstellt werden . Beides als Option / Hook beim Erstellen eines CPT oder eines erweiterten Optionssatzes für Permalinks. Bitte unterstützen Sie das Track-Ticket.
Fußnote: Bitte unterstützen Sie dieses Trac-Ticket, indem Sie es ansehen / bewerben: https://core.trac.wordpress.org/ticket/34136#ticket
quelle
Antworten:
Der folgende Code funktioniert, aber Sie müssen nur bedenken, dass Konflikte leicht auftreten können, wenn der Slug für Ihren benutzerdefinierten Post-Typ mit dem einer Seite oder des Slugs eines Posts identisch ist ...
Zuerst entfernen wir den Slug aus dem Permalink:
Nur die Schnecke zu entfernen ist nicht genug. Im Moment erhalten Sie eine 404-Seite, da WordPress nur erwartet, dass sich Posts und Seiten so verhalten. Sie müssen außerdem Folgendes hinzufügen:
Ändern Sie einfach "Ereignisse" in Ihren benutzerdefinierten Beitragstyp und schon kann es losgehen. Möglicherweise müssen Sie Ihre Permalinks aktualisieren.
quelle
2 != count( $query->query )
. Mit nginx können Sie $ query-> query as habenarray('page' => '', 'name' => '...', 'q' => '...')
. Also @NateAllen, was ist die Bedeutung dieser Bedingung?Schreiben Sie den folgenden Code in die Taxonomie-Registrierung.
Das Wichtigste, was Sie nach einer Codeänderung tun müssen
Nachdem Sie Ihr benutzerdefiniertes Taxonomiedokument für den Beitragstyp geändert haben, gehen Sie zu Einstellungen> Permalinks und speichern Sie Ihre Einstellungen erneut . Andernfalls wird die Seite 404 nicht gefunden.
Überprüfen Sie hier die beste Lösung: http://www.krazzycodes.com/how-to-remove-custom-post-type-taxonomy-base-from-url-in-wordpress/
quelle
Ich habe vor nicht allzu langer Zeit versucht, das herauszufinden, und die kurze Antwort von dem, was ich weiß, ist nein . Zumindest nicht innerhalb des Rewrite-Arguments.
Die lange Erklärung wird deutlich, wenn Sie sich den tatsächlichen Code
register_post_type
in wp-includes / post.php Zeile 1454 ansehen :Sie können die Präfixe
$args->rewrite['slug']
vor dem%$post_type%
Umschreibetag sehen. Man könnte denken "Lass uns einfach die Schnecke aufnull
dann stellen", bis du ein paar Zeilen nachschaust:Sie können sehen, dass die Funktion immer einen Slug-Wert erwartet, der nicht leer ist und ansonsten den Post-Typ verwendet.
quelle
Als Antwort auf meine vorherige Antwort : Sie könnten natürlich den
rewrite
Parameter auf setzen,false
wenn Sie einen neuen Beitragstyp registrieren, und die Umschreiberegeln selbst so handhabenSie können sehen, dass der
add_permastruct
Anruf den Slug jetzt nicht mehr enthält. Ich habe zwei Szenarien getestet:quelle
Wenn ich mir die Antworten hier ansehe, gibt es meines Erachtens Raum für eine bessere Lösung, die einige der oben genannten Erkenntnisse kombiniert und die automatische Erkennung und Verhinderung von doppelten Post-Slugs hinzufügt.
HINWEIS: Stellen Sie sicher, dass Sie in meinem Beispiel unten "custom_post_type" für Ihren eigenen CPT-Namen ändern. Es gibt viele Vorkommen, und ein Suchen / Ersetzen ist ein einfacher Weg, um sie alle zu finden. Der gesamte Code kann in Ihrer functions.php oder in einem Plugin gespeichert werden.
Schritt 1: Deaktivieren Sie das erneute Schreiben für Ihren benutzerdefinierten Beitragstyp, indem Sie beim Registrieren des Beitrags das erneute Schreiben auf "false" setzen:
Schritt 2: Fügen Sie unsere benutzerdefinierten Umschreibungen manuell am unteren Rand der WordPress-Umschreibungen für unseren benutzerdefinierten Post-Typ hinzu
HINWEIS: Abhängig von Ihren Anforderungen möchten Sie möglicherweise die obigen Änderungen vornehmen (Deaktivieren von Trackbacks, Feeds usw.). Dies sind die 'Standard'-Arten von Umschreibungen, die generiert worden wären, wenn Sie die Umschreibungen in Schritt 1 nicht deaktiviert hätten
Schritt 3: Erstelle wieder einen Permalink zu deinem benutzerdefinierten Post-Typ "pretty"
HINWEIS: Sie können hier aufhören, wenn Sie nicht befürchten, dass Ihre Benutzer einen in Konflikt stehenden (doppelten) Beitrag in einem anderen Beitragstyp erstellen, wodurch eine Situation entsteht, in der nur einer von ihnen geladen werden kann, wenn die Seite angefordert wird.
Schritt 4: Verhindern Sie doppelte Pfostenschnecken
HINWEIS: Dadurch wird die Zeichenfolge '-duplicate' an das Ende aller doppelten Slugs angehängt. Dieser Code kann doppelte Bugs nicht verhindern, wenn diese bereits vor der Implementierung dieser Lösung vorhanden waren. Achten Sie darauf, zuerst nach Duplikaten zu suchen.
Ich würde gerne von allen anderen hören, die dies ausprobieren, um zu sehen, ob es auch für sie gut funktioniert.
quelle
/%category%/%postname%/
. Wenn Sie Ihren Code hinzufügen, sehen die CPT-Slugs OK aus (obwohl der abschließende Schrägstrich fehlt) ... und die Konfliktüberprüfung funktioniert auch. Aber der eigentliche Beitrag ergibt sich auf einem 404.Sie brauchen nicht so viel Hardcode. Benutze einfach ein leichtes Plugin:
Es hat anpassbare Optionen.
quelle
Hatte hier die gleichen Probleme und es scheint keine Bewegung auf der WordPress-Seite zu geben. In meiner speziellen Situation, in der für einzelne Blogposts die Struktur / blog /% postname% / benötigt wurde, war diese Lösung
https://kellenmace.com/remove-custom-post-type-slug-from-permalinks/
endete in einer Reihe von 404s
Aber zusammen mit diesem wunderbaren Ansatz, der nicht die Backend-Permalink-Struktur für den Blogpost verwendet, funktioniert es endlich wie Charme. https://www.bobz.co/add-blog-prefix-permalink-structure-blog-posts/
Vielen Dank.
quelle
und wir können einige Änderungen an der oben genannten Funktion vornehmen:
zu:
um den richtigen post_type Wert zu setzen.
quelle
Das hat bei mir funktioniert:
'rewrite' => array('slug' => '/')
quelle
Für alle, die dies lesen und Probleme mit untergeordneten Posts hatten, wie ich es tat, war es der beste Weg, Ihre eigenen Umschreiberegeln hinzuzufügen.
Das Hauptproblem, das ich hatte, war, dass WordPress die Weiterleitung von Seiten mit einer Tiefe von 2 Ebenen (untergeordnete Posts) ein wenig anders behandelt als 3 Ebenen (untergeordnete Posts).
Das bedeutet, wenn ich / post-type / post-name / post-child / habe, kann ich / post-name / post-child verwenden und es wird mich zu dem mit post-type vor umleiten, aber wenn ich post-type habe / post-name / post-child / post-grandchild dann kann ich post-name / post-child / post-grandchild nicht verwenden.
Wenn Sie sich die Umschreiberegeln ansehen, sieht es so aus, als würde sie für andere Dinge als Seitennamen auf der ersten und zweiten Ebene passen (ich denke, die zweite Ebene entspricht dem Anhang), und dann wird dort etwas unternommen, um Sie zum richtigen Beitrag umzuleiten. Auf drei Ebenen funktioniert es nicht.
Als erstes müssen Sie den Beitragstyp-Link auch von Kindern entfernen. Diese Logik sollte hier vorkommen, wenn Sie sich die Antwort von Nate Allen oben ansehen:
Ich selbst habe eine Mischung verschiedener Bedingungen verwendet, um zu überprüfen, ob der Beitrag Kinder hat und was nicht, um zum richtigen Permalink zu gelangen. Dieser Teil ist nicht zu knifflig und Sie werden Beispiele von Leuten finden, die es woanders machen.
Der nächste Schritt ist jedoch, wo sich die Dinge von der gegebenen Antwort ändern. Anstatt der Hauptabfrage Dinge hinzuzufügen (die für benutzerdefinierte Posts und ihre Kinder, aber nicht für die weiteren Kinder funktionierten), habe ich ein Umschreiben hinzugefügt, das an die Unterseite der WordPress-Regeln ging, sodass, wenn der Seitenname nicht ausgecheckt hat und es im Gange war Wenn Sie auf 404 klicken, wird ein letzter Test durchgeführt, um festzustellen, ob eine Seite innerhalb des benutzerdefinierten Beitragstyps denselben Namen hat. Andernfalls wird 404 verworfen.
Hier ist die Umschreiberegel, die ich verwendet habe, unter der Annahme, dass 'event' der Name Ihres CPT ist
Hoffe, das hilft jemand anderem, ich konnte nichts anderes finden, was mit Child-of-Child-Posts und dem Entfernen der Schnecke von diesen zu tun hatte.
quelle