web-dev-qa-db-fra.com

Comment passer des paramètres à admin_notices?

Donc, il y a le cas suivant.

J'ai besoin d'afficher un nom à l'intérieur de 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' ) );

Comment peupler $name?

Je pense aux solutions suivantes:

N ° 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' ) );

N ° 2:

$name = 'John Doe';

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

Je n'aime pas les deux en quelque sorte, car le numéro 1 nécessite que $name soit peuplé de class large, ce qui pourrait prêter à confusion et que le numéro 2 nécessite au moins PHP 5.3.

5
Aley

Je pense qu'une meilleure implémentation serait une classe "message", par exemple:

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 );
    }
}

Cela vous permet d’instancier le message à tout moment avant le rendu:

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

Peut être fait beaucoup plus simple:

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

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

En savoir plus sur https://developer.wordpress.org/reference/functions/add_settings_error/

0
RavanH