New WordPress Power Tips For Template Developers And Consultants

Advertisement

It has been a big year for WordPress. If there were still some lingering doubts about its potency as a full-fledged content management system, then the full support for custom taxonomies1 and custom post types2 in WordPress 3.0 core should have put them to rest. WordPress 3.1 took those leaps one step further, polishing custom taxonomies with multi-taxonomy query support3, polishing custom post types with native template support for archives and feeds4, and introducing features (like the “admin bar”) that make it easier to quickly edit and add content from the front end.

In the broader community, we’ve seen incredible plug-in suites such as BuddyPress5 mature, and even the emergence of independent WordPress-dedicated hosting services, such as page.ly6. To celebrate WordPress’s progress, let’s review some new tips that can help template developers and consultants up their game even further.

Foreword for New Developers: What is a “Hook”?

Most of these tips take advantage of core WordPress “hooks.” Hooks are points in the code that allow any number of outside functions to “hook in” and intercept the code in order to add to or modify behavior at a particular point. Hooks are the fundamental concept that enables virtually all plug-ins. WordPress has two kinds of hooks: actions and filters.

Action hooks are intended to allow developers to intercept certain activities and execute some additional functionality. For instance, when a new post is published, the developer may want to add some extra functionality, such as posting the title and a link to Twitter.

Filter hooks allow the developer to intercept and modify data that is being processed by WordPress for display or saving. For instance, the developer may want to inject an advertisement into the content before displaying the post on the screen.

Learn more about hooks on the official WordPress codex7.

The Underused Pagination Function

Many great plug-ins are in the official WordPress repository. But using fancy plug-ins to add fairly basic functionality to your theme is often like driving a tractor trailer to go around the block. There’s usually a lighter, smarter way: a bike or even a car. And while plug-ins are a fine solution for consultants who are staging a complete roll-out, they’re awkward solutions for theme developers who want to sell standalone templates.

WP-PageNavi8 is one of the most popular WordPress plug-ins; and no doubt it is well developed. It is ideal for those who are uncomfortable digging into WordPress code. But did you know that WordPress has a function built right into core that (with a bit of savvy about its parameters) can generate pagination links for everything from comments to post archives to post pages?

The function in question is paginate_links()9. (For those who like to fish around in the source, it’s on line 1954 of general-template.php in the wp-includes folder as of WordPress 3.1.)  Believe it or not, this underused function has been around since 2.1. Another function, paginate_comment_links()10, is actually a wrapper for this function that is designed specifically for paging comments, and it has been around since 2.7.

The function takes an array of parameters that make it versatile enough to use for any kind of paging:

  • base
    This is the path for the page number links, not including the pagination-specific part of the URL. The characters %_% will be substituted in that URL for the page-specific part of the URL.
  • format
    This is the “page” part of the URL. %#% is substituted for the page number. For example, page/%#% or ?page=%#%.
  • total
    The total number of pages available.
  • current
    The current page number.
  • show_all
    Lists all page links, instead of limiting it to a certain number of links to the left and right of the current page.
  • prev_next
    Includes the “Previous” and “Next” links (if applicable), just as you might normally do with the previous_posts_link() function.
  • prev_text and next_text
    Text to put inside the “Previous” and “Next” links.
  • end_size
    The number of page links to show at the end. Defaults to 1 (e.g. 1 2 3 … 10).
  • mid_size­
    The number of pages to show on either side of the current page. Defaults to 2 (example: 1 … 3 4 5 6 7 … 10).
  • type
    Allows you to specify an output style. The default is “plain,” which is just a string of links. Can also be set to list (i.e. ul and li representation of links) and array (i.e. returns an array of page links to be potentially outputted any way you like in code).
  • You can also add query arguments and fragments.

Because the function takes all of the information needed to generate page links, you can use it for pretty much any pagination list, as long as you have some key information, such as the number of pages and the current page. Let’s use this function to generate pagination links for an article archive such as a category or main post index:

// get total number of pages
global $wp_query;
$total = $wp_query->max_num_pages;
// only bother with the rest if we have more than 1 page!
if ( $total > 1 )  {
     // get the current page
     if ( !$current_page = get_query_var('paged') )
          $current_page = 1;
     // structure of “format” depends on whether we’re using pretty permalinks
     $format = empty( get_option('permalink_structure') ) ? '&page=%#%' : 'page/%#%/';
     echo paginate_links(array(
          'base' => get_pagenum_link(1) . '%_%',
          'format' => $format,
          'current' => $current_page,
          'total' => $total,
          'mid_size' => 4,
          'type' => 'list'
     ));
}

