Sau khi đọc xong , tôi bắt đầu chuyển CPT của mình (cụ thể là "evento") sang một plugin mới (nó nằm trong chủ đề dựa trên Bones trước đó). Plugin mới về cơ bản là một thư mục Plugin WP Boilerplate mới , nơi tôi vừa đổi tên tất cả các "tên plugin" thành "dogmaweb", là tên của plugin mới của tôi. Xin lưu ý tôi là người mới bắt đầu khi nói về mã hóa WordPress.
Tôi đã sao chép ba tệp từ chủ đề vào thư mục plugin: tệp đầu tiên để đăng ký CPT (library / evento-post-type.php), tệp thứ hai cho một bài đăng (/single_evento-type.php) và thứ ba cho Lưu trữ CPT (/archive_evento-type.php). Tôi cũng đã giữ cấu trúc thư mục Bones cho các tệp đó trong plugin.
Sau đó, tôi đã đăng ký CPT vào lớp plugin của mình (bao gồm / class-dogmaweb.php) thêm phần sau vào hàm load_dependencies () của nó:
require_once plugin_dir_path( dirname( __FILE__ ) ) . 'library/evento-post-type.php';
Tập tin này đăng ký CPT mới với một cuộc gọi đến:
add_action( 'init', 'evento_post_type');
và sau đó nó cũng đăng ký hai nguyên tắc phân loại:
register_taxonomy( 'evento_cat', array('evento_type') ...
register_taxonomy( 'evento_tag', array('evento_type') ...
Sau khi chuyển các tệp từ chủ đề sang plugin, toàn bộ trang web đã ngừng hoạt động. Tôi chỉ nhận được "500 lỗi máy chủ nội bộ" từ Apache. Nhật ký lỗi Apache hiển thị:
[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
Tuy nhiên, cùng một mã trong chủ đề Bones hoạt động chính xác. Tôi hiểu rằng WP đang cố gắng gọi add_rewrite_tag () trên một tham chiếu null, ví dụ $ this là null và điều đó khiến tôi nghi ngờ rằng tôi nên móc đăng ký phân loại bài đăng "evento" của mình ở một nơi khác. Tôi chỉ không biết ở đâu. Xin lưu ý rằng dòng 91 trong mã của tôi khớp với đăng ký phân loại đầu tiên, nhưng tôi khá chắc chắn điều tương tự cũng sẽ xảy ra cho lần thứ hai.
register_taxonomy
cuộc gọi của bạn cũng bên trongevento_post_type
chức năng? đăng ký phân loại nên được nối vớiinit
.