message = $message; $this->dismisser = $dismisser; $this->dismissMessage = $dismissMessage; } /** * Registers hooks to WordPress. * * This is a separate function so you can control when the hooks are registered. * * @return void */ public function registerHooks() { \add_action( 'admin_notices', array( $this, 'renderMessage' ) ); } /** * Renders the messages present in the global to notices. * * @return void */ public function renderMessage() { $dismissListener = new WPMessageDismissListener( $this->dismisser ); $dismissListener->listen(); if ( $this->dismisser->isDismissed() ) { return; } $dismissButton = \sprintf( '%1$s', \esc_html( $this->dismissMessage ), \esc_url( $dismissListener->getDismissURL() ) ); // phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- output correctly escaped directly above and in the `kses()` method. \printf( '

%1$s

%2$s

', $this->kses( $this->message->body() ), $dismissButton ); // phpcs:enable } /** * Removes content from the message that we don't want to show. * * @param string $message The message to clean. * * @return string The cleaned message. */ public function kses( $message ) { return \wp_kses( $message, array( 'a' => array( 'href' => true, 'target' => true, ), 'strong' => true, 'p' => true, 'ul' => true, 'li' => true, ) ); } }