Das Entfernen von Slug aus dem benutzerdefinierten Beitragstyp führt zu 404
3 Antworten
- Stimmen
-
- 2018-01-27
Die Registrierung desbenutzerdefinierten Beitragstyps und der Permalink-Änderungistin Ordnung. Das Problembesteht darin,dass die WordPress-Umschreiberegeln höchstwahrscheinlichmit der "bereinigten" URL Ihrereinfachen Links zu Seiten übereinstimmen und die Abfragevariable
pagename
nichtname
festlegen als Ihrechange_slug_struct()
-Funktion angenommen.Ändern Sie die Funktion so,dass alle Fälleberücksichtigt werden:
function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct' );
The registering of the custom post type and the permalink modification is OK. The problem is with the WordPress rewrite rules that more than likely will match the "cleaned up" URL of your simple links to pages and it will set the
pagename
query var notname
as yourchange_slug_struct()
function assumed.So change the function to this to account for all cases:
function change_slug_struct( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); } elseif ( ! empty( $query->query['pagename'] ) && false === strpos( $query->query['pagename'], '/' ) ) { $query->set( 'post_type', array( 'post', 'single-link', 'page' ) ); // We also need to set the name query var since redirect_guess_404_permalink() relies on it. $query->set( 'name', $query->query['pagename'] ); } } add_action( 'pre_get_posts', 'change_slug_struct' );
-
das half,ichmusstenichteinmal die Permalinks ändern oder aktualisieren.Vielen Dank!!that helped, I didn't even need to change or refresh the permalinks. Thank you!!
- 0
- 2018-01-29
- Paranoia
-
Das hatnicht vollständigfunktioniert. Wennicheine Seitemit einem Elternteil habe (z. B. domain.com/parent/page),erhalteicheine 404. Wennich siein domain.com/page (ohne das Elternteil) ändere,funktioniert sie wieder.Irgendeine Idee,was das sein könnte?that didn't fully work, if I have a page with a parent (eg. domain.com/parent/page) i get a 404. If I change it to domain.com/page (without the parent) then it works again. Any idea what this could be?
- 0
- 2018-01-29
- Paranoia
-
Ich werde dies wieder auf die richtige Antwort ändern,wenn wireine Lösung haben.Leider steckeichfest :(I'll change this back to the correct answer, if we have a solution. Unfortunately I am stuck :(
- 0
- 2018-01-30
- Paranoia
-
Ja.Ich habe den Fall,in dem untergeordnete Seiten vorhanden sind,nichtberücksichtigt.Da Ihrbenutzerdefinierter Beitragstypnicht hierarchischist,können Fällemit untergeordneten Seiten sicher ausgeschlossen werden.Ich habemeine Antwortgeändert.Lassen Siemich wissen,obesfunktioniert,und vergessen Sienicht,es als die richtige Antwort zu vermarkten.Yes. I haven't taken into account the case where there are child pages. Since your custom post type is not hierarchical, it is safe to exclude cases when there are child pages. I have modified my answer. Do let me know if it works and don't forget to market it as the right answer.
- 0
- 2018-01-30
- Vlad Olaru
-
dubistein Genie!!you're a genius!!
- 0
- 2018-01-30
- Paranoia
-
- 2018-01-23
Siemüssen die Permastruktur ändern.Standardmäßig wird der Beitrag Ihresbenutzerdefinierten Beitragstypsnurgefunden,wenn die URLmit dem Slug-Präfixbeginnt.Wenn Sie das Präfix ändern,treten ähnliche Probleme auf wiebeim Löschen. Sehen Sie sich diesen Beitrag an .
Um das Post-Type-Slug-Präfix zuentfernen,sollten Sie sichin
single-link_rewrite_rules
und durchlaufen diese Regeln undentfernen dort auch das Präfix.Hinweis: Änderungenin der Permastruktur können zu URL-Konfliktenführen.
You have to alter the perma structure. By default your custom post type's post will only be found wenether the url starts with the slug prefix. When changing the prefix you will have similar issues as when deleting it, have a look at this post.
To achieve removal of the post type slug prefix you should hook into
single-link_rewrite_rules
and iterate through those rules and remove the prefix there as well.Note: changes in the perma structure may cause url conflicts.
-
@Paranoianicht 100% sicher,was Siemit "Verwenden Sie den Seitentyp"meinen.Mit dem Hook [`rewrite_rules_array`] (https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array) können Siejedoch auf alle Regeln zugreifen.@Paranoia not 100% sure what you mean with "use the page type". But with the [`rewrite_rules_array`](https://codex.wordpress.org/Plugin_API/Filter_Reference/rewrite_rules_array) hook you can access all rules.
- 0
- 2018-01-24
- Fleuv
-
- 2020-07-22
Passen Siefürmehrerebenutzerdefinierte Beitragstypen Folgendes an:
$query->set( 'post_type', array( 'post', 'custom1', 'page' ) && array( 'post', 'custom2', 'page' ) );
For multiple Custom Post Types adjust like this
$query->set( 'post_type', array( 'post', 'custom1', 'page' ) && array( 'post', 'custom2', 'page' ) );
Ich arbeite aneinem Plugin,das Listenerstellt. Nachdemicheine Listeerstellt hatte,wollteich den Slug aus der URL
entfernenBeitragstyp:
Entfernen Sie den Slug aus der URL:
(Dieser Code stammt von hier )
Nachdem Sie auf "Veröffentlichen"geklickt haben,wird der Slug/Single-Link/gelöscht. Beim Besuch der Seite wirdjedochimmereine 404 angezeigt. Das Ändern/erneute Speichern der Permalinks hatnichtgeholfen. Wasmacheichfalsch?