functions.php、ウィジェット、プラグインの間で、どちらが最初にロードされますか?


78

お客様は、使用する特定のカルーセルプラグインをウィジェット化できるかどうかを尋ねます。つまり、プラグインの関数を呼び出すfunctions.php内にウィジェットを作成する必要があります。つまり、functions.phpファイルが読み込まれたときにWordPressで関数を使用できるように、プラグインのコードを最初に読み込む必要があります。それはうまくいくでしょうか?

回答:


185

プラグインはテーマの直前にロードされます(はい、これを使用する言い訳を探していました):

ここに画像の説明を入力してください

ただし、どちらかをコード実行のポイントと考えるのは間違っています。ほとんどの場合、すべてをinitフックして、フックよりも早く実行する必要があります。Codexウィジェットによると、に登録するregister_widget()必要がありますwidget_init

この場合、ロードの順序は重要ではないため、どのような場合でもウィジェットが必要とする時間までにすべてをロードします。


3
WPコアの負荷は意味をなしません。
ガガリン

7
2016年に更新されたチャートを入手できる可能性はありますか?;-)
jgraup

9
@jgraupは、WordPressのコアで物事が変わると言います... :)
ラースト

1
@ Rarst、touché;-)
jgraup

2
@IsaacLubowはい、複数の列の内容がそれぞれのコンテキストで実行されます。コア負荷の同じ重要なチャンクがすべてのリクエストに常に含まれていることがわかります。
ラースト

16

興味深いアプローチの1つは、一連の実行でファイルへのすべてのフックをリストすることです。

add_action( 'all', '_20161224_printer' );
function _20161224_printer( $r ){

    $line =  microtime(true)*10000 . ' ' . $r .  "\n";
    $fp = fopen( ABSPATH . 'hooks.txt', 'a+');
    fwrite($fp, $line);
    fclose($fp);

}

そして、次のような出力が得られます。

14825992300742 pre_option_blog_charset
14825992300743 option_blog_charset
14825992300743 plugins_loaded
14825992300744 load_default_widgets
14825992300745 load_default_embeds
14825992300745 wp_audio_extensions
14825992300745 wp_audio_embed_handler
14825992300746 wp_video_extensions
14825992300746 wp_video_embed_handler
14825992300746 sanitize_comment_cookies
14825992300747 pre_option_permalink_structure
14825992300747 option_permalink_structure
14825992300748 pre_option_wp_user_roles
14825992300748 option_wp_user_roles
14825992300749 wp_roles_init
14825992300749 setup_theme
14825992300749 pre_option_template
14825992300750 option_template
14825992300750 template
14825992300750 theme_root
14825992300751 template_directory
14825992300751 pre_option_stylesheet
14825992300751 option_stylesheet
14825992300751 stylesheet
14825992300752 theme_root
14825992300752 stylesheet_directory
14825992300752 pre_option_WPLANG
14825992300753 query
14825992300754 default_option_WPLANG
14825992300755 locale
14825992300755 override_unload_textdomain
14825992300755 unload_textdomain
14825992300755 override_load_textdomain
14825992300756 load_textdomain
14825992300756 load_textdomain_mofile
14825992300756 locale
...
many many more action hooks
...
14825992302886 wp_parse_str
14825992302886 nonce_life
14825992302886 salt
14825992302886 wp_parse_str
14825992302887 esc_html
14825992302887 logout_url
14825992302887 clean_url
14825992302887 gettext
14825992302887 wp_after_admin_bar_render
14825992302888 pre_option_template
14825992302888 option_template
14825992302888 template
14825992302888 theme_root
14825992302888 template_directory
14825992302889 parent_theme_file_path
14825992302889 shutdown

完全なリストは、WPSOの投稿ごとに30.000文字の制限に収まらないため、多くのアクションフックを削除しました。

上記のコードをプラグインに入れます。あなたがテーマからそれを行う場合、あなたはfunctions.phpキャッチしませんplugins_loaded。テーマの前にプラグインがロードされているもう1つの証拠。

このチェックの利点は多数ありますが、呼び出すページテンプレートごとに、またはダッシュボードにいる場合は、出力が異なることに注意してください。

私は単にこれを/?p=1Hello Worldページから呼び出しました。

単一のプラグインをアクティブにしていない場合、このコードをmu-pluginsフォルダーに入れることができます。

WP FS APIを使用した方が良いかもしれませんが、この方法は本当に簡潔です。


WP-adminのプラグインがテーマの後またはインストールのために...とフロントエンドプラグインにロードされている内部のテーマの前に読み込まれている...
ヴィシャル・クマールSahu

3

プラグインの.phpファイル内にウィジェットを含めることができます(そして、両方が使用できる共有グローバル変数を持つことができます)。しばらく前に偶然見つけたサンプルコードを使用チュートリアルを次に示します。

また、典型的なリクエスト中に実行されるアクションのリストを実行順に示します。#2と#10は、プラグインを最初にロードすることを提案しています。functions.phpについてはわかりません。


1
正しい、プラグインはテーマファイルの前にロードされます。プラグインにコードが含まれているが、必要なウィジェットが含まれていない場合、テーマのfunctions.phpでウィジェットを定義できます。
ゴールデンアップル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.