Removing Unnecessary Text from Admin Menu without CSS

The question:

I am looking for a way to remove all the unessesary text from default worpdress metaboxes.

Preferably I would like to ensure that the content is not just hidden through CSS but actually removed from the HTML so it does not even show up in the source.

The areas I am interested in removing include:

  1. The HELP button on the top right and associating DIV/HTML/text when you click on it
  2. On the Dashboard in the Right Now Metabox I want to remove the text related to which theme is being used and the version of wordpress as well as the change theme button.
  3. On the “Page Attributes” metabox on the bottom it has the text “Need help? Use the Help tab in the upper right of your screen.” I would like for this text to be removed
  4. Under the “Excerpt Metabox” there is text which I would like to remove
  5. Any other text which you might also know how to remove to cleanup wordpress.

The Solutions:

Below are the methods you can try. The first solution is probably the best. Try others if the first one doesn’t work. Senior developers aren’t just copying/pasting – they read the methods carefully & apply them wisely to each case.

Method 1

Here’s an answer to question #1. Not enough time right now to do the rest.

1.) Removing Admin Help Link Button

Unfortunately WordPress doesn’t provide a hook to let you affect the Help Button on the top right of the admin, but you can use a somewhat dirty hack to achieve what you are trying to accomplish.

Now you See It:

Removing Unnecessary Text from Admin Menu without CSS
(source: mikeschinkel.com)

Now you Don’t:

Removing Unnecessary Text from Admin Menu without CSS
(source: mikeschinkel.com)

By calling the contextual_help and admin_notices hooks, the ones that are called immediately before and immediately after when the help link button is output, respectively, you can capture the output buffer and remove the offending HTML using preg_replace(). The ob_start()/ob_get_clean() pair of functions in PHP are what you need to buffer output and then to capture that buffered output, viola:

class RemoveAdminHelpLinkButton {
  static function on_load() {
    add_filter('contextual_help',array(__CLASS__,'contextual_help'));
    add_action('admin_notices',array(__CLASS__,'admin_notices'));
  }
  static function contextual_help($contextual_help) {
    ob_start();
    return $contextual_help;
  }
  static function admin_notices() {
    echo preg_replace('#<div id="contextual-help-link-wrap".*>.*</div>#Us','',ob_get_clean());
  }
}
RemoveAdminHelpLinkButton::on_load();

In general you can use this technique to modify or delete almost any HTML output generated by WordPress by finding the before and after hooks but be aware that it is a very fragile technique; if another plugin has modified the HTML output from what you were expecting your preg_replace() could fail to match. Anyway…

3.) Removing Help Text from Page Attributes Metabox

To remove the help text for the Page Attributes metabox doesn’t require regular expressions, a simple str_replace() will do. (Note finding the right hooks to use took the most time.):

class RemovePageAttributesHelpText {
  static function on_load() {
    add_action('admin_notices',array(__CLASS__,'admin_notices'));
    add_action('dbx_post_sidebar',array(__CLASS__,'dbx_post_sidebar'));
  }
  static function admin_notices() {
    ob_start();
  }
  static function dbx_post_sidebar() {
    $match_text = '<p>Need help? Use the Help tab in the upper right of your screen.</p>';
    echo str_replace($match_text,'',ob_get_clean());
  }
}
RemovePageAttributesHelpText::on_load();

There’s also another approach you can use when all you want to do it remove text from core and that’s to use the 'gettext' hook. The following code removes the help text from the Page Attributes metabox:

class RemovePageAttributesHelpText {
  static function on_load() {
    add_filter('gettext',array(__CLASS__,'gettext'),10,4);
  }
  function gettext($translation, $text, $domain) {
    if ($text=='Need help? Use the Help tab in the upper right of your screen.') {
      $translation = '';
    }
    return $translation;
  }
}
RemovePageAttributesHelpText::on_load();

Note that I’m cautious to use this hook as it gets called hundreds of times per page load; 577 times just to load the Admin Dashboard in case I just tested, for example. So if you use it be sure not to do anything that is computationally “expensive” such as running a raw SQL query or similar.

4.) Removing Text from the “Excerpt Metabox”

We’ll use option #2 from technique #3 to strip the help text from the Excerpt Metabox (this one I included the code from technique #3 so this one replaces the code in #3):

class RemoveUnwantedPageEditingText {
  static function on_load() {
    add_action('admin_notices',array(__CLASS__,'admin_notices'));
    add_action('dbx_post_sidebar',array(__CLASS__,'dbx_post_sidebar'));
  }
  static function admin_notices() {
    ob_start();
  }
  static function dbx_post_sidebar() {
    $html = str_replace('<p>Need help? Use the Help tab in the upper right of your screen.</p>','',ob_get_clean());
    echo str_replace('Excerpts are optional hand-crafted summaries of your content that can be used in your theme.' .
     ' <a href="http://codex.wordpress.org/Excerpt" target="_blank">Learn more about manual excerpts.</a>','',$html);
  }
}
RemoveUnwantedPageEditingText::on_load();

Method 2

