-
-
Save jeffsmonteiro/ee8fa803508e0b82efd4f0f4fd7c7cff to your computer and use it in GitHub Desktop.
Replace the default WordPress dashboard with a custom one
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Plugin Name: Replace WordPress Dashboard | |
* Description: Replaces the default WordPress dashboard with a custom one. | |
* Author: Micah Wood | |
* Author URI: http://micahwood.me | |
* Version: 0.1 | |
* License: GPL3 | |
*/ | |
/** | |
* This plugin offers a starting point for replacing the WordPress dashboard. If you are familiar with object oriented | |
* programming, just subclass and overwrite the set_title() and page_content() methods. Otherwise, just alter the | |
* set_title() and page_content() functions as needed. | |
* | |
* Customize which users are redirected to the custom dashboard by changing the capability property. | |
* | |
* If you don't want this plugin to be deactivated, just drop this file in the mu-plugins folder in the wp-content | |
* directory. If you don't have an mu-plugins folder, just create one. | |
*/ | |
class Replace_WP_Dashboard { | |
protected $capability = 'read'; | |
protected $title; | |
final public function __construct() { | |
if( is_admin() ) { | |
add_action( 'init', array( $this, 'init' ) ); | |
} | |
} | |
final public function init() { | |
if( current_user_can( $this->capability ) ) { | |
$this->set_title(); | |
add_filter( 'admin_title', array( $this, 'admin_title' ), 10, 2 ); | |
add_action( 'admin_menu', array( $this, 'admin_menu' ) ); | |
add_action( 'current_screen', array( $this, 'current_screen' ) ); | |
} | |
} | |
/** | |
* Sets the page title for your custom dashboard | |
*/ | |
function set_title() { | |
if( ! isset( $this->title ) ) { | |
$this->title = __( 'Dashboard' ); | |
} | |
} | |
/** | |
* Output the content for your custom dashboard | |
*/ | |
function page_content() { | |
$content = __( 'Welcome to your new dashboard!' ); | |
echo <<<HTML | |
<div class="wrap"> | |
<h2>{$this->title}</h2> | |
<p>{$content}</p> | |
</div> | |
HTML; | |
} | |
/** | |
* Fixes the page title in the browser. | |
* | |
* @param string $admin_title | |
* @param string $title | |
* @return string $admin_title | |
*/ | |
final public function admin_title( $admin_title, $title ) { | |
global $pagenow; | |
if( 'admin.php' == $pagenow && isset( $_GET['page'] ) && 'custom-page' == $_GET['page'] ) { | |
$admin_title = $this->title . $admin_title; | |
} | |
return $admin_title; | |
} | |
final public function admin_menu() { | |
/** | |
* Adds a custom page to WordPress | |
*/ | |
add_menu_page( $this->title, '', 'manage_options', 'custom-page', array( $this, 'page_content' ) ); | |
/** | |
* Remove the custom page from the admin menu | |
*/ | |
remove_menu_page('custom-page'); | |
/** | |
* Make dashboard menu item the active item | |
*/ | |
global $parent_file, $submenu_file; | |
$parent_file = 'index.php'; | |
$submenu_file = 'index.php'; | |
/** | |
* Rename the dashboard menu item | |
*/ | |
global $menu; | |
$menu[2][0] = $this->title; | |
/** | |
* Rename the dashboard submenu item | |
*/ | |
global $submenu; | |
$submenu['index.php'][0][0] = $this->title; | |
} | |
/** | |
* Redirect users from the normal dashboard to your custom dashboard | |
*/ | |
final public function current_screen( $screen ) { | |
if( 'dashboard' == $screen->id ) { | |
wp_safe_redirect( admin_url('admin.php?page=custom-page') ); | |
exit; | |
} | |
} | |
} | |
new Replace_WP_Dashboard(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment