私はWordpressの開発(そして一般的にはphp)に不慣れなので、私のプラグインのphpファイルの中の関数の実行について混乱しています。私はプラグインがアクティブになったときに実行されるregister_activation_hook
関数を作成することを示す複数のガイドを見ました。ただし、activationフック関数の後には、データベースに多数のオプションを追加するadd_action('init')
呼び出しが常にあります。
Wordpressが私のプラグインのphpファイルを評価してregister_activation_hook
呼び出しを見つけたとき、なぜそれがafterプラグインがアクティブになるまでadd_action('init')
呼び出しを実行しないのですか? Wordpressが私のプラグインのphpファイルを評価し、そのファイルにadd_action('init')
への関数呼び出しがある場合、それは制御構造の中にはないので、ページが評価されるときにその関数呼び出しが実行されるようです。
私は、Wordpressがこのファイルをアクティブにする前に評価していることを知っています。なぜなら、それは私のプラグイン名と作者、そしてそれがアクティブになる前のすべてを知っているからです。ファイルを評価しているのであれば、なぜadd_action('init')
呼び出しを実行しないのでしょうか。
私の質問は意味がありますか?なぜ物事がこのように機能しているのかを理解するのを手助けできる人はいますか?
これが私が話していることの例です。
register_activation_hook(__FILE__, 'halloween_store_install');
function halloween_store_install() {
$hween_options_arr = array(
'currency_sign' => '$'
);
//save our default option values
update_option( 'halloween_options', $hween_options_arr );
}
add_action( 'init', 'halloween_store_init' ); // <-- why is this not executed until my plugin is activated?
function halloween_store_init(){
$labels = array(
'name' => __( 'Products', 'halloween-plugin' ),
'singular_name' => __( 'Product', 'halloween-plugin' ),
'add_new' => __( 'Add New', 'halloween-plugin' ),
'add_new_item' => __( 'Add New Product', 'halloween-plugin' ),
'edit_item' => __( 'Edit Product', 'halloween-plugin' ),
'new_item' => __( 'New Product', 'halloween-plugin' ),
'all_items' => __( 'All Products', 'halloween-plugin' ),
'view_item' => __( 'View Product', 'halloween-plugin' ),
'search_items' => __( 'Search Products', 'halloween-plugin' ),
'not_found' => __( 'No products found', 'halloween-plugin' ),
'not_found_in_trash' => __( 'No products found in Trash', 'halloween-plugin' ),
'menu_name' => __( 'Products', 'halloween-plugin' )
);
$args = array(
'labels' => $labels,
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'show_ui_menu' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'has_archive' => true,
'hierarchical' => false,
'menu_position' => null,
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' )
);
register_post_type( 'halloween-products', $args);
}
WordPressはアプリケーションであり、そのアプリケーション内で実行されるすべてのものはフックによって呼び出されます。
その場合、2つのメインフック関数は add_action
と add_filter
ですが、 register_activation_hook
と register_deactivation_hook
はアクティブ化と非アクティブ化のコンテキストで使用される他の関数です。
例えば wp_schedule_event
のような時間に敏感なアクション(擬似クーロン)をフックする関数のような、フック定義関数がもっとあります。
コーデックスは add_actions
と共に使用される利用可能なアクションフック(一般的にsequenceと呼ばれる順)の良いリストを提供し、 add_filter
と共に使用されるフィルタを提供します。
私は関数を定義しているすべてのフックのためのそのようなリストを知りません。
私のコメントで述べたように、これらの関数のほとんどは、これらのフックに文脈を与えるPHPの call_user_func
関数の単なるインテリジェントラッパーです。
そのため、プラグインやテーマがインストールされると、それらのファイルが技術的に読み取られても(少なくともメインファイルが読み込まれても)自動的には実行されません。
plugin または theme のメインファイルには、テーマ名、作者、バージョンなど、プラグイン/テーマのパラメータを定義するコメントセクションがあります。
テーマでは、style.css
ファイルが読み込まれ、これに似たものが含まれます。
/*
Theme Name: Twenty Thirteen
Theme URI: http://wordpress.org/themes/twentythirteen
Author: the WordPress team
Author URI: http://wordpress.org/
Description: The 2013 theme for WordPress takes us back to the blog, featuring a full range of post formats, each displayed beautifully in their own unique way. Design details abound, starting with a vibrant color scheme and matching header images, beautiful typography and icons, and a flexible layout that looks great on any device, big or small.
Version: 1.0
License: GNU General Public License v2 or later
License URI: http://www.gnu.org/licenses/gpl-2.0.html
Tags: black, brown, orange, tan, white, yellow, light, one-column, two-columns, right-sidebar, flexible-width, custom-header, custom-menu, editor-style, featured-images, microformats, post-formats, rtl-language-support, sticky-post, translation-ready
Text Domain: twentythirteen
This theme, like WordPress, is licensed under the GPL.
Use it to make something cool, have fun, and share what you've learned with others.
*/
同様に、プラグインのメインのPHPファイルには、これに似たものを含むコメントセクションがあります。
/*
Plugin Name: My Toolset
Plugin URI: http://URI_Of_Page_Describing_Plugin_and_Updates
Description: This describes my plugin in a short sentence
Version: 1.5
Author: John Smith
Author URI: http://URI_Of_The_Plugin_Author
License: GPL2
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Domain Path: /languages
Text Domain: my-toolset
*/
最後に、テーマ/プラグインが起動されると、WPのフックロードシーケンスに従って残りのファイルのロードを続け、開発者がこれらのアクションフックまたはフィルタにフックしたものすべてをロードします。
そしてそれらの開発者が作成した関数では、すべての魔法はその特定のプラグインまたはテーマに起こります。
WPロードシーケンスのかなり包括的で読む価値のある説明はuserabuser here によって作られました。