Jake Goldman’s excellent talk at WordCamp Mid-Atlantic provides an excellent guide: http://www.cmurrayconsulting.com/wordpress-tips/customizing-wordpress-admin/#more-939

Download the well-commented theme that appears below the slideshow. (He asks that if you use his code, you please attribute it to him in your code comments.)

He mentions that you can get all the widget IDs as follows:
var_dump( $wp_meta_boxes[‘dashboard’] );

You could:
unset($wp_meta_boxes[‘dashboard’][‘normal’][‘core’][‘dashboard_right_now’]);

Then add your own widget using wp_add_dashboard_widget().

Look in wp-admin/includes/dashboard.php for the function, wp_dashboard_right_now() for a model for what to add (deleting theme info, as desired.)

functions.php

<?php
/*
Based on Jake Goldman's approach
*/

add_action('wp_dashboard_setup', 'custom_dashboard_widgets');

function custom_dashboard_widgets(){
global $wp_meta_boxes;
unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
wp_add_dashboard_widget('my_dashboard_right_now', 'Right Now', 'right_now_no_theme'); 
}

function right_now_no_theme() {
        global $wp_registered_sidebars;

        $num_posts = wp_count_posts( 'post' );
        $num_pages = wp_count_posts( 'page' );

        $num_cats  = wp_count_terms('category');

        $num_tags = wp_count_terms('post_tag');

        $num_comm = wp_count_comments( );

        echo "nt".'<div class="table table_content">';
        echo "nt".'<p class="sub">' . __('Content') . '</p>'."nt".'<table>';
        echo "nt".'<tr class="first">';

        // Posts
        $num = number_format_i18n( $num_posts->publish );
        $text = _n( 'Post', 'Posts', intval($num_posts->publish) );
        if ( current_user_can( 'edit_posts' ) ) {
                $num = "<a href='edit.php'>$num</a>";
                $text = "<a href='edit.php'>$text</a>";
        }
        echo '<td class="first b b-posts">' . $num . '</td>';
        echo '<td class="t posts">' . $text . '</td>';

        echo '</tr><tr>';
        /* TODO: Show status breakdown on hover
        if ( $can_edit_pages && !empty($num_pages->publish) ) { // how many pages is not exposed in feeds.  Don't show if !current_user_can
                $post_type_texts[] = '<a href="edit-pages.php" rel="nofollow noreferrer noopener">'.sprintf( _n( '%s page', '%s pages', $num_pages->publish ), number_format_i18n( $num_pages->publish ) ).'</a>';
        }
        if ( $can_edit_posts && !empty($num_posts->draft) ) {
                $post_type_texts[] = '<a href="edit.php?post_status=draft" rel="nofollow noreferrer noopener">'.sprintf( _n( '%s draft', '%s drafts', $num_posts->draft ), number_format_i18n( $num_posts->draft ) ).'</a>';
        }
        if ( $can_edit_posts && !empty($num_posts->future) ) {
                $post_type_texts[] = '<a href="edit.php?post_status=future" rel="nofollow noreferrer noopener">'.sprintf( _n( '%s scheduled post', '%s scheduled posts', $num_posts->future ), number_format_i18n( $num_posts->future ) ).'</a>';
        }
        if ( current_user_can('publish_posts') && !empty($num_posts->pending) ) {
                $pending_text = sprintf( _n( 'There is <a href="%1$s" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">%2$s post</a> pending your review.', 'There are <a href="%1$s" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">%2$s posts</a> pending your review.', $num_posts->pending ), 'edit.php?post_status=pending', number_format_i18n( $num_posts->pending ) );
        } else {
                $pending_text = '';
        }
        */

        // Pages
        $num = number_format_i18n( $num_pages->publish );
        $text = _n( 'Page', 'Pages', $num_pages->publish );
        if ( current_user_can( 'edit_pages' ) ) {
                $num = "<a href='edit.php?post_type=page'>$num</a>";
                $text = "<a href='edit.php?post_type=page'>$text</a>";
        }
        echo '<td class="first b b_pages">' . $num . '</td>';
        echo '<td class="t pages">' . $text . '</td>';

        echo '</tr><tr>';

        // Categories
        $num = number_format_i18n( $num_cats );
        $text = _n( 'Category', 'Categories', $num_cats );
        if ( current_user_can( 'manage_categories' ) ) {
                $num = "<a href='edit-tags.php?taxonomy=category'>$num</a>";
                $text = "<a href='edit-tags.php?taxonomy=category'>$text</a>";
        }
        echo '<td class="first b b-cats">' . $num . '</td>';
        echo '<td class="t cats">' . $text . '</td>';

        echo '</tr><tr>';

        // Tags
        $num = number_format_i18n( $num_tags );
        $text = _n( 'Tag', 'Tags', $num_tags );
        if ( current_user_can( 'manage_categories' ) ) {
                $num = "<a href='edit-tags.php'>$num</a>";
                $text = "<a href='edit-tags.php'>$text</a>";
        }
        echo '<td class="first b b-tags">' . $num . '</td>';
        echo '<td class="t tags">' . $text . '</td>';

        echo "</tr>";
        do_action('right_now_content_table_end');
        echo "nt</table>nt</div>";


        echo "nt".'<div class="table table_discussion">';
        echo "nt".'<p class="sub">' . __('Discussion') . '</p>'."nt".'<table>';
        echo "nt".'<tr class="first">';

        // Total Comments
        $num = '<span class="total-count">' . number_format_i18n($num_comm->total_comments) . '</span>';
        $text = _n( 'Comment', 'Comments', $num_comm->total_comments );
        if ( current_user_can( 'moderate_comments' ) ) {
                $num = '<a href="edit-comments.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">' . $num . '</a>';
                $text = '<a href="edit-comments.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">' . $text . '</a>';
        }
        echo '<td class="b b-comments">' . $num . '</td>';
        echo '<td class="last t comments">' . $text . '</td>';

        echo '</tr><tr>';

        // Approved Comments
        $num = '<span class="approved-count">' . number_format_i18n($num_comm->approved) . '</span>';
        $text = _nx( 'Approved', 'Approved', $num_comm->approved, 'Right Now' );
        if ( current_user_can( 'moderate_comments' ) ) {
                $num = "<a href='edit-comments.php?comment_status=approved'>$num</a>";
                $text = "<a class='approved' href='edit-comments.php?comment_status=approved'>$text</a>";
        }
        echo '<td class="b b_approved">' . $num . '</td>';
        echo '<td class="last t">' . $text . '</td>';

        echo "</tr>nt<tr>";

        // Pending Comments
        $num = '<span class="pending-count">' . number_format_i18n($num_comm->moderated) . '</span>';
        $text = _n( 'Pending', 'Pending', $num_comm->moderated );
        if ( current_user_can( 'moderate_comments' ) ) {
                $num = "<a href='edit-comments.php?comment_status=moderated'>$num</a>";
                $text = "<a class='waiting' href='edit-comments.php?comment_status=moderated'>$text</a>";
        }
        echo '<td class="b b-waiting">' . $num . '</td>';
        echo '<td class="last t">' . $text . '</td>';

        echo "</tr>nt<tr>";

        // Spam Comments
        $num = number_format_i18n($num_comm->spam);
        $text = _nx( 'Spam', 'Spam', $num_comm->spam, 'comment' );
        if ( current_user_can( 'moderate_comments' ) ) {
                $num = "<a href='edit-comments.php?comment_status=spam'><span class='spam-count'>$num</span></a>";
                $text = "<a class='spam' href='edit-comments.php?comment_status=spam'>$text</a>";
        }
        echo '<td class="b b-spam">' . $num . '</td>';
        echo '<td class="last t">' . $text . '</td>';

        echo "</tr>";
        do_action('right_now_table_end');
        do_action('right_now_discussion_table_end');
        echo "nt</table>nt</div>";

        echo "nt".'<div class="versions">';
        $ct = current_theme_info();

        echo "nt<p>";
/*
        if ( !empty($wp_registered_sidebars) ) {
                $sidebars_widgets = wp_get_sidebars_widgets();
                $num_widgets = 0;
                foreach ( (array) $sidebars_widgets as $k => $v ) {
                        if ( 'wp_inactive_widgets' == $k )
                                continue;
                        if ( is_array($v) )
                                $num_widgets = $num_widgets + count($v);
                }

                $num = number_format_i18n( $num_widgets );
                $switch_themes = $ct->title;
                if ( current_user_can( 'switch_themes') ) {
                        echo '<a href="themes.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" class="button rbutton">' . __('Change Theme') . '</a>';
                        $switch_themes = '<a href="themes.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">' . $switch_themes . '</a>';
                }
                if ( current_user_can( 'edit_theme_options' ) ) {
                        printf(_n('Theme <span class="b">%1$s</span> with <span class="b"><a href="widgets.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">%2$s Widget</a></span>', 'Theme <span class="b">%1$s</span> with <span class="b"><a href="widgets.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">%2$s Widgets</a></span>', $num_widgets), $switch_themes, $num);
                } else {
                        printf(_n('Theme <span class="b">%1$s</span> with <span class="b">%2$s Widget</span>', 'Theme <span class="b">%1$s</span> with <span class="b">%2$s Widgets</span>', $num_widgets), $switch_themes, $num);
                }
        } else {
                if ( current_user_can( 'switch_themes' ) ) {
                        echo '<a href="themes.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" class="button rbutton">' . __('Change Theme') . '</a>';
                        printf( __('Theme <span class="b"><a href="themes.php" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener" rel="nofollow noreferrer noopener">%1$s</a></span>'), $ct->title );
                } else {
                        printf( __('Theme <span class="b">%1$s</span>'), $ct->title );
                }

        }
*/
        echo '</p>';

        update_right_now_message();

        echo "nt".'<br class="clear" /></div>';
        do_action( 'rightnow_end' );
        do_action( 'activity_box_end' );
}


?>

Method 3

Alternativ and very easy: use the plugin Adminimize, this plugin have many options and you can add your own options. This plugin is my own and i will coding a newer plugin with better code. Maybe its help for a csutom solution to read the source.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

Leave a Comment