Les types de publications personnalisées WordPress cassent le lien permanent lors de la réinstallation du thème
-
-
C'est unfauxproblème.Ce que vous avez décritestnormal.Etbonpour la santé.This is a non-issue. What you described is normal. And healthy.
- 0
- 2010-10-21
- John P Bloch
-
Deplus,cen'étaitprobablement qu'unefaute defrappe,mais,étant donné le code que vous avez collé,l'url ci-dessus devraitindiquer `/product/`not `/products/`.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,oui c'est unefaute defrappe.L'exemple d'URL doit être http://www.mywebsite.com/product/product-name.Hey John, yes that is a typo. The example url should be http://www.mywebsite.com/product/product-name.
- 0
- 2010-10-21
- jnthnclrk
-
Jene comprendspaspourquoi WP oublie lepermalien du CPT.Sûrement,quandje réinstallemonthème,functions.php devrait construire le cptet fairefonctionner lespermaliens commeprévu?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
-
Jen'aimepas obtenir un votenégatifpour unefaute defrappe.Leproblèmeesttoujours unproblèmepourmoi,et j'aime avoir de l'aidepour savoir comment le résoudre.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
-
Le votenégatifn'étaitpasmoi.Negative vote wasn't me.
- 0
- 2010-10-21
- John P Bloch
-
Le CPTenregistre la structure dupermalien,maisne fait rienpour ajouter lainfrastructure à labase de données (c'est ce que WP utilisepour vérifier le contenu).Pour ajouter ces règles à labase de données,vous devez vider les règles de réécriture.Celaimplique denombreuses ressources deprocesseur quine devraientpas être utilisées à chaque chargement depage.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 réponses
- votes
-
- 2010-10-21
Lanouvelle structure depermalienn'estenregistrée que lorsque
WP_Rewrite::flush_rules()
est appelé.Commeil s'agit d'une opération coûteuse (calculer lesnouvelles règleset lesenregistrer dans labase de données),vousne devezpas lefaire à chaque appelinit
,mais uniquement lorsque vousmodifiez la structure.Letype depublicationpersonnalisé doit cependant êtreenregistré à chaque appelinit
,carilestenregistré dans untableau PHPen mémoire,pas dans labase de données (c'estpourquoiil a oublié lemessagepersonnalisé lorsque vous avez changé dethème: lela structurepermalienexistaittoujoursmaisfaisait référence à untype depublicationpersonnalisé quin'apas été chargé,ce qui a donné uneerreur).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).-
Je vous remercie!Celaexpliquepourquoi lanavigation dans Paramètres -> Permaliens le corrige lorsqueflush_rules ()est appelé. Pouvez-vousme dire commentje dois configurermonthèmeet mon CPTpour que les utilisateurspuissent désinstalleret réinstaller sans rencontrer ceproblème?Je suppose quemettre WP_Rewrite ::flush_rules () dansfunctions.phpest unemauvaiseidée?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
-
Ou devrais-jeposer cette question séparément?Or should I ask that as a separate question?
- 0
- 2010-10-21
- jnthnclrk
-
@trnsfrmr: Laplupart desgensmettent cetype de code dans unplugin,puis se connectent à l'activation de ceplugin via [`register_activation_hook ()`] (http://codex.wordpress.org/Function_Reference/register_activation_hook).Cela "survivra" aux changements dethème.Si vous le voulez vraiment dans votrethème,vouspouvezessayer de vous connecter à l'action [`switch_theme`] (http://codex.wordpress.org/Function_Reference/switch_theme).@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
-
Pasbesoin,j'ai résolu leproblèmeen utilisant la ligne suivante aprèsmon appel register_post_type: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: Celafonctionne,mais cen'estpas recommandé,car celaprend un certaintempspoureffacer labase de données,recalculer les règles,puis lesenregistrer ànouveau.Même si vousne faitespas de vidage «dur» (en les écrivant dans «.htaccess»),celanécessite des opérations debase de données.Ilest donc vraiment avantageux d'utiliser les «bons» hooks d'activation.@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
C'est unproblème assez étrange. Je crée untype depublication WordPresspersonnalisé dansmonfichierthemesfunctions.phpen utilisant leformat suivant:
Celame donne la structure d'url suivantepourmesproduits: http://www.mywebsite.com/products/product-name .
Cependant,sije passe à un autrethème (TwentyTen)puis queje repasse WordPress oublie lepermalien,maintenant,lorsqueje navigue vers l'URL ci-dessus,j'obtiensmapage 404.
La chose vraiment étrange quej'ai remarquéeest queje peux résoudre ceproblèmeen accédant à Paramètres -> Permaliens dans admin. Cela résouttemporairement leproblèmejusqu'à laprochaine désinstallation/réinstallation duthème.
Quelqu'un d'autre aeu unproblème similaire?