Here’s the HTML generated by that code on the first of 10 posts pages:

<ul class='page-numbers'>
     <li><span class='page-numbers current'>1</span></li>
     <li><a class='page-numbers' href='http://mysite.com/page/2/'>2</a></li>
     <li><a class='page-numbers' href='http://mysite.com/page/3/'>3</a></li>
     <li><a class='page-numbers' href='http://mysite.com/page/4/'>4</a></li> 
     <li><a class='page-numbers' href='http://mysite.com/page/5/'>5</a></li>
     <li><span class='page-numbers dots'>...</span></li>
     <li><a class='page-numbers' href='http://mysite.com/page/10/'>10</a></li>
     <li><a class='next page-numbers' href='http://mysite.com/page/2/'>Next &raquo;</a></li>
</ul>

Here’s a screenshot of the pagination on m62 visualcommunications, built using the em>paginate_links function.

11

“I Wish Posts Were Called Articles For My Client.”

Have you ever wished you could change the wording of a built-in menu item or notification? If you’re a bit WordPress-savvy, you may have considered generating your own translations file. But you might not know that you can actually “hook” the translation functions in WordPress, capturing their input and modifying their output.

Be careful with this one. The code you put in this hook will run every time WordPress runs a string through its translation filters. Complex cases and conditionals could add a considerable amount of overhead, especially when loading pages filled with translation strings, such as the administrative pages. But if you just want to rename one thing that confuses your client (for example, maybe changing “Posts” to “Articles” for that corporate client who doesn’t “blog” yet), then these hooks can be very handy.

// hook the translation filters
add_filter(  'gettext',  'change_post_to_article'  );
add_filter(  'ngettext',  'change_post_to_article'  );

function change_post_to_article( $translated ) {
     $translated = str_ireplace(  'Post',  'Article',  $translated );  // ireplace is PHP5 only
     return $translated;
}

Redirect Failed Log-Ins

Adding a log-in form to the front end of WordPress is pretty easy. WordPress 3.0 gave us the flexible wp_login_form()12 function, which displays a log-in form that can be customized with a number of arguments. By default, it will redirect the user back to the current page upon successful authentication, but we can also customize the redirect location.

wp_login_form(array( 'redirect' => site_url() ));  // will redirect back to the website’s home page

There’s just one problem: it will only redirect upon successful authentication! If your idea was to hide the default WordPress log-in screen, then sending users who fail at a log-in attempt back to the default log-in screen probably isn’t ideal. Here’s a hook and some code that you can put in your functions.php file that will redirect failed log=ins to any location of your choosing.

add_action( 'wp_login_failed', 'my_front_end_login_fail' );  // hook failed login

function my_front_end_login_fail( $username ) {
     $referrer = $_SERVER['HTTP_REFERER'];  // where did the post submission come from?
     // if there's a valid referrer, and it's not the default log-in screen
     if ( !empty($referrer) && !strstr($referrer,'wp-login') && !strstr($referrer,'wp-admin') ) {
          wp_redirect( $referrer . '?login=failed' );  // let's append some information (login=failed) to the URL for the theme to use
          exit;
     }
}

Adding Excerpts to Pages

With the addition of support for custom post types, content types (including the built-in Post and Page types) are more like abstract objects. Each content type can support any number of core features, such as the HTML editor, titles, featured images and so forth. One of these core features is the “excerpt.” By default, Pages do not support excerpts. Did you know that adding excerpt support to the built-in Page type is as simple as adding a single line of code?

add_action( 'init', 'my_add_excerpts_to_pages' );
function my_add_excerpts_to_pages() {
     add_post_type_support( 'page', 'excerpt' );
}

Technically, that was a couple of lines of code, but many themes already hook init, so the hook might not be necessary.

Add Body Classes Based on Special Conditions

If a theme is well constructed, then it would use the body_class()13 function to automatically generate classes for the body tag based on the properties of the page being viewed, like category, category-3, and logged-in.

Some websites may have sections that should share some styling but aren’t unified by any of the default classes generated by body_class. Say we want page ID 7, category ID 5 and the archive for the tag neat to share the body class neat-stuff, so that we can add a number of styling properties to them all without cluttering the style sheet.

