backwards_compatibility_list = apply_filters( 'wu_hide_notifications_exclude_list', [ 'inject_admin_head_ads', ] ); $cleaner = [$this, 'clear_callback_list']; if (wu_get_isset($wp_filter, 'admin_notices')) { $wp_filter['admin_notices']->callbacks = array_filter($wp_filter['admin_notices']->callbacks, $cleaner ?? fn($v, $k): bool => ! empty($v), $cleaner === null ? ARRAY_FILTER_USE_BOTH : 0); } if (wu_get_isset($wp_filter, 'all_admin_notices')) { $wp_filter['all_admin_notices']->callbacks = array_filter($wp_filter['all_admin_notices']->callbacks, $cleaner ?? fn($v, $k): bool => ! empty($v), $cleaner === null ? ARRAY_FILTER_USE_BOTH : 0); } } /** * Keeps the allowed callbacks. * * @since 2.0.0 * * @param array $callbacks The callbacks attached. * @return array */ public function clear_callback_list($callbacks): bool { if (empty($this->backwards_compatibility_list)) { return false; } $keys = array_keys($callbacks); foreach ($keys as $key) { foreach ($this->backwards_compatibility_list as $key_to_keep) { if (str_contains($key, (string) $key_to_keep)) { return true; } } } return false; } /** * Filter the WP Multisite WaaS settings to add Notifications Options * * @since 2.0.0 * * @return void */ public function add_settings(): void { wu_register_settings_field( 'sites', 'hide_notifications_subsites', [ 'title' => __('Hide Admin Notices on Sites', 'wp-ultimo'), 'desc' => __('Hide all admin notices on network sites, except for WP Multisite WaaS broadcasts.', 'wp-ultimo'), 'type' => 'toggle', 'default' => 0, 'order' => 25, ] ); } }