web-dev-qa-db-ja.com

プラグインカスタムアクションフックが機能しない

私は自分自身のアクションフックを作成したいところに1つの基本的なプラグインを作成しようとしています。これが同じコードです。

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

do_action('basic_action_demo');
?>

今このプラグインをアクティブにした後、私は私の現在のテーマのfunction.phpファイルでこのアクションフックを使用したいのですが、同じコードは以下の通りです:

add_action('basic_action_demo','action_demo');

function action_demo()
{
    echo "I am inside";
}

今問題は私の夢中にされたアクションが決して呼び出されないことです、do_actionが無条件に呼び出されるのでそれが各ページロードで呼ばれるでしょうが、それは決して「action_demo」メソッドに入りません。

私がこれまで考え出したことは私のtheme'e function.phpファイルが実行される前にプラグインがロードされることです。そのため、ここではdo_actionが最初に呼び出され、次にadd_actionが呼び出されます。

ヒントは本当にいただければ幸いです。

更新:

以下のプラグインアクションが動作します。

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

add_action('basic_action_demo','action_demo');
do_action('basic_action_demo');

function action_demo()
{
    echo "I am Inside";
    die;
}
?>
1
Avinash

あなたのプラグインはテーマfunctions.phpファイルがロードされるのを待つ必要があります。これを試して:

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

add_action( 'after_setup_theme', function() {
    do_action( 'basic_action_demo' );
} );
?>

after_setup_themeフックは、functions.phpがロードされた直後に実行されます。

下記のコメントを更新してください。あなたのプラグインであなたのフォームのための関数を作成します:

<?php
/*
Plugin Name: Demo Plugin
Version: 1.0
*/

function output_my_form () {
    echo "I'm a form";
    // do your action here
    do_action( 'basic_action_demo' );
}
?>

それからあなたのテーマのfunctions.phpで:

if ( function_exists( 'output_my_form' ) ) {
    output_my_form();
}

これは簡単な例です。実際には、テーマのform.phpからその関数を呼び出したいと思うでしょう。

5
Twifty