Luckily, we can hook the body_class() output!

add_filter( 'body_class', 'my_neat_body_class');
function my_neat_body_class( $classes ) {
     if ( is_page(7) || is_category(5) || is_tag('neat') )
          $classes[] = 'neat-stuff';

     return $classes; 
}

“You Can Have Settings Access, But Don’t Say We Didn’t Warn You!”

Clients often expect full administrative access (and rightly so), including access to settings pages. Let’s look at how we can hook admin “notices” (those warning boxes generated by some plug-ins) to send some warnings to administrative users when they are on settings pages.

add_action( 'admin_notices', 'my_admin_notice' );
function my_admin_notice(){
     global $current_screen;</div>
     if ( $current_screen->parent_base == 'options-general' )
          echo '<div><p>Warning - changing settings on these pages may cause problems with your website’s design!</p></div>';
}

Remove the “Links” Menu Item

With WordPress increasingly being used for full website implementations, the blog roll and links feature is being used less and less. Thankfully, a new, little-known function14 added in WordPress 3.1 makes it very easy to remove unwanted menu items such as “Links.”

add_action( 'admin_menu', 'my_admin_menu' );

function my_admin_menu() {
     remove_menu_page('link-manager.php');
}

Take Out the Dashboard News Feeds… and Add a New One of Your Own

If you build WordPress websites for clients, then the number of WordPress news feeds loaded by default in the dashboard might be an annoyance. If you’re clever, you might just inject some of your own client’s news.

add_action('wp_dashboard_setup', 'my_dashboard_widgets');
function my_dashboard_widgets() {
     global $wp_meta_boxes;
     // remove unnecessary widgets
     // var_dump( $wp_meta_boxes['dashboard'] ); // use to get all the widget IDs
     unset(
          $wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins'],
          $wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary'],
          $wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']
     );
     // add a custom dashboard widget
     wp_add_dashboard_widget( 'dashboard_custom_feed', 'News from 10up', 'dashboard_custom_feed_output' ); //add new RSS feed output
}
function dashboard_custom_feed_output() {
     echo '<div class="rss-widget">';
     wp_widget_rss_output(array(
          'url' => 'http://www.get10up.com/feed',
          'title' => 'What's up at 10up',
          'items' => 2,
          'show_summary' => 1,
          'show_author' => 0,
          'show_date' => 1 
     ));
     echo "</div>";
}

15

Add Your Own Credits to the Administrative Footer

If you build WordPress websites for clients, then you should certainly make sure that WordPress gets its due. It wouldn’t hurt to sneak in a little credit to your agency either.

add_filter( 'admin_footer_text', 'my_admin_footer_text' );
function my_admin_footer_text( $default_text ) {
     return '<span id="footer-thankyou">Website managed by <a href="http://www.get10up.com">10up</a><span> | Powered by <a href="http://www.wordpress.org">WordPress</a>';
}

Further Reading

Here are more tips for developers who build websites for clients:

More WordPress power tips from Smashing Magazine:

(al) (il)

Footnotes

  1. 1 http://codex.wordpress.org/Taxonomies
  2. 2 http://codex.wordpress.org/Post_Types
  3. 3 http://www.wpmods.com/query-multiple-taxonomies-in-wp-3-1
  4. 4 http://core.trac.wordpress.org/ticket/13818
  5. 5 http://www.buddypress.org
  6. 6 http://page.ly
  7. 7 http://codex.wordpress.org/Plugin_API
  8. 8 http://wordpress.org/extend/plugins/wp-pagenavi/
  9. 9 http://codex.wordpress.org/Function_Reference/paginate_links
  10. 10 http://codex.wordpress.org/Function_Reference/paginate_comments_links
  11. 11 http://www.m62.net
  12. 12 http://codex.wordpress.org/Function_Reference/wp_login_form
  13. 13 http://codex.wordpress.org/Function_Reference/body_class
  14. 14 http://codex.wordpress.org/Function_Reference/remove_menu_page
  15. 15 http://www.smashingmagazine.com/wp-content/uploads/2011/04/10up-news.jpg
  16. 16 http://www.get10up.com/blog/2011/03/customizing-wordpress-admin/
  17. 17 http://sixrevisions.com/wordpress/10-techniques-for-customizing-the-wordpress-admin-panel/
  18. 18 http://www.smashingmagazine.com/2009/12/14/advanced-power-tips-for-wordpress-template-developers-reloaded/
  19. 19 http://www.smashingmagazine.com/2009/11/25/advanced-power-tips-for-wordpress-template-developers/
  20. 20 http://www.smashingmagazine.com/2009/07/02/power-tips-for-wordpress-template-developers/

