web-dev-qa-db-ja.com

functions.phpのadd_action、pluginのdo_action?

アクティブ化されたWordPressプラグイン内の定義済みのadd_action関数に対して、現在アクティブなWordPressテーマのfunctions.phpファイルにdo_action関数を設定しようとしています。

私の現在アクティブなWordPressテーマのadd_actionファイルのfunctions.php関数は機能しません。

ただし、現在アクティブなWordPressテーマのadd_actionファイルから、functions.php関数の直前に、do_action関数をアクティブ化されたWordPressプラグインファイルにコピーすれば問題ありません。

これを行う方法はありますか?

1
Boyster

ここで暗闇の中で撃ったが….

テーマが処理される前にdo_action定義を持つプラグインがフックされる可能性は十分にあります。

do_actionが定義されている場所を調べ、いつフックされているのかを調べます。

do_action定義もフックされていることを関数にフックし、THENがそのアクション定義にフックする必要があります。

例:

カスタム関数でフックしようとしているdo_action定義を含むプラグインファイルを開きます。

do_action定義がプラグイン関数内にあるかどうかを確認してください。

その場合、プラグインを調べて、do_action定義を含むその特定の関数名のadd_action()参照を見つけます。

そのフックが何であるか書き留めます。

これで、WordPressがdo_action定義を含むプラグインの関数をいつ呼び出すかがわかります。

テーマfunctions.phpファイルには、次のコードのようなものがあります。

/**
 * This is the WordPress action the plugin's do_action function definition is 
 * hooked to.
 *
 * Example: This hook could be anything. I'm not saying the hook will be: "plugins_loaded" 
 * for sure, but if it was "plugins_loaded"... After WordPress loads and instantiates all 
 * of it's activated plugins, WordPress will fire the plugin's function containing the 
 * plugin's do_action definition (As long as the plugin you are trying to work with is 
 * activated). So you're getting on the same level as the plugin when it needs WordPress to 
 * execute this particular defined custom action and telling WordPress that your theme function
 * needs to be on that same level as well, before it can hook to your plugin's do_action reference.
 */
add_action('plugins_loaded', 'wpse_setup_theme');
function wpse_setup_theme(){
    /**
     * This your function that you want fired then the do_action is executed.
     *
     * Example: If the plugin file has a function named osmosis_jones() and 
     * inside osmosis_jones(), there is a do_action() reference. Note down 
     * the do_action tag name inside the osmosis_jones() function.
     */
    add_action('the_plugin_do_action_tag_name', 'wpse_display_theme_header');
}

function wpse_display_theme_header(){
    echo 'THEME HEADER HERE!';
}
4
Michael Ecklund