Skip to content

Instantly share code, notes, and snippets.

@zytzagoo
Last active September 19, 2023 18:14
Show Gist options
  • Save zytzagoo/05743e970a3a717d23d7 to your computer and use it in GitHub Desktop.
Save zytzagoo/05743e970a3a717d23d7 to your computer and use it in GitHub Desktop.
Disable annoying Yoast SEO admin notifications
<?php
add_action( 'admin_init', function() {
if ( class_exists( 'Yoast_Notification_Center' ) ) {
$yoast_nc = Yoast_Notification_Center::get();
remove_action( 'admin_notices', array( $yoast_nc, 'display_notifications' ) );
remove_action( 'all_admin_notices', array( $yoast_nc, 'display_notifications' ) );
}
});
@primathon
Copy link

primathon commented Apr 16, 2021

Since Yoast refuses to cut back on the the upsell spam, here's a snippet to remove all the "You trashed a thing! Buy our premium plugin!" notices that they clutter up the admin dashbaord with. Also recommend looking into the Hide SEO Bloat plugin which basically exists solely to remove all the crap that Yoast adds all over your site. Anyway, put this code in your functions.php (or use something like Code Snippets):

/**
 * Unbind Yoast's awful constant upsell notifications whenever you trash/delete anything
 *
 * @ref: https://github.com/Yoast/wordpress-seo/blob/0742e9b6ba4c0d6ae9d65223267a106b92a6a4a1/admin/watchers/class-slug-change-watcher.php#L18
 * @see: https://wordpress.stackexchange.com/a/352509
 */
function unbind_yoast_slug_change_watchers()
{
  $priority = 10;
  $actions_methods = [
    'wp_trash_post'        => 'detect_post_trash',
    'before_delete_post'   => 'detect_post_delete',
    'delete_term_taxonomy' => 'detect_term_delete',
  ];
  
  global $wp_filter;
  foreach ($actions_methods as $action => $method)
  {
    if (isset($wp_filter[$action]->callbacks[$priority]) and ( ! empty($wp_filter[$action]->callbacks[$priority])))
    {
      $wp_filter[$action]->callbacks[$priority] = array_filter($wp_filter[$action]->callbacks[$priority], function($v, $k) use ($method) {
        return (stripos($k, $method) === false);
      }, ARRAY_FILTER_USE_BOTH );
    }
  }
}
add_action('plugins_loaded', 'unbind_yoast_slug_change_watchers', 20);

Hopefully this makes things a little nicer for anyone using it.

@theking2
Copy link

theking2 commented Mar 24, 2023

Make sure to code this as follows:

add_action( 'admin_init', "remove_yoast_notifications");
function remove_yoast_notifications() {
    if ( class_exists( 'Yoast_Notification_Center' ) ) {
        $yoast_nc = Yoast_Notification_Center::get();
        remove_action( 'admin_notices', array( $yoast_nc, 'display_notifications' ) );
        remove_action( 'all_admin_notices', array( $yoast_nc, 'display_notifications' ) );
    }
}

As a child theme might want to put them back.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment