*/ class DashboardWidgets extends AdminSettingsModel { public function __construct() { $this->widget_list = (array) AdminSettings::get_instance()->get( 'dashboard_widgets_list' ); $this->restrict_for = (array) AdminSettings::get_instance()->get( 'dashboard_widgets_user_roles' ); // Dashboard widgets by WP Adminify add_action( 'admin_init', [ $this, 'jltwp_adminify_add_hooks' ] ); add_action( 'plugins_loaded', [ $this, 'jltwp_adminify_dashboard_widgets' ] ); // add_action('admin_enqueue_scripts', [$this, 'dashboard_styles'], 100); } public function jltwp_adminify_add_hooks() { $user = wp_get_current_user(); if ( !empty(array_intersect( $this->restrict_for, $user->roles )) ) { return; } add_action( 'wp_dashboard_setup', [ $this, 'disable_dashboard_widgets' ], 100 ); add_action( 'wp_network_dashboard_setup', [ $this, 'disable_dashboard_widgets' ], 100 ); } public static function get_dashboard_widgets_checkbox() { $widgets = ( new self() )->get_default_dashboard_widgets(); $flat_widgets = []; foreach ( $widgets as $context => $priority ) { foreach ( $priority as $data ) { foreach ( $data as $id => $widget ) { if ( !$widget ) { continue; } $key = $id . '|' . $context; $widget['title'] = ( isset( $widget['title'] ) ? esc_html( $widget['title'] ) : '' ); $flat_widgets[$key] = wp_strip_all_tags( $widget['title'] ); } } } $widgets = wp_list_sort( $flat_widgets, [ 'title_stripped' => 'ASC', ], null, true ); return $widgets; } public static function render_dashboard_checkboxes() { ( new self() )->get_default_dashboard_widgets(); $dom = new \DOMDocument(); $widgets = get_option( 'dashboard_widgets', [] ); $new_list = []; foreach ( $widgets as $key => $value ) { if ( $value != strip_tags( html_entity_decode( $value ) ) ) { $dom->loadHTML( html_entity_decode( $value ) ); $value = $dom->getElementsByTagName( 'span' )->item( 0 )->nodeValue; } $new_list[$key] = strip_tags( $value ); } return $new_list; } /** * Get the default dashboard widgets. * * @return array Sidebar widgets. */ public function get_default_dashboard_widgets() { global $wp_meta_boxes ; $screen = ( is_network_admin() ? 'dashboard-network' : 'dashboard' ); $current_screen = get_current_screen(); if ( !isset( $wp_meta_boxes[$screen] ) || !is_array( $wp_meta_boxes[$screen] ) ) { require_once ABSPATH . '/wp-admin/includes/dashboard.php'; set_current_screen( $screen ); wp_dashboard_setup(); if ( is_callable( [ 'Antispam_Bee', 'add_dashboard_chart' ] ) ) { \Antispam_Bee::add_dashboard_chart(); } } if ( isset( $wp_meta_boxes[$screen][0] ) ) { unset( $wp_meta_boxes[$screen][0] ); } $widgets = []; if ( isset( $wp_meta_boxes[$screen] ) ) { $widgets = $wp_meta_boxes[$screen]; } set_current_screen( $current_screen ); /** * Filters the available dashboard widgets. * * @param array $widgets The globally available dashboard widgets. */ return apply_filters( 'wp_adminify_dashboard_widgets', $widgets ); } public function disable_dashboard_widgets() { $widgets = $this->widget_list; $_widgets = self::get_dashboard_widgets_checkbox(); update_option( 'dashboard_widgets', $_widgets ); if ( !$widgets ) { return; } foreach ( $widgets as $meta_box ) { $widget_data = explode( '|', $meta_box ); $widget_id = $widget_data[0]; $widget_pos = ''; if ( !empty($widget_data[1]) ) { $widget_pos = $widget_data[1]; } if ( 'dashboard_welcome_panel' === $widget_id ) { remove_action( 'welcome_panel', 'wp_welcome_panel' ); continue; } if ( 'try_gutenberg_panel' === $widget_id ) { remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' ); continue; } if ( 'dashboard_browser_nag' === $widget_id || 'dashboard_php_nag' === $widget_id ) { continue; } /** * Docs: https://developer.wordpress.org/reference/functions/remove_meta_box/ * Example: remove_meta_box('dashboard_right_now', 'dashboard', 'normal'); // Right Now */ remove_meta_box( $widget_id, get_current_screen()->base, $widget_pos ); } } /** * WP Adminify: Dashboard Widgets */ public function jltwp_adminify_dashboard_widgets() { // Recent Posts new Adminify_RecentPosts(); // User Activities new Adminify_UserActivities(); // System Info new Adminify_SystemInfo(); // Memory Usage new Adminify_Memory_Usage(); // Search Engine Visibility new Adminify_Search_Engine_Visibility(); // Activity Logs new Adminify_Activity_Logs(); // News Feed new Adminify_News_Feed(); } }