0

これは私の質問に関係するコードの一部です:

class My_Box {
  function __construct( $args ) {
    add_action( 'admin_footer', array( __CLASS__, 'add_templates' ) );
  }
  static function add_templates() {
    self::add_template( 'list' );
    self::add_template( 'grid' );
  }
  private static function add_template( $name ) {
    echo html('script',array( /*args*/));
  }
}

上記のコードのadd_actionでは、引数を次のような文字列にする必要があります。

add_action('handle','function_name');

次に、クラスの外でadd_actionステートメントを実行する必要があります。次のように考えました。

add_action( 'wp_footer', My_Box::add_templates() );

このステートメントは、「通知:未定義のオフセット:0」のデバッグメッセージを受け取りました。

このadd_actionステートメントを正しくコーディングする方法は?

4

3 に答える 3

1

クラスでのフェッチ用

add_action('handle', array(get_class(), 'function_name'));

クラス外

add_action('handle', array('class_name', 'func_name'));
于 2013-03-01T07:21:26.667 に答える
0

2 番目の引数として渡す配列add_actionはコールバックです。配列の最初の値はクラス名で、2 番目の値はそのクラスの静的メソッドの名前です。クラス内に__CLASS__は、そのクラスの名前が含まれます。したがって、これと同じ呼び出しを他の場所で行うには、それを実際のクラス名に置き換えるだけです。

add_action( 'wp_footer', array('My_Box', 'add_templates' );

コールバックの定義方法の詳細については、http ://www.php.net/manual/en/language.types.callable.php を参照してください。

于 2013-03-01T07:23:49.880 に答える
0

このhttp://codex.wordpress.org/Function_Reference/add_action#Using_add_action_with_a_class をチェックしてください

プラグインまたはテーマがクラスを使用して構築されている場合に add_action フックを使用するには、次のように、そのクラス内の関数名とともに $this を add_action 呼び出しに追加します。

class MyPluginClass
{
    public function __construct()
    {
         //add your actions to the constructor!
         add_action( 'save_post', array( $this, 'myplugin_save_posts' ) );
    }

    public function myplugin_save_posts()
    {
         //do stuff here...
    }
}
于 2013-03-01T07:33:24.057 に答える