web-dev-qa-db-ja.com

Nullでメンバー関数add_rewrite_tag()を呼び出す

this を読んだ後、私は _ cpt _ (つまり "evento")を新しいプラグインに移動し始めました(以前は Bones - ベースのテーマでした)。新しいプラグインは基本的に新しい WP Boilerplate Plugin フォルダーです。ここでは、すべての "plugin-name"の名前を "dogmaweb"に変更しました。これは私の新しいプラグインの名前です。 WordPressのコーディングに関しては私が初心者であることを忘れないでください。

テーマからプラグインフォルダに3つのファイルをコピーしました。1つはCPT登録用(library/evento-post-type.php)、もう1つは単一投稿用(/single_evento-type.php)と3つめのファイルです。 CPTアーカイブ(/archive_evento-type.php)私もプラグインでそれらのファイルのためにBonesディレクトリ構造を維持しました。

次に、CPT登録を自分のプラグインクラス(includes/class-dogmaweb.php)にフックして、そのload_dependencies()関数に以下を追加しました。

require_once plugin_dir_path( dirname( __FILE__ ) ) . 'library/evento-post-type.php';

このファイルは新しいCPTを以下の呼び出しで登録します。

add_action( 'init', 'evento_post_type');

そしてそれは二つの分類法も登録します。

register_taxonomy( 'evento_cat', array('evento_type') ...
register_taxonomy( 'evento_tag', array('evento_type') ...

ファイルをテーマからプラグインに移動した後、サイト全体が機能しなくなりました。 Apacheから "500 Internal server error"が出るだけです。 Apacheのエラーログは次のように示しています。

[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

ただし、Bonesテーマの同じコードは正しく機能します。 WPがnull参照に対してadd_rewrite_tag()を呼び出そうとしていることを私は理解しています。 $これはnullです、そしてそれは私が私がどこか他の場所で私の "evento"ポストタイプ分類法登録を引っ掛けるべきであると疑わせます。場所がわからないだけです。私のコードの91行目が最初の分類登録と一致することに注意してください、しかし私は同じことが2番目のものにも起こるだろうと確信しています。

5
Lucio Crusca

私は他の誰かの答えを信用するのは好きではありませんが、答えが存在し、それがすでに与えられているときにも、答えなしで質問を残すのは好きではありません。 Milo 私が彼のコメントから答えをコピーしても構わないと思います。

register_taxonomy呼び出しはinitにフックする必要があります。

16
Lucio Crusca