↑ Back to topShare on Twitter

Jacob M (Jake) Goldman is the owner of 10up LLC, a web development and strategy agency with a focus on making content management easy and fun. 10up's clients range from small local businesses to major WordPress.com VIP clients like TechCrunch. You can find his insights and development tips by following him on Twitter @jakemgold

Advertising
  1. 1

    Suberb Tips Jacob, Never heard about any of them till now.

    1
  2. 2

    Useful tips, thanks!

    1
    • 3

      It is really good article to learn more about WordPress and especially the “screenshot of the pagination”. :-)

      0
  3. 4

    Đurica Bogosavljev

    May 10, 2011 1:03 am

    Great tips with good examples! Bookmarked!!
    Hope you will prepare more of these power tips for WordPress Template Developers in the future!

    0
  4. 5

    Christophe Debruel

    May 10, 2011 1:26 am

    Wow nice list :D some good stuff in there that I probably use immediatly!

    0
  5. 6

    Awesome tips – thanks for sharing! I’m looking forward for the next part ;)

    0
  6. 7

    I found a nice way to add custom styles to the WYSIWYG editor: http://dsgndepot.com/adding-styles-to-wordpress-tinymce/277

    It adds a new styles dropdown which adds classes to selected text in the editor.

    0
  7. 8

    Feels so good to see these features in WordPress.
    However, I feel they are pretty much similar to Drupal. The taxonmoy structure and the way hooks are implemented.
    They way hook are implemented in drupal is a bit different but the logic is all the same.
    But still WordPress Rocks !!!

    0
  8. 9

    Great write up.

    One thing I wanted to correct is that empty() function only checks variables, and if you try to check anything other than variable with empty() function, it will cause a parse error; something like:

    Can’t use function return value in write context

    I’m talking about the code provided under the section “The Underused Pagination Function”.

    I would write it like this:

    // get total number of pages
    global $wp_query;
    $total = $wp_query->max_num_pages;
    // only bother with the rest if we have more than 1 page!
    if ( $total > 1 ) {
    // get the current page
    if ( !$current_page = get_query_var('paged') )
    $current_page = 1;
    // structure of “format” depends on whether we’re using pretty permalinks
    $permalink_structure = get_option('permalink_structure');
    $format = empty( $permalink_structure ) ? '&page=%#%' : 'page/%#%/';
    echo paginate_links(array(
    'base' => get_pagenum_link(1) . '%_%',
    'format' => $format,
    'current' => $current_page,
    'total' => $total,
    'mid_size' => 4,
    'type' => 'list'
    ));
    }

    Thanks for the awesome post. Waiting for more neat posts like this, Jacob.

    0
  9. 11

    i think there’s a typo here :

    add_action( ‘admin_notices’, ‘my_admin_notice’ );
    function my_admin_notice(){
    global $current_screen;</div>
    if ( $current_screen->parent_base == ‘options-general’ )
    echo ‘Warning – changing settings on these pages may cause problems with your website’s design!’;
    }

    isn’t “global $current_screen;</div>” supposed to be global “$current_screen;”

    0
    • 12

      wops somehow the tag didn’t show up. I was talking about this particular section : “You Can Have Settings Access, But Don’t Say We Didn’t Warn You!”

      where there is extra div at the end of this line global $current_screen;

      0
  10. 13

    yeah.. i have just look like this solution…

    0
  11. 14

    I’ve used and loved WordPress for nearly five years now, but am feeling its limits more recently, especially with options like Expression Engine out there. For clients that want a custom post type with multiple fields, it just gets too complicated. No ability to have multiple rich text fields, and having the other custom fields limited to plain text instead of, say, a calendar or image selection, has made me look at alternatives for more involved projects.

    0
    • 15

      C’mon, last time I developed a theme I was able to create lots of WYSIWYG fields via custom metaboxes, not only for custom post types but for standard posts and pages too.

      Er… and that ExpressionEngine thing pisses me off in the first place. They want some of every penny I earn from a client work.

      0
      • 16

        Mind sharing how?

        0
        • 17

          ‘morefields’ plugin?

          0
        • 18

          If you’re familiar with WP code, you can create metaboxes. Just add the class theEditor to the textarea you want to apply a WYSIWYG and you’re good to go.

          Also you can use a plugin. there are few plugins which can do this including the one mentioned by Phil Jackson in the above comment.

          0
    • 20

      I would suggest giving Drupal a spin –> proprietary CMS’s like Expression Engine and (gasp) Business Catalyst are really out of the realm of this article (they do take your hard earned money). Why –> because their License wouldn’t permit developers from selling “themes”.

      Also it is kind of funny to see word press now doing what Drupal was years ago –
      I think drupal is ahead of the curve — as a software product. Of course WordPress does have more people making themes, and is easier to understand with an “out of the box” install.

      0
      • 21

        I’m not bashing Drupal because I know there’re a lot of dedicated and smart people working on it. However, I think WP is just allowing for functionality common to all CMS’s, which it wasn’t until very recently. I’ve built several Drupal sites and I found the process extraordinarily painful. So, when WP 2.8 came out I jumped on it and never looked back. The documentation is crystal clear, the support forums are filled with great people and the code is well-documented and easy to find. WP may not be as robust as Drupal, but in the 3 years I’ve been working with it I’ve not found it to be limiting and I keep discovering more things I can do with it.

        0
    • 22

      It looks like the author of this article developed a plugin to do just this…
      http://www.get10up.com/plugins/secondary-html-content-wordpress/

      I haven’t tried it, so I can’t really vouch for it – but the guy has some credibility for writing here, so check it out! Looks like he has some other quality plugins, too.

      0
  12. 23

    Excellent, much needed, will use. Thanks!

    0
  13. 24

    I wish I could have multiple homes based on categories for example. i.e: example.com (home) and example.com/games (games home), like a news portal.

    0
  14. 25

    Nice, I love playing around with WordPress’ core functions via hooks, I just wish there was better documentation for all of them! You’ve brought up a couple of good ones…like the admin_menu hook, I recently developed a plugin for our website which utilized hooks and CSS to style the Admin section of WordPress depending on user roles. It probably would have been programmatically correct to use those hooks to disable menu items, but I resorted to my good old friend, display: none;

    Don’t judge me! Now that I know about a few more of these, I’ll be using them instead of a CSS solution! Thanks!

    0
  15. 26

    Jeffrey Friend

    May 10, 2011 6:44 am

    Great tips! Love the “Articles” tip, and especially the “Admin Notice”! I’ve had a client or two decide to “see what happens”. It always turns out badly for them! ;-)

    0
  16. 27

    well written tips! thanks!

    0
  17. 28

    These are amazing and some (like renaming posts), I’ve been wondering about for a while.

    Unsetting the Dashboard panels is much easier this way though (and adding the action to the “admin_menu” gets all of them this way):

    add_action( ‘admin_menu’, ‘remove_meta_boxen’ );
    function remove_meta_boxen() {
    remove_meta_box( ‘dashboard_secondary’, ‘dashboard’, ‘normal’ ); //Other WordPress News
    remove_meta_box( ‘dashboard_right_now’, ‘dashboard’, ‘normal’ );
    remove_meta_box( ‘dashboard_incoming_links’, ‘dashboard’, ‘normal’ );
    remove_meta_box( ‘dashboard_plugins’, ‘dashboard’, ‘normal’ );
    remove_meta_box( ‘dashboard_quick_press’, ‘dashboard’, ‘normal’ );
    remove_meta_box( ‘dashboard_primary’, ‘dashboard’, ‘normal’ ); //Wordpress Blog
    remove_meta_box( ‘dashboard_recent_drafts’, ‘dashboard’, ‘normal’ );
    remove_meta_box( ‘dashboard_recent_comments’, ‘dashboard’, ‘normal’ );

    }

    0
  18. 29

    Michael Gorman

    May 10, 2011 7:32 am

    I especially loved the warning on the settings pages. Thanks!

    0
  19. 30

    Here’s another great tip from a WordPress customer: Screenshots, Screenshots, examples, Screenshots! Take a couple of extra minutes use whatever graphical editing software you can get your hands on and take screenshots.

    0
  20. 31

    just tried the redirect wrong login snippet works great till someone enters wrong credentials more than once. Small fix which works for me add_action( ‘wp_login_failed’, ‘my_front_end_login_fail’ ); // hook failed login

    function my_front_end_login_fail( $username ) {
    $referrer = $_SERVER['HTTP_REFERER']; // where did the post submission come from?
    // if there’s a valid referrer, and it’s not the default log-in screen
    if ( !empty($referrer) && !strstr($referrer,’wp-login’) && !strstr($referrer,’wp-admin’) && !strstr($referrer, ‘failed’) )
    {
    wp_redirect( $referrer . ‘?login=failed’ ); // let’s append some information (login=failed) to the URL for the theme to use
    exit;
    }
    else
    {
    wp_redirect( $referrer); //if user entered credentials wrong again just use the login failed referrer again
    exit;
    }
    }
    ?>

    0
  21. 32

    I’m interested in removing some of those Dashboard Panels and putting in my own based off of RSS Feeds. Where do I put this code? index.php? Anyone wanna tell me because I’m either losing it or I don’t see where you would put this code.

    0
  22. 34

    I love the concept of customizing a WordPress install for clients. I haven’t really delved into publicly available templates yet, but if/when I do things like this will be very useful. Thanks for the information.

    0
  23. 35

    Hey, I’m new to WP and looking for some good books / sites to start with. Any suggestions on where to start?

    I’m a developer by trade C++, Java, a bit of PHP as well. Just don’t want to waste time with bad books etc.

    0
  24. 37

    I wasn’t honestly expecting much from this article going on the title, but this was a pretty damn good article brotato. I’ve been developing with WordPress for a couple of years and I’ve just learned a couple of things.

    Dwayne.
    ilikekillnerds.com

    0
  25. 38

    Great little tutorial!

    0
  26. 39

    Dawid Surowiec

    May 11, 2011 3:59 am

    Nice one i really needed something like this ;)

    0
  27. 40

    Nice little collection of snippets.

    I’ve been using a few of these already…I bundled them into an mu-plugin (for personal use) to apply to all clients’ sites.

    Used the translation tip to change ‘Howdy’ to ‘Welcome’ (serious client).
    Changed the admin footer to include developer name (and e-mail).
    Removal of inappropriate dashboard items to add client’s news feed.

    I also used a little snippet to remove the ‘Update Nag’…
    function tb_remove_update_nag($matches) {
    global $userdata;
    if (!current_user_can(‘update_plugins’))
    remove_action(‘admin_notices’, ‘update_nag’, 3);
    }

    Just a suggestion, on your Dashboard function to pull in the client’s own posts, would it not be better to use…
    ‘url’ => site_url(‘/feed/’),
    ‘title’ => ‘News from ‘.bloginfo(‘name’)

    …so the information isn’t all hard-coded?

    Another cool use of the action ‘admin_head is to add CSS that swaps out the default WP-icons with a sprited Fugue set (looks much nicer / professional)…again I have this in my mu-plugin.

    2
  28. 41

    This is a brilliant tutorial on wordpress!

    I host my clients websites and this helps a lot – its so true about clients not understanding “posts”, i didnt even think it would be this easy to change it.

    Do you know if there is a plugin to manage this all?

    Ali @ iClickster.com/hosting

    0
  29. 42

    Nice article.
    It would be nice to speak more often about wordpress accessibility tweaks or plugins.

    0
  30. 43

    Why would you repurpose something designed for blogging into a CMS when there are already very good CMS systems out there? Like Joomla! and Drupal. Joomla! is free has an excellent support network and superb extensions for additional functionality. IMHO its far better than wordpress for Content Management as that is what it was originally designed for. So “like driving a tractor trailer to go around the block. There’s usually a lighter, smarter way: a bike or even a car.” – no its like riding a tricycle

    0
  31. 44

    This article is fantastic!

    It covers so many areas of Admin customisation seldom seen on other tutorials. The admin credits feature is something I would never have thought of, but I’ll definitely be using it from now on!

    Thanks for taking the time to put this together!

    Patrick

    0
  32. 45

    You guys always have the best tips. I cant wait to move forward with WordPress

    0
  33. 46

    Great post lads, really love w/p & reading your good content tips
    Regards
    Rob
    hearts.ie

    0
  34. 47

    Thanks a lot for this useful tips Jacob and Smashing. I’m wondering if I can redirect failures in register page too. It’s possible?

    0
  35. 48

    WordPress tips discussed here are very informative…. and very well written.

    Thanks alot for your time and effort.

    0
  36. 49

    Awesome Post, Jacob..
    my client are very pleased with wordpress for thir sites project..
    and this is really usefull for me..
    time to practice it..

    0
  37. 50

    Melanie Richards

    May 13, 2011 7:01 pm

    Talk about good timing—this post came right at the beginning of a new WP project. Thanks for the tips; there’s a few that I’ll certainly be implementing!

    0
  38. 51

    Thank you Jacob for all the hard work of putting this together. Every trick is worth it. This is God sent for people like me who love to work on WordPress.

    BTW I was curious as to how much time it has taken you to come up with this post?

    Thanks once again

    0
  39. 52

    I always forget that CSS holds so many boss gems! Now to appropriately implement them….

    0
  40. 53

    I would have hoped you touched the WP_nav_menu and its walker classes. That is a very hidden capability most developers don’t know about but can make wonderful use of.

    Some options are restriction menu items based on roles, displaying the description under links, etc.

    0
  41. 54

    This week I had a problem trying to install wp events calendar plugin on my custom template. It works fine on the twentyten template but is completely broken on my own. I figured the plugin generates line in the head section to include the proper javascript and css but it wasn’t able to include those lines on my template header. I understand is important to have the wp_footer() function on the footer section, but I couldn’t figure it out how to make the plugin change the header section of my template. What have I made wrong ?

    0
  42. 55

    Awesome article! Really good tips. I m totally in love with WordPress :)

    0
  43. 56

    Hi, thanks a lot for the report…I tend to generate templates in Photoshop and tehre is a question emerged recently: is there any feature that would let me publish psd templates to WordPress?

    0
  44. 57

    hello! i firmly publish templates right from PS having installed special plugin, called Divine Elemente. if there is no coding experience, this might be one of the best choices. try that.

    0
  45. 58

    I forgot to leave the website name: elemente.divine-project (dot) com

    The good software for psd to wordpress publishing

    0
  46. 59

    “I Wish Posts Were Called Articles For My Client.”

    Did not work for me. Probably because your instructions were so ambiguous only someone with PHP experience would know where to put your coding.

    If you know where to put the code why not mention that in your article too?

    0
    • 60

      To change the admin menu title “Post” to “Article” you need to put the code for it found in the above article in the functions.php file which is located your theme’s folder. You can open and edit this functions.php file by going to the wp dashboard->Appearence->Editor page and opening that file in there.

      0
  47. 61

    Awesome, thanks for this great article.
    Keep them coming!

    0
  48. 62

    Thanks ! Was working on customising the admin dashboard for our clients and you have gave me new ideas =D

    0
  49. 63

    Super awesome article! Will definitely use a few of these.

    0
  50. 64

    If I am running Multisite however, how can I add these functions so they stick across all the sites.

    I don’t want to edit every functions.php on every site. Is there a common location I can put these functions?

    Cheers.

    0
  51. 65

    If you want to rename more than the Posts button you can use this code.

    function change_post_to_article( $translated ) {
    $search= array(‘Posts’, ‘Media’);
    $pin = array(‘Articles’, ‘Pictures’);
    $translated = str_ireplace( $search, $pin, $translated ); // ireplace is PHP5 only
    return $translated;
    }

    0
  52. 66

    Konstantin Kovshenin

    April 16, 2012 7:29 am

    I’d argue around your “I wish posts were called articles for my client” part. Why would you run a replace function on each an every call to gettext and ngettext? Not only is that inefficient, but it will also break when you want to change your posts to “news” and you’ll end up with labels like “Delete Newss”. Also, it might (and probably will) break some other non-related translations, like “post by e-mail” will become “article by e-mail”, and “post a comment” will become “article a comment” — wtf?

    The correct solution probably lies somewhere around the $wp_post_types globals, register_post_type and get_post_type_labels.

    ~ K

    1
  53. 67

    Greatttt!!! i like this post.plugin isn’t good.just manually

    0
  54. 68

    Hello!
    The Underused Pagination Function

    Is it possible to change the HTML generated by that code for the Pagination Function, or to add some html ?
    I’d like to add a separator “/” to each page number.

    0
  55. 70

    I hope this post still gets comments answered. If I use your code to rename Posts to Articles, the menu system stops working – I can drag menu items around, but I can’t add any new Pages (or anything, for that matter)… Help?

    0

↑ Back to top