: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
namespace Yoast\WP\SEO\Integrations\Admin;
use WPSEO_Admin_Asset_Manager;
use Yoast\WP\SEO\Conditionals\Admin_Conditional;
use Yoast\WP\SEO\Conditionals\Non_Multisite_Conditional;
use Yoast\WP\SEO\Helpers\Options_Helper;
use Yoast\WP\SEO\Integrations\Integration_Interface;
use Yoast\WP\SEO\Presenters\Admin\Notice_Presenter;
* Deactivated_Premium_Integration class
class Deactivated_Premium_Integration implements Integration_Interface {
* The admin asset manager.
* @var WPSEO_Admin_Asset_Manager
private $admin_asset_manager;
public static function get_conditionals() {
return [ Admin_Conditional::class, Non_Multisite_Conditional::class ];
* First_Time_Configuration_Notice_Integration constructor.
* @param Options_Helper $options_helper The options helper.
* @param WPSEO_Admin_Asset_Manager $admin_asset_manager The admin asset manager.
public function __construct(
Options_Helper $options_helper,
WPSEO_Admin_Asset_Manager $admin_asset_manager
$this->options_helper = $options_helper;
$this->admin_asset_manager = $admin_asset_manager;
public function register_hooks() {
\add_action( 'admin_notices', [ $this, 'premium_deactivated_notice' ] );
\add_action( 'wp_ajax_dismiss_premium_deactivated_notice', [ $this, 'dismiss_premium_deactivated_notice' ] );
* Shows a notice if premium is installed but not activated.
public function premium_deactivated_notice() {
if ( $pagenow === 'update.php' ) {
if ( $this->options_helper->get( 'dismiss_premium_deactivated_notice', false ) === true ) {
$premium_file = 'wordpress-seo-premium/wp-seo-premium.php';
if ( ! \current_user_can( 'activate_plugin', $premium_file ) ) {
if ( $this->premium_is_installed_not_activated( $premium_file ) ) {
$this->admin_asset_manager->enqueue_style( 'monorepo' );
/* translators: 1: Yoast SEO Premium 2: Link start tag to activate premium, 3: Link closing tag. */
\__( 'You\'ve installed %1$s but it\'s not activated yet. %2$sActivate %1$s now!%3$s', 'wordpress-seo' ),
\self_admin_url( 'plugins.php?action=activate&plugin=' . $premium_file ),
'activate-plugin_' . $premium_file
// phpcs:disable WordPress.Security.EscapeOutput.OutputNotEscaped -- Output escaped above.
echo new Notice_Presenter(
/* translators: 1: Yoast SEO Premium */
\sprintf( \__( 'Activate %1$s!', 'wordpress-seo' ), 'Yoast SEO Premium' ),
'yoast-premium-deactivated-notice'
// Enable permanently dismissing the notice.
function dismiss_premium_deactivated_notice(){
'action': 'dismiss_premium_deactivated_notice',
jQuery.post( ajaxurl, data, function( response ) {
jQuery( '#yoast-premium-deactivated-notice' ).hide();
jQuery( document ).ready( function() {
jQuery( 'body' ).on( 'click', '#yoast-premium-deactivated-notice .notice-dismiss', function() {
dismiss_premium_deactivated_notice();
* Dismisses the premium deactivated notice.
public function dismiss_premium_deactivated_notice() {
return $this->options_helper->set( 'dismiss_premium_deactivated_notice', true );
* Returns whether or not premium is installed and not activated.
* @param string $premium_file The premium file.
* @return bool Whether or not premium is installed and not activated.
protected function premium_is_installed_not_activated( $premium_file ) {
! \defined( 'WPSEO_PREMIUM_FILE' )
&& \file_exists( \WP_PLUGIN_DIR . '/' . $premium_file )