-
-
Save nacin/1341091 to your computer and use it in GitHub Desktop.
WCPhilly Admin
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: WordCamp Philly 2011 Admin | |
Plugin URI: http://localhost/whitelabel | |
Description: Some swanky stuff to make your admin look GOOD | |
Author: Andrew Norcross | |
Version: 0.1 | |
Requires at least: 3.0 | |
Author URI: http://andrewnorcross.com | |
*/ | |
/* Copyright 2011 Andrew Norcross | |
This program is free software; you can redistribute it and/or modify | |
it under the terms of the GNU General Public License as published by | |
the Free Software Foundation; version 2 of the License (GPL v2) only. | |
This program is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
GNU General Public License for more details. | |
You should have received a copy of the GNU General Public License | |
along with this program; if not, write to the Free Software | |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | |
*/ | |
// custom CSS for admin logo and layout | |
function rkv_custom_stylez() { | |
# You may want to use plugins_url( 'img/favicon.png', __FILE__ ), as it feels cleaner. | |
echo '<link rel="shortcut icon" type="image/png" href="' . plugin_dir_url(__FILE__) . '/img/favicon.png" />'; | |
# You're better off using wp_enqueue_style() here, and hook that to admin_enqueue_scripts and login_enqueue_scripts. | |
# Example: wp_enqueue_style( 'rkv_admin_style', plugins_url( 'css/rkv_admin_style.css', __FILE__ ) ); | |
echo '<link rel="stylesheet" href="' . plugin_dir_url(__FILE__) . '/css/rkv_admin_style.css" type="text/css" media="screen" />'; | |
} | |
add_action('login_head', 'rkv_custom_stylez'); | |
add_action('admin_head', 'rkv_custom_stylez'); | |
// add admin logo link swap | |
function rkv_login_link_swap() { | |
# You can use home_url('/') here. | |
$site_url = get_bloginfo('url'); | |
$site_name = get_bloginfo('name'); | |
# Don't do this. What if jQuery is already loaded? Instead: wp_enqueue_script( 'jquery' ), and do that on login_enqueue_scripts. | |
echo '<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>'; | |
# Don't do this. WordPress has filters here -- login_headertitle and login_headerurl. Hook in and you don't need this function at all. | |
?> | |
<script type="text/javascript"> | |
jQuery(function(){ | |
$('h1 a').replaceWith('<a title="<?php echo $site_name ?>. Powered by WordPress" href="<?php echo $site_url ?>"><?php echo $site_name ?></a>'); | |
}); | |
</script> | |
<?php } | |
add_action('login_head', 'rkv_login_link_swap'); | |
// re-order admin panel | |
# Nice find. This is rarely used. | |
function rkv_reorder_menu($menu_ord) { | |
# See note below on why this line isn't necessary (and is confusing). | |
if (!$menu_ord) return true; | |
return array( | |
'index.php', // this represents the dashboard link | |
'edit.php?post_type=page', // this is the default page menu | |
'edit.php', // this is the default POST admin menu | |
'upload.php', | |
); | |
} | |
# Rather than passing this to rkv_reorder_menu() with the hack above there, | |
# just use '__return_true' as the callback. Simple, effective. | |
add_filter('custom_menu_order', 'rkv_reorder_menu'); | |
add_filter('menu_order', 'rkv_reorder_menu'); | |
// change main post labels | |
# Not a fan, but you gotta do what you gotta do. | |
function rkv_main_post_menu_labels() { | |
global $menu; | |
global $submenu; | |
$menu[5][0] = 'Products'; | |
$submenu['edit.php'][5][0] = 'Products'; | |
$submenu['edit.php'][10][0] = 'Add Product'; | |
$submenu['edit.php'][15][0] = 'Product Types'; | |
$submenu['edit.php'][16][0] = 'Product Tags'; | |
echo ''; | |
} | |
add_action( 'admin_menu', 'rkv_main_post_menu_labels' ); | |
// Change post to product labels | |
# See above note -- not a fan, but gotta do what you gotta do. Not sure why you wouldn't just | |
# avoid the core taxonomies and post types though, and just create your own at this point. | |
function rkv_detail_post_labels() { | |
global $wp_post_types; | |
$labels = &$wp_post_types['post']->labels; | |
$labels->name = 'Products'; | |
$labels->singular_name = 'Product'; | |
$labels->add_new = 'Add Product'; | |
$labels->add_new_item = 'Add Product'; | |
$labels->edit_item = 'Edit Products'; | |
$labels->new_item = 'Product'; | |
$labels->view_item = 'View Product'; | |
$labels->search_items = 'Search Products'; | |
$labels->not_found = 'No Products found'; | |
$labels->not_found_in_trash = 'No Products found in Trash'; | |
} | |
add_action( 'init', 'rkv_detail_post_labels' ); | |
// change category labels | |
function rkv_change_category_labels() { | |
global $wp_taxonomies; | |
$labels = &$wp_taxonomies['category']->labels; | |
$labels->name = 'Product Types'; | |
$labels->singular_name = 'Product Type'; | |
$labels->add_new_item = 'Add New Product Type'; | |
$labels->edit_item = 'Edit Product Type'; | |
$labels->search_items = 'Search Product Types'; | |
$labels->update_item = 'Update Product Type'; | |
$labels->all_items = 'All Product Types'; | |
} | |
add_action( 'init', 'rkv_change_category_labels' ); | |
// change tag labels | |
function rkv_change_tag_labels() { | |
global $wp_taxonomies; | |
$labels = &$wp_taxonomies['post_tag']->labels; | |
$labels->name = 'Product Tags'; | |
$labels->singular_name = 'Product Tag'; | |
$labels->add_new_item = 'Add New Product Tag'; | |
$labels->edit_item = 'Edit Product Tag'; | |
$labels->search_items = 'Search Product Tags'; | |
$labels->update_item = 'Update Product Tag'; | |
$labels->all_items = 'All Product Tags'; | |
} | |
add_action( 'init', 'rkv_change_tag_labels' ); | |
// remove dashboard widgets | |
function rkv_dashboard_cleanup() { | |
# :-( Use remove_meta_box() instead. | |
# remove_meta_box( 'dashboard_right_now', 'dashboard', 'normal' ); | |
global $wp_meta_boxes; | |
unset( | |
$wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now'], | |
$wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins'], | |
$wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary'], | |
$wp_meta_boxes['dashboard']['side']['core']['dashboard_primary'], | |
$wp_meta_boxes['dashboard']['side']['core']['dashboard_recent_drafts'], | |
$wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links'], | |
$wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments'], | |
$wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press'] | |
); | |
// add call to include two custom ones | |
wp_add_dashboard_widget('rkv_help_text', 'Help and Support Links', 'rkv_help_links'); // add a new custom widget for help and support | |
wp_add_dashboard_widget('rkv_help_vids', 'Help and Support Videos', 'rkv_help_videos'); // add a new custom widget for help and support | |
} | |
add_action('wp_dashboard_setup', 'rkv_dashboard_cleanup'); | |
// add custom help links and video | |
function rkv_help_links() { ?> | |
<p>Take a look at these links</p> | |
<ul> | |
<li><a href="http://awesome.com">Support Link #1</a></li> | |
<li><a href="http://awesome.com">Support Link #2</a></li> | |
<li><a href="http://awesome.com">Support Link #1</a></li> | |
</ul> | |
<?php } | |
function rkv_help_videos() { ?> | |
<div style="width:420px; margin:0 auto; display:block;"><iframe width="420" height="243" src="http://www.youtube.com/embed/9IbGVWDO0YU?rel=0&hd=1" frameborder="0" allowfullscreen></iframe></div> | |
<?php } | |
// change post title box text | |
function rkv_change_post_text( $translation ) { | |
global $post; | |
if( isset( $post ) ) { | |
switch( $post->post_type ){ | |
case 'post' : | |
# This works, but you'd be better off inspecting the current screen object. | |
# Example: $screen = get_current_screen(); if $screen->id == 'post' ... (post-new.php or post.php for post type = post), and you're done. | |
# HOWEVER: There's a filter here! There's an enter_title_here filter designed for this. This avoids gettext hacks. | |
if( $translation == 'Enter title here' ) | |
return 'Enter Product Name Here'; | |
break; | |
} | |
} | |
return $translation; | |
} | |
add_action('gettext', 'rkv_change_post_text'); | |
// remove items from the admin panel | |
# Looks good. | |
function rkv_remove_extras() { | |
remove_menu_page('link-manager.php'); | |
remove_menu_page('edit-comments.php'); | |
remove_menu_page('theme-editor.php'); | |
} | |
add_action( 'admin_menu', 'rkv_remove_extras' ); | |
// remove the columns I don't need | |
function rkv_edit_post_columns($defaults) { | |
unset($defaults['comments']); | |
unset($defaults['author']); | |
unset($defaults['date']); | |
return $defaults; | |
} | |
# Looks good, but note that these filters fire for all post types. (The first one for all non-hierarchical post types, | |
# the secondone for all hierarhical post types.) You probably don't want to step on other post types. | |
# Try manage_{$post_type}_posts_columns for that. | |
add_filter('manage_posts_columns', 'rkv_edit_post_columns'); | |
add_filter('manage_pages_columns', 'rkv_edit_post_columns'); | |
// re-title my columns | |
function rkv_mod_columns($new_columns) { | |
# Next line isn't necessary. | |
$new_columns['cb'] = '<input type="checkbox" />'; | |
$new_columns['title'] = _x('Product Name', 'column name'); | |
$new_columns['categories'] = _x('Product Type', 'column name'); | |
$new_columns['tags'] = _x('Product Tags', 'column name'); | |
return $new_columns; | |
} | |
add_filter('manage_posts_columns', 'rkv_mod_columns'); | |
// Make these columns sortable | |
# This code doesn't do anything. You've told WordPress they can be clicked to be sorted, but WordPress | |
# doesn't know how to sort them. See http://scribu.net/wordpress/custom-sortable-columns.html. | |
function rkv_sortable_columns($columns) { | |
$columns['categories'] = 'categories'; | |
$columns['tags'] = 'tags'; | |
return $columns; | |
} | |
add_filter( 'manage_edit-post_sortable_columns', 'rkv_sortable_columns' ); | |
// clean up the admin bar to match | |
function rkv_admin_bar_cleanup() { | |
global $wp_admin_bar; | |
// we can remove an entire menu item | |
$wp_admin_bar->remove_menu('comments'); | |
// or we can remove just a submenu item. | |
$wp_admin_bar->remove_menu('new-link', 'new-content'); | |
// we can add also submenu item too | |
$wp_admin_bar->add_menu( array( | |
'parent' => 'dashboard', | |
'id' => 'new_awesome', | |
'title' => __('Awesome Help Links'), | |
'href' => 'http://awesome.com' | |
) ); | |
} | |
// and we hook our function via | |
# Looks good, though I'd use the add_admin_bar_menus hook. (Similar to the widgets_init hook -- it | |
# fires after the core widgets are registered.) | |
add_action( 'wp_before_admin_bar_render', 'rkv_admin_bar_cleanup' ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment