Benutzerdefinierte WordPress-Beitragstypen unterbrechen den Permalink bei der Neuinstallation des Themas
-
-
Diesist kein Problem.Was Siebeschrieben haben,istnormal.Undgesund.This is a non-issue. What you described is normal. And healthy.
- 0
- 2010-10-21
- John P Bloch
-
Außerdem wares wahrscheinlichnurein Tippfehler,aber angesichts deseingefügten Codes sollte die obige URL "/product/"not "/products/" lauten.Also, it was probably just a typo, but, given the code you've pasted, the url above should say `/product/` not `/products/`.
- 0
- 2010-10-21
- John P Bloch
-
Hey John,ja dasistein Tippfehler.Die Beispiel-URL sollte http://www.mywebsite.com/product/product-name sein.Hey John, yes that is a typo. The example url should be http://www.mywebsite.com/product/product-name.
- 0
- 2010-10-21
- jnthnclrk
-
Ich verstehenicht,warum WP den Permalinkfür das CPT vergisst.Sicherlich solltefunctions.phpbei der Neuinstallationmeines Themas die cpterstellen und dafür sorgen,dass die Permalinks wieerwartetfunktionieren.I don't understand why WP forgets the permalink for the CPT. Surely, when I re-install my theme, functions.php should build the cpt and make the permalinks work as expected?
- 0
- 2010-10-21
- jnthnclrk
-
Ich schätzeesnicht,eine negative Stimmefüreinen Tippfehler zubekommen.Das Problemistimmernochein Problemfürmich,undich liebees,herauszufinden,wieichesbeheben kann.I don't appreciate getting a negative vote for a typo. The issue is still a problem for me, and I love some help figuring out how to fix it.
- 0
- 2010-10-21
- jnthnclrk
-
Negative Abstimmung warnichtich.Negative vote wasn't me.
- 0
- 2010-10-21
- John P Bloch
-
CPTs registrieren die Permalink-Struktur,tunjedochnichts,um die Permastruktur zur Datenbank hinzuzufügen (was WP verwendet,umnach Inhalten zu suchen).Um diese Regeln zur Datenbank hinzuzufügen,müssen Sie die Umschreiberegeln leeren.Diesbeinhaltet viele Prozessorressourcen,dienichtbei jedem Laden der Seite verwendet werden sollten.CPT's register the permalink structure, but don't do anything to add the permastruct to the database (which is what WP uses to check for content). To add those rules to the database you need to flush the rewrite rules. This involves lots of processor resources that shouldn't be used every page load.
- 0
- 2010-10-21
- John P Bloch
-
1 Antworten
- Stimmen
-
- 2010-10-21
Dieneue Permalink-Struktur wirdnurgespeichert,wenn
WP_Rewrite::flush_rules()
heißt.Da diesein teurer Vorgangist (Berechnen derneuen Regeln und Speichernin der Datenbank),sollten Sie diesnichtbei jedem Aufruf voninit
tun,sondernnur,wenn Sie die Struktur ändern.Derbenutzerdefinierte Beitragstypmussjedochbei jedeminit
-Aufruf registriert werden,daerin einem PHP-Arrayim Speicher undnichtin der Datenbankgespeichert wird (weshalb derbenutzerdefinierte Beitragbeim Wechseln der Themen vergessen wurde:theDie Permalink-Struktur warnoch vorhanden,bezog sichjedoch aufeinen benutzerdefinierten Beitragstyp,dernichtgeladen wurde undeinen Fehler verursachte.The new permalink structure is only saved when
WP_Rewrite::flush_rules()
is called. Because this is an expensive operation (calculating the new rules and saving them to the database), you should not do it on everyinit
call, but only when you change the structure. The custom post type however must be registered at everyinit
call, since it is saved in a PHP array in memory, not in the database (which is why it forgot the custom post when you switched themes: the permalink structure still existed but referred to a custom post type that was not loaded, giving an error).-
Vielen Dank!Daserklärt,warum das Navigieren zu Einstellungen -> Permalinks das Problembehebt,wennflush_rules () aufgerufen wird. Können Siemir sagen,wieichmein Theme und CPT konfigurieren soll,damit Benutzer deinstallieren undneuinstallieren können,ohne dieses Problem zubekommen?Ich denke,WP_Rewrite ::flush_rules ()in functions.php zu setzenisteine schlechte Idee?Thank you! That explains why browsing to Settings -> Permalinks fixes it as flush_rules() gets called. Can you tell me how I should configure my Theme and CPT so users can uninstall and reinstall without getting this problem? I guess putting WP_Rewrite::flush_rules() in functions.php is a bad idea?
- 0
- 2010-10-21
- jnthnclrk
-
Oder sollteich das als separate Frage stellen?Or should I ask that as a separate question?
- 0
- 2010-10-21
- jnthnclrk
-
@trnsfrmr: Diemeisten Leutefügen diese Art von Codein ein Pluginein und verbinden sich dann über [`register_activation_hook ()`] (http://codex.wordpress.org/Function_Reference/register_activation_hook)mit der Aktivierung dieses Plugins.Dies wird Themenänderungen "überleben".Wenn Siees wirklichin Ihrem Thema habenmöchten,können Sie versuchen,sichin die Aktion [`switch_theme`] (http://codex.wordpress.org/Function_Reference/switch_theme)einzubinden.@trnsfrmr: Most people put this kind of code in a plugin, and then hook into the activation of that plugin via [`register_activation_hook()`](http://codex.wordpress.org/Function_Reference/register_activation_hook). This will "survive" theme changes. If you really want it in your theme, you could try hooking into the [`switch_theme`](http://codex.wordpress.org/Function_Reference/switch_theme) action.
- 0
- 2010-10-21
- Jan Fabry
-
Keine Notwendigkeit,ich habe das Problembehoben,indemichnachmeinem Aufruf von register_post_type diefolgende Zeile verwendet habe:flush_rewrite_rules (false);No need, I've fixed the problem by using the following line after my register_post_type call: flush_rewrite_rules( false );
- 0
- 2010-10-21
- jnthnclrk
-
@trnsfrmr: Diesfunktioniert,wirdjedochnichtempfohlen,daeseinige Zeit dauert,die Datenbank zu löschen,die Regelnneu zuberechnen und sie dannerneut zu speichern.Selbst wenn Sie keinen "harten" Flush durchführen (siein ".htaccess" schreiben),erfordert dies Datenbankoperationen.Es lohnt sich also wirklich,die "richtigen" Aktivierungshaken zu verwenden.@trnsfrmr: This works, but it is not recommended, because it takes some time to clear the database, re-calculate the rules and then save them again. Even if you don't do a "hard" flush (writing them to `.htaccess`), this requires database operations. So it really pays off to use the "proper" activation hooks.
- 0
- 2010-10-21
- Jan Fabry
Diesistein ziemlich seltsames Problem. Icherstelleeinen benutzerdefinierten WordPress-Beitragstypin meiner Dateifunctions.phpim folgenden Format:
Diesgibt mir diefolgende URL-Strukturfürmeine Produkte: http://www.mywebsite.com/products/product-name .
Wennichjedoch zueinem anderen Thema (TwentyTen) wechsle und dann zurück wechsle,vergisst WordPress den Permalink. Wennichjetzt zur obigen URLnavigiere,erhalteichmeine 404-Seite.
Das wirklich Seltsame,dasmir aufgefallenist,ist,dassich dieses Problembeheben kann,indemich zu Einstellungen -> Permalinksin adminnavigiere. Dadurch wird das Problem vorübergehendbehoben,bis dasnächste Thema deinstalliert/neuinstalliert wird.
Hatnochjemandein ähnliches Problem?