Après avoir lu this j'ai commencé à déplacer mon CPT (à savoir "evento") vers un nouveau plugin (c'était auparavant dans un thème basé sur Bones -). Le nouveau plugin est essentiellement un dossier WP Boilerplate Plugin , où je viens de renommer toutes les occurrences de "plugin-name" en "dogmaweb", qui est le nom de mon nouveau plugin. N'oubliez pas que je suis un débutant en matière de codage WordPress.
J'ai copié trois fichiers du thème dans le dossier du plugin: le premier pour l'enregistrement CPT (bibliothèque/evento-post-type.php), le second pour le post individuel (/single_evento-type.php) et le troisième pour le Archive CPT (/archive_evento-type.php). J'ai également conservé la structure de répertoires Bones pour ces fichiers dans le plugin.
J'ai ensuite ajouté l'enregistrement CPT à ma classe de plugin (includes/class-dogmaweb.php) en ajoutant les éléments suivants à sa fonction load_dependencies ():
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'library/evento-post-type.php';
Ce fichier enregistre le nouveau CPT avec un appel à:
add_action( 'init', 'evento_post_type');
et puis il enregistre aussi deux taxonomies:
register_taxonomy( 'evento_cat', array('evento_type') ...
register_taxonomy( 'evento_tag', array('evento_type') ...
Après avoir déplacé les fichiers du thème vers le plug-in, l'ensemble du site a cessé de fonctionner. Je ne reçois qu'une "500 erreur de serveur interne" d'Apache. Le journal des erreurs Apache indique:
[Tue Dec 01 15:16:29.941885 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP Fatal error: Call to a member function add_rewrite_tag() on null in /home/lucio/workspace/netbeans/wpsite/wp-includes/rewrite.php on line 54
[Tue Dec 01 15:16:29.941933 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP Stack trace:
[Tue Dec 01 15:16:29.941941 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 1. {main}() /home/lucio/workspace/netbeans/wpsite/index.php:0
[Tue Dec 01 15:16:29.941955 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 2. require() /home/lucio/workspace/netbeans/wpsite/index.php:17
[Tue Dec 01 15:16:29.941960 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 3. require_once() /home/lucio/workspace/netbeans/wpsite/wp-blog-header.php:12
[Tue Dec 01 15:16:29.941964 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 4. require_once() /home/lucio/workspace/netbeans/wpsite/wp-load.php:37
[Tue Dec 01 15:16:29.941968 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 5. require_once() /home/lucio/workspace/netbeans/wpsite/wp-config.php:91
[Tue Dec 01 15:16:29.941972 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 6. include_once() /home/lucio/workspace/netbeans/wpsite/wp-settings.php:215
[Tue Dec 01 15:16:29.941975 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 7. run_dogmaweb() /home/lucio/workspace/netbeans/wpsite/wp-content/plugins/dogmaweb/dogmaweb.php:75
[Tue Dec 01 15:16:29.941980 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 8. Dogmaweb->__construct() /home/lucio/workspace/netbeans/wpsite/wp-content/plugins/dogmaweb/dogmaweb.php:71
[Tue Dec 01 15:16:29.941985 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 9. Dogmaweb->load_dependencies() /home/lucio/workspace/netbeans/wpsite/wp-content/plugins/dogmaweb/includes/class-dogmaweb.php:74
[Tue Dec 01 15:16:29.941989 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 10. require_once() /home/lucio/workspace/netbeans/wpsite/wp-content/plugins/dogmaweb/includes/class-dogmaweb.php:122
[Tue Dec 01 15:16:29.941993 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 11. register_taxonomy() /home/lucio/workspace/netbeans/wpsite/wp-content/plugins/dogmaweb/library/evento-post-type.php:91
[Tue Dec 01 15:16:29.941997 2015] [:error] [pid 11123] [client 127.0.0.1:48572] PHP 12. add_rewrite_tag() /home/lucio/workspace/netbeans/wpsite/wp-includes/taxonomy.php:389
Cependant, le même code dans le thème Bones fonctionne correctement. Je comprends que WP tente d'appeler add_rewrite_tag () sur une référence null, par exemple. $ c'est nul, et cela me fait penser que je devrais accrocher ailleurs mon enregistrement de taxonomies de type "evento" post. Je ne sais pas où. Veuillez noter que la ligne 91 de mon code correspond à l'enregistrement de la première taxonomie, mais je suis à peu près sûr que la même chose se produirait pour la seconde.
Bien que je n'aime pas prendre crédit pour la réponse de quelqu'un d'autre, je n'aime pas non plus laisser une question sans réponse quand la réponse existe déjà et qu'elle a déjà été donnée. J'espère Milo ça ne me dérange pas si je recopie la réponse de son commentaire.
Les appels register_taxonomy
doivent être rattachés à init
.