教文館の社内ナレッジベースです。

基本をおさらい。add_action関数。よく使うが、どういう働き?

(疑問)そもそもカスタム投稿を追加しようとした時に、この関数を記述してもしなくても追加できてしまうのが???だった。

Codexの説明

特定のアクションに関数をフックします。

アクションフックの一覧についてはアクションフック一覧をご覧ください。アクションは(通常は)WordPress コアが do_action() を呼び出すときにトリガーされます。

はい?ってカンジでした。もうこの辺りいつもながらざっくりとしか理解していないんですよね。適当な知識しかないといつか痛い目に遭いそうなので多少深める忘備録。

特定のアクションに関数をフックします。

つまり「Wordpress本体があるプログラム上のアクションを発生させた」時に「追加の別アクション(関数)」を「フック」させる関数ですね。代表例として「プラグイン」は必ずこの関数が必要。フックは引っ掛けるとかそういう英語だが、プラグイン作っている人には当たり前過ぎる関数。

書き方は

[php] <?php add_action( $tag, $function_to_add, $priority, $accepted_args ); ?>

add_action(‘WordPress本体関数(アクション名)’, ‘加えたい関数名’, [priority], [accepted_args]);

*priorityは優先度(デフォルト10), accepted_argsは受け取る引数の数(デフォルト1)通常は記述の必要なしかな?

[/php]

例)

add_action( ‘init’, ‘create_post_type’ );

init →ログインしているユーザーがホームページを表示したときに実行されるアクションの一つ。

create_post_type → これがオリジナル関数名。ネーミングはなんでもいいんですよ定義さえすれば。定義の場所はプラグイン内とか、functions.phpでしょうね。わかりやすいようにつければいいと思います。

今回はcreate_post_typeとしていますが、その中身はポストタイプを作成する関数「register_post_type」が展開されます。これ、説明には

投稿タイプを作成または変更します。init よりも前に register_post_type を使用しないでください。

となっているけれど、そうすると、initが発生(アクション)してからこの関数をフックするわけですから、

add_action( ‘init’, ‘create_post_type’ );

とするのは納得出来ました。

それで、最初の自分の疑問に対する回答。

じゃ、なんで「add_action」関数を付けても付けなくても動く(カスタム投稿が付加される)の?はい、それはですね、「register_post_type」がすでにWordPressのコア(wp-includes/post.php )で定義されているからです!おそらくww!すでに定義されてるものなので、「加えたい関数」はオリジナルのものではないということですね。ここにオリジナルなアクションを付加する場合は別でしょうが、単に投稿タイプを付加するだけならフック関数は必要ないということでしょうね。

以上!