6

クラス メソッドをコールバック関数のパラメーターに渡す方法を探しています。

私は通常次のように使用create_function()しますが、遅くてデバッグが難しいと聞いています。

add_action('init', create_function('', '$o = new AdminPageClass;'));
class AdminPageClass {

    function __construct() {
        add_action('admin_menu', array(&$this, 'admin_menu'));  
    }
    function admin_menu() {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin-page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
        ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
        <?php
    }
}

もちろん、このような追加機能を使用して実行できます。ただし、できればそれなしでやりたいです。

add_action('init', 'load_admin_page_class');
function load_admin_page_class() {
    $o = new AdminPageClass;
}

また、その前にクラス オブジェクトをインスタンス化すると可能になりますが、余分な行も作成されます。

$o = new AdminPageClass;
add_action('admin_menu', array(&$o, 'admin_menu'));

class AdminPageClass {

    function admin_menu() {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin-page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
        ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
        <?php
    }
}

私はいつも別々のファイルでクラスを定義するので、メインのプラグイン ファイルの行を減らす最初の方法を好みます。ただし、前述のとおり、の使用はcreate_function()避ける必要があります。

あなたの情報に感謝します。

4

2 に答える 2

13

静的メソッドを作成する必要がまったくないことがわかりました。

add_action('admin_menu', array(new AdminPageClass, "admin_menu"));

class AdminPageClass {

    function admin_menu() {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin_page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
    ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
    <?php
    }       
}
于 2012-10-10T14:53:15.580 に答える
7

クラス インスタンスとメソッド名を含む配列を返す静的メソッドを作成します。

/* 
    Plugin Name: static method callback demo
*/

add_action('admin_menu', AdminPageClass::_admin_menu());

class AdminPageClass {

    static function _admin_menu() {
        $class_name = get_class();
        $classinstance = new $class_name();
        return array(&$classinstance, "admin_menu");
    }
    function admin_menu($instantiate=false) {
        add_options_page(
            'Sample Admin Page Class', 
            'Sample Admin Page Class', 
            'manage_options',
            'sample_admin-page_class', 
            array(&$this, 'admin_page'));
    }
    function admin_page() {
        ?>
        <div class="wrap">
            <h1>Hi there</h1>
            <p>Hello World!</p>
        </div>
        <?php
    }
}
于 2012-10-10T11:36:49.460 に答える