web-dev-qa-db-ja.com

Admin_noticesにパラメータを渡る方法

したがって、次のような場合があります。

admin_noticesの中に名前を表示する必要があります。

class MyPlugin_Admin {
    public static function render_admin_notice() {
        echo $name . ' has been upgraded.';
    }
}

add_action( 'admin_notices', array( 'MyPlugin_Admin', 'render_admin_notice' ) );

$nameを追加する方法?

私は以下の解決策を考えています。

1番:

class MyPlugin_Admin {

    public static $name;

    public static function render_admin_notice() {
        echo self::$name . ' has been upgraded.';
    }
}

MyPlugin_Admin::$name = 'John Doe';

add_action( 'admin_notices', array( 'MyPlugin_Admin', 'render_admin_notice' ) );

その2

$name = 'John Doe';

add_action('admin_notices', function() use ($name){ 
    echo $name . ' has been upgraded.'; 
});

なぜなら、No.1はclassの幅で移入するために$nameを必要とし、そのため混乱を招く可能性があり、No.2は少なくともPHP 5.3を必要とするためです。

5
Aley

より良い実装は「メッセージ」クラスになると思います。

class WPSE_224485_Message {
    private $_message;

    function __construct( $message ) {
        $this->_message = $message;

        add_action( 'admin_notices', array( $this, 'render' ) );
    }

    function render() {
        printf( '<div class="updated">%s</div>', $this->_message );
    }
}

これにより、レンダリングの前にいつでもメッセージをインスタンス化することができます。

if ( $done ) {
    new WPSE_224485_Message( "$name has been upgraded." );
}
10
TheDeadMedic

もっとずっと簡単にすることができます。

$message = $name . ' has been upgraded.';

add_settings_error( 'my_admin_notice', 'my_admin_notice', $message, 'updated' );

続きを読む https://developer.wordpress.org/reference/functions/add_settings_error/

0
RavanH