Advanced Power Tips For WordPress Template Developers

Advertisement

Back in July, “Power Tips for WordPress Template Developers41” presented 8 basic techniques for adding popular features to the front end of a WordPress-powered website. The premise was that WordPress2 has become an elegant, lightweight content management solution that offers the fundamentals out of the box, atop a modular core that offers incredible potential in the hands of a capable developer.

WordPress does not try to be an “everything to everyone” CMS right out of the box. Many systems do an average job incorporating 99% of what the potential CMS market might need, even if the last 15-20% is used only by a fraction of the market and adds considerably to the system’s overall “heft” (or bloat). At the other end of the spectrum are completely custom solutions that are finely tailored to exact needs, at the cost of reinventing wheels like polished content editing with media management and version control.

The self-proclaimed WordPress “code poets” have, alternatively, focused on doing an A+ job with the “fat middle”: the 80-85% of features that almost everyone needs, and coupling those with a first rate framework and API that enables capable developers to add in almost any niche or “long tail” feature. In fact, the core WordPress framework is so capable that a handful of “intermediary” frameworks3 that sit on top of it have already emerged.

That previous “Power Tips” entry scratched the surface, covering a handful of API calls mixed in with some simple PHP code and configuration tips intended to help beginner WordPress template developers kick their game up a notch. This article takes power tips to the next level, expanding on some of the topics in the first article, and introducing more advanced techniques and methods for customizing not only the front end, but the content management (or back end) experience.

You may be interested in the following related posts:

Multiple Column Content Techniques

The average blog or website has a single, clearly defined block of space for a given page’s or post’s unique content. But there are plenty of creative websites that don’t conform to this simple notion of “one unique block” per page. A creative online portfolio layout might feature a screenshot and project description in a left column, and a list of technologies used in a right column. Both the left and right column are unique to each portfolio page.

Here’s a screenshot from an in-development website project, built on WordPress. The “projects” area features portfolio-like layouts of green building projects throughout the state. In addition to a specially designed gallery visualization, note that the individual project profile has two distinct columns.

Rhode Island Green Building Council - 2 Column Layout

A more commonplace layout might feature an obvious, primary block of page content, but also feature a sidebar element that is unique to the current page: maybe a quote from a customer about a specific product or service. The “Power Tips” article9 offered a method to associate sidebar elements with multiple pages using custom fields and page IDs (tip #6). That approach isn’t very effective or efficient for designs with a 1:1 relationship between sidebars and pages (where each page has a unique sidebar element).

Sidebar HTML elements - using page IDs and custom fields10

Yes, the developer could add table buttons to the WordPress editor11, and let content authors fend for themselves: a solution prone to problematic layouts and bad output relied upon far too often. Here are a few simple options that keep layout in the hands of the template developer while making content management easier and problem-free.

Short, simple, and HTML free? No worries.

Before we delve into solutions that assume a need for HTML formatting in this second content block, let’s review a more basic solution. If the second column does not need to be formatted – or maybe should not be formatted by the editor for design reasons – then a simple custom field will do the trick. In the case of a simple sidebar element, like a customer quote, this may be just the trick.

There are already great tutorials12 and useful custom fields hacks13 that walk through the WordPress custom fields feature, so if you are not familiar with the basic idea behind custom fields, start there. Let’s go ahead and create a custom field named “sidebar_content” (also known as the “key”), and put some simple content in there. Just to shake things up, let’s assume we do need a very basic HTML feature for our content authors, who know nothing about HTML: line and paragraph breaks. Let’s also assume that we want to format this sidebar content on the front end with some of the basic automatic niceties we get when we output post content, like curly quotation marks.

Custom field with sidebar_content key

Here’s how we can output this in any template file, using the “the_content” filter14 to apply the WordPress content filter to our custom field. That filter converts single line breaks to break tags, double line breaks to paragraphing tags, and even transforms simple quotation marks to curly quotes!

$sidebar_content = get_post_meta($post->ID, "sidebar_content", true);

if ($sidebar_content) {
   echo '<div id="sidebar_content">';
   echo apply_filters("the_content", $sidebar_content);
   echo '</div>';
}

Of course, we can make this even more intuitive for the content authors by creating a new meta field box for sidebar content instead of relying on the generic “custom fields” box… which will be covered later in this article!

Using the More Tag for… More

The WordPress editor has a button “more tag” button that is primarily intended to separate “above the fold” content from “below the fold” content. If you are not already familiar with the “more” divider, read up on that15 first.

If the pages or posts that need a two column layouts also rely on traditional more separation, this tip will most likely not be effective, unless one of the columns is also the intended “above the fold” content. However, most instances where a two column layout is desirable don’t overlap with a traditional above / below the fold need. It is fairly rare, for instance, for pages (vs. posts) to actually make any use of the more tag. So let’s start taking advantage of that feature!

The basic idea is that content above the more divider will represent one block of HTML content, while content below the divider will represent a second block (be it a sidebar element or column).

Enabled two columns using the more divider

Here is how to retrieve content above and below the more divider as separate blocks of HTML content in the corresponding page template file.

global $more;

$more = 0;
echo '<div id="column_one">';
the_content('');
echo '</div>':

$more = 1;
echo '<div id="column_two">';
the_content('',true);
echo '</div>';

The global “more” variable lets WordPress know whether or not the content is being rendered in an “above the fold” (or “teaser”) only view. By passing an empty string to “the_content”16, we prevent a “read more” link from showing up below the HTML content. And, for column two, we pass a second parameter to “the_content” – true – which instructs WordPress to output the content without the teaser.

If the intent is to output the second block of content outside of the loop in another template element, such as a sidebar, this approach is a bit trickier. One option would be to store the second block of content in a uniquely named variable, declare it as a global variable in the sidebar, and – if there is any content inside the variable – output a new block. An alternative could involve checking which page template is in use with the “is_page_template” function17, and, if the two column template is in use, calling “the_content” with the second parameter set to true, as in the example above.

The Plug-in Solution: Adding a Second HTML Content Block to the Editor

The ideal solution, of course, might be a second HTML editor field on the WordPress page or post editor. Unfortunately, no such plug-in existed… until recently! While writing this article, we decided it was time such a solution did exist, and so the author of this article is happy to present a free, open source plug-in that combines some savvy understanding of how TinyMCE works (hint: it’s as simple as a class name) with the custom meta box tutorial covered later in this article, and a little bit of extra customization and polish thrown into the mix.

Secondary HTML Content18 adds a second HTML editor to pages, posts, or both (customizable with a simple settings panel). You can output the content in a sidebar with an included widget, or integrate it more tightly with the template by using “the_content_2″ and “get_the_content_2″ functions.

Secondary HTML Content for WordPress19

Associating Pages with Post Content: Reloaded

“Power Tips”20 covered the basic foundation for associating different WordPress pages with different post categories. The basic premise was that many sites require, effectively, different post “feeds” on different pages. For instance, there may be a company blog, but there may also be an independent news feed.

This continuation offers specific tips that extend the core concept introduced in part 1, making it easier to have multiple page / category associations, preventing entrance into the “real” category archive, and ensuring that individual post views retain a visual and architectural association with their parent “category page” layout.

Be sure to read part 121 before proceeding.

A Review of the Basics & the Two Fundamental Approaches

At the heart of the category / page association (covered in part one) was:

  • A matching of the “page slug” with the “category slug.”
  • Using “query_posts22” and the category parameter to exclude standalone page categories from the primary feed
  • Using a dedicated page template with “query_posts” and the “category name” parameter to create a page featuring a feed for a single category.

WordPress category / page slug relationship

Before delving into the tips that extend those ideas, it is important to make a distinction between two common but fundamentally different use cases for page / category association. The more typical use case, which the first part was tailored to, is a website that has a primary feed, like a blog, but also has one or two distinct feeds, most often for a formal news or press feed.

The second use case is a bit more esoteric: there is no primary feed. The site has many pages, and many (but not all) of those top level pages are individual feeds of posts. The example, at the end of this power tip, m62.net23, is one such use case. Another common use case might be – again – a portfolio centric website.

Let’s say we want to create “Joe’s Portfolio”, and Joe wants to feature 4 distinct areas of expertise. Each area of expertise should be a top level page, say, joes-portfolio.com/web-design, joes-portfolio.com/graphic-design, etc. Joe wants to have a little write-up about each service area at the top of the page, followed by a feed of case studies. Why a feed instead of sub-pages? Maybe Joe wants prospects to be able to subscribe to an RSS feed for each area of expertise; maybe he wants to easily cross-tag case studies based on industry; maybe he plans to update frequently and doesn’t want a huge page sitemap or wants visitors to page through a date-organized collection of case studies. There are many reasons to use posts instead of pages.

The following tips provide solutions for both use cases.

Automatically Determining the Page / Category Association

Part one suggested that a unique page template be created for any page associated with a category. That page template would then query for posts using a hardcoded category name or category ID. If there are only one or two standalone “category pages”, this is an efficient and effective solution.

However, if there are many page / category associations, as in use case #2 (no primary feed), the process of manually creating page templates for each association is tedious to build and maintain, and not realistic if content editors who don’t program need to be able to create more page / category associations on demand.

An alternative would be to create a generic page template24, let’s say “template-category-connector.php”, that is assigned to all pages associated with a category, and automatically determines the right category to query.

The following code performs the matching and executes the post query. The magic happens by taking advantage of our matching page and category slugs. Once again, if the website does not use permalinks, an alternative approach will be required (one permalink-free alternative could involve a custom field with the associated category ID).

$cat = get_category_by_slug($post->post_name);
query_posts('cat='.$cat->term_id);

That’s all there is to it… just proceed on with the post loop25 to output the applicable category’s posts. Note that the template should probably check for an actual return value from line 1, and output a graceful error in the event there is no match.

Handling Entry into the “Real” Category Archive

Now that there is a dedicated page layout that handles the category feed, we will want to be make certain that the visitor doesn’t land on WordPress’ default category “archive” view. For instance, when using permalinks with the default “category base” value, the archive view for a category with a top level category assigned a “web-design” slug would be: mysiteurl.com/category/web-design. However, the intent is for visitors to view this category at our top level page: mysiteurl.com/web-design.

By combining the WordPress category template file with some smart redirects, we can prevent entry into the default category archive. Out of the box, the WordPress template system26 allows developers to create global category archive templates as well as templates for individual category archives.

If we are in use case #1 – a site with a traditional blog feed and a standalone news feed on a “press releases” page – we will want to use the latter solution. Let’s say, as in part one, the category ID for “press releases” is 5. We create a template file in our theme folder named category-5.php. Under use case #2 (no primary feed), we will want to redirect all category archive traffic, in which case we need to work with the category.php template file.

A few lines of code in either template file will redirect visitors to the right place. We’ll also pass HTTP error / redirect code “301″27 – which will tell search engines to permanently redirect their link to the right location. Note that this particular code assumes we are using a permalink configuration. Line 2 can be modified to accomodate that situation.

$destination = get_bloginfo('url');
$destination .= str_replace('/'.get_option('category_base').'/','/',$_SERVER['REQUEST_URI']);
wp_redirect($destination, 301);

In effect, that code removes the category base (“/category” by default) from the overall relative URL, and safely redirects28 the visitor to the page with the matching slug. Of course, if the site falls under use case #1 (one or two stand alone feeds), the line three could dropped into a specific category template (i.e. category-5.php) with a hardcoded absolute URL for the redirect destitation.

Hiding Standalone Categories from the Category List & Primary Site Feed

In the first use case (only isolating one or two categories from a primary feed), it may be necessary to prevent isolated categories or the posts within those categories from appearing in some common theme elements that would traditionally include them.

Consider the example from part one: a site with a traditional blog and a standalone press release feed. Assume the owners of the site want the RSS feed for the blog to be persistently available throughout the site (typically manifesting itself as an RSS icon in the browser location bar), but don’t want the press release items included in that primary feed. By default, the WordPress primary feed is available at “/feed”, and includes all published posts, regardless of category or any other post property.

Smashing Magazine - Primary Feed29

To exclude categories from the primary RSS feed, we need to filter30 the WordPress function that retrieves the posts. Let’s again assume that the category ID for Press Releases is 5. The following code should be placed in the template’s “functions.php” file31.

add_filter('pre_get_posts','exclude_press');

function exclude_press($query) {
   if($query->is_feed && !$query->is_category) $query->set('cat','-5');
}

To summarize, we use the “pre_get_posts” filter to modify the post query before it executes. Within a new filter – named “exclude_press” – a conditional confirms that the post query is for a feed, and that the query is not for an individual category. If the check pans out, the query is modified to exclude category 5 before execution.

The notion of globally filtering the post query may have broader implications depending on the site’s unique requirements. With some smart conditional checking, the filter could be extended to prevent the category from appearing anywhere except within the category or isolated post view. But be careful when extending the filter, and be sure to consider all possible views, including administrative views!

The category list is another frequently used site element that isolated categories should, in most cases, be excluded from. If the template calls the category list in only one or two places by code32 (as opposed to using the categories widget), excluding categories33 from the list is straight forward.

wp_list_categories('exclude=5');

However, if the categories widget is in use, or the category list is used throughout the template, an alternative approach is required. Enter the “list_terms_exclusions” filter. Again, the following code should be placed in the “functions.php” template file.

add_filter('list_terms_exclusions', 'filter_press');

function filter_press($exclusions) {
   $exclusions .= " AND t.term_id != 5 ";
   return $exclusions;
}

The return value of a “terms exclusions” filter is tacked onto the “where” clause in the SQL query that retrieves the terms. Without digging too deep here, the reason for discussing “terms” as opposed to, say, “categories” is because WordPress abstracts a variety of different taxonomies (link categories, post categories, tags, custom taxonomies, etc) into a unified database model that handles all taxonomies. Calls to “get categories”, “get tags”, and so forth, are all referring back to general “terms” behind the scenes. Ever wonder why category, tag, and other IDs tend to jump around? They are all being added to the same table. Assuming a fairly clean install, try adding a new post category, and note the ID. Then add a tag, and note its ID… one greater than the new post category.

Abstract term structures

Retaining the Page Layout for Post Views within a Category Page

One of the most common challenges to tackle with page / category association is retaining a sense that the visitor is still within the “category page” hierarchy – and not a global feed hierarchy – when a visitor is reading an individual post. Part one hinted at this challenge under “The devil is in the details,” and started to suggest a path that incorporated using the “in_category” function. We will explain how to use “in_category” within templates, as well as how to trick functions that reference the original query object into thinking that they are “within” the category page.

Let’s start with case #1, and building on the example in the first article, assume we only need to contend with one isolated feed, “Press Releases” (category ID 5).

Say the theme has a sidebar template that lists post categories when rendering the blog part of the site, and when rendering a standalone page, shows a page list instead. Here’s an extremely simplified version of what that might look inside the sidebar template file.

if (is_page())
{
   wp_list_pages();
}
else
{
   wp_list_categories();
}

Of course, there may be alternative widget sets for pages or posts, and there is likely to be more than just one element in the sidebar. But the concept should hold. Now going back to the example, the theme should render posts in category 5 (Press Releases) as if the visitor were on a page (not the blog). Leveraging the “in_category” check, the code above would now like the following:

if (is_page() || in_category(5))
{
   wp_list_pages();
}
else
{
   wp_list_categories();
}

Note that if there are multiple categories whose posts should resemble page output, the “in_category” function should be passed an array of IDs, like so:

in_category(array(5,7));

The need for a “in category” check is probably moot in case #2 (multiple page/category associations, without a primary feed): the template is probably structured to output the same elements on pages and posts from the get go. In other words, everything is handled as if it is a page since there is no primary feed. However, the following tip – that dynamically looks up the faux parent page ID (the page associated with the category) – is necessary for the next part of this tip. Just amend the code to check if “faux_parent_page” has a valid value: if it does, then the post is inside an isolated category associated with a page.

Once again, this approach to dynamically seeking the faux parent page (the category page) depends on taking advantage of the matching permalink structure between post categories and pages that is at the heart of this association. If the site is unable to use permalinks, a more complex alternative look up of the faux parent page will be necessary.

foreach(get_the_category() as $category) {
   $faux_parent_path = '/'.get_category_parents($category, FALSE, '/', TRUE);
}
$faux_parent_page = get_page_by_path($faux_parent_path)->ID;

Now that we have the ID of the category’s associated page, we can trick “black box” theme elements that determine page or post properties on their own (by referencing the post query) into thinking they are actually working with the category page.

The most common use case is page navigation. Whether its breadcrumbs, a top level page menu that should retain “current” (on) states, or a side navigation menu that should display the current section, there are many “black box” navigation functions that need to be tricked into rendering themselves as if on the category page.

Let’s use a simple top level page list, which should maintain proper “current_page”, “current_page_parent” (and so on) classes when on a post under a category page. Here’s what that simple function might look like before our changes:

wp_list_pages('depth=1');

Of course, posts do not normally have parent pages, so there will be no “current” classes assigned to that output when reading a post. Here is how to trick that function into thinking it is rendering the navigation for the “parent” category page.

//retrieve faux parent page dynamically… can skip and hard code in case 1
foreach(get_the_category() as $category) {
   $faux_parent_path = '/'.get_category_parents($category, FALSE, '/', TRUE);
}
$faux_parent_page = get_page_by_path($faux_parent_path)->ID;

//reset the post query as if on the faux parent page
query_posts('page_id='.$faux_parent_page);

//execute our "faked out" function
wp_list_pages('depth=1');

//reset the query back to the initial state
wp_reset_query();

If there are multiple elements that need be “tricked,” a best practice would be to put the “faux parent page” retriever at the top of the template, and declare it a global in any template files that need it. This would avoid repeated look ups of the faux parent page.

An Example: Seeing it All Put Together

A great example of a WordPress-powered CMS that pushes use case #2 to its limits can be seen at the home of m62 visual communications, at http://www.m62.net34.

m62 - pharmacy category35

All of the navigation items across the top (Presentation Theory, PowerPoint Slides, etc) are pages associated with post categories. The sub-navigation on the right contains sub-pages that are also associated with sub-categories. For example, in the screenshot above (available here36), the visitor is on the “Pharmaceutical Templates” page (faux category), which is a child of the “PowerPoint Templates” page (also a faux category). The content starting with “Download free” (below the page title) is the content from the “Pharmaceutical Templates” page. The posts below the “Next Steps” bar, titled “Latest in Pharmaceutical Templates”, are the posts inside that category. The applicable related category is automatically discovered by the WordPress template, populating the category name “Latest in X” and recent posts. Now let’s look at one of the posts inside that category.

m62 post with faux parent page37

Using the tips outlined above, the individual post retains the feel of being within the “Pharmaceutical Templates” page, right down to the breadcrumb navigation and “current” states in the navigation.

But not only does m62.net use category / page associations for most top and second level navigation items, it actually extends the concept to tags. The 5 “tabs” on the top right actually represent post tags, and each has a “tag page.”

Stay tuned!

The second part of the post will be published here, on Smashing Magazine, in two weeks. Hence, you may want to subscribe to our RSS-feed38 and follow us on Twitter39. Any ideas or suggestions? Comment on this article!


↑ 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

  1. 1

    HI There,
    Good article by the way.

    I was wondering if it’s possible to separate out the comments on to a different page. For example the site I’m working on requires that single.php display 2 comments and have a link to view all comments and add more. I’m a little confused about this. Would I be right in thinking this is NOT the function of comments.php or comment-popup.php?

    If I’ve assumed right that leaves me a little stuck as to the best way you can implement a view all comments page.

    Any Ideas would be greatly appreciated!

    Regards
    James

    0
  2. 2

    “Unfortunately, no such plug-in existed… until recently!”

    Thats just wrong, Jonathan Christopher wrote one a while back which is even better because you can add as many fields as you want.

    See here:
    http://mondaybynoon.com/wordpress-post-notes/

    0
  3. 3

    Good article, very usefull

    0
  4. 4

    Great article! Thanks!

    0
  5. 5

    Excelente artículo, alguno de los ejemplos son muy útiles. :)

    0
  6. 6

    Does the same principle behind adding a second html editable area apply to adding a third, a fourth, etc. etc.? This would be very useful for using wordpress beyond just a blogging tool.

    0
  7. 7

    Thank you, thank you, thank you for the advice on multiple content column content. I spent hours last night looking for a solution for this issue. Great timing!

    0
  8. 8

    I love these WordPress posts. Keep them going!

    Also, Adding a Second HTML Content Block to the Editor – That looks pretty neat. I want to try that out!

    0
  9. 9

    Awesome man, your a god. For a content I made pages called “Sidebars” and showing them with custom fields. Also I would be using the plugin Improved Include Pages which is only compatible with version 2.7. But it does work.

    Your method is alot simplier and effective! Thanks.

    0
  10. 10

    Actually, today I’ve released the first version of the “Multiple content blocks” plugin for WordPress. It’s alot like Secondary HTML content in the backend, but you can have an unlimited amount of content blocks. Maybe a good addition to “Multiple Column Content Techniques”.

    WordPress site: http://wordpress.org/extend/plugins/multiple-content-blocks/
    Plugin documentation: http://plugins.trendwerk.nl/documentation/multiple-content-blocks/

    0
  11. 11

    I just finished creating a WordPress theme for a client today which has 2 content blocks on the home page. The problem was that the secondary content has 4 different sections with h2 tags, then a recent posts block at the end!
    I used a subpage for the secondary content which I embed into the main page. Of course there is still some html in the secondary content.

    0
  12. 12

    Great post, thanks!

    0
  13. 13

    That’s great! Good article! Congratulations!

    0
  14. 14

    Great Info.. Great article thanks

    0
  15. 15

    very usefull
    thks

    0
  16. 16

    Awesome One !
    almost 85% of the Tips were new for me.. many thanks ! :)

    0
  17. 17

    Good article – It is great that you were able to include a live example with many of the techniques.

    0
  18. 18

    WordPress framework ahumm… I think most PHP developers know that the wordpress base is pretty ugly compared to real frameworks..

    WordPress is nice for the end user but the code is a bit hacked together.

    0
  19. 19

    Great RoundUp, Thanks!

    0
  20. 20

    great list. thnaks for sharing.

    0
  21. 21

    A much needed and excellent article.Expecting more of the same kind,especially related
    to WordPress.Thanks, SM.

    0
  22. 22

    Great post, I’m always looking for ways to sharpen my WP skills and this post contained a lot of new directions for me to explore. Most of these and other advanced techniques rely on the premise of being able to use multiple loops, so that’s something worth looking into if you’re relatively new to WP customizations.

    0
  23. 23

    Great post as usual,
    If you want to improve your WP skills read Smashing Mag everyday !
    Thank you
    Jean from France

    0
  24. 24

    One of the best articles I’ve seen in recent weeks from you guys – thank you so much!

    0
  25. 25

    Using the “more” indicator as a separator is ingenious, but I can see a lot of potential for the second HTML block in CMS themes. Imagine having a different block for each section of a page; that would expand WordPress’s capabilities for deployment on client sites immensely.

    Jordan Koschei

    0
  26. 26

    I’m trying to understand and impliment my own web design portfolio into a blog theme, and it’s driving me up the wall. I don’t understand how you guys do it. Although, I am almost there, but some problems I CANNOT figure out… In due time I guess… Ugh.

    0
  27. 27

    Nice job. It is always nice to find an article packed with so many nuggets.

    0
  28. 28

    great article ….
    recording to the article “the dead of the blog post”, this tips could create unique layout for every posting in wordpress. could we ?

    0
  29. 29

    Wow this is really an amazing collection of code. Thanks Smashing Magazine. I have certainly bookmarked this one. . .

    0
  30. 30

    “WordPress has become an elegant, lightweight content management solution”

    Lightweight???????
    Are you from another planet?
    Wordpress IS one of the slowest in performance

    0
  31. 31

    This is really nice article about WordPress custom theme development.

    0
  32. 32

    More WordPress posts, these are by far my favorite.

    Great Tips! I may have to try out the adding a second content block to the editor plugin, sounds interesting.

    0
  33. 33

    Thanks for the feedback, everyone. If you liked part one, I think you’ll really like part two when it’s published in a couple of weeks.

    Also – keep the questions and requests for more information coming. While I can’t take the time to answer them all in the comments, I’m keeping a list of potential future “power tips” which is largely influenced by questions in the comments. In fact, the “redux” page / post category association topic was a result of comments on my previous article asking for more information.

    Chris – while WordPress is not exactly in the same league as a complete PHP framework like Zend, as a *content management* framework, I think there’s an incredible amount of meat once you start digging in. The ability to call functions like “wp_schedule_single_event” raise WordPress from generic CMS to CMS framework, in my view.

    Dimitris24sta23 – I disagree re:performance. Sure, it’s not as zippy as a custom / ultra-minimalist solution, but as a rich CMS I find its performance impressive. I’ve worked with all 3 of the “major” PHP CMS platforms (WP, Joomla, Drupal), and WordPress is easily the lightest and fastest, particularly under load (though I’ve seen some scary setups with dozens of plug-ins that can really slow it down). We can tune WordPress to be extremely fast, even on a fairly basic shared host and without aggressive caching solutions like WP-Cache.

    0
  34. 34

    Lyons Solutions Web Design

    November 29, 2009 5:16 am

    Why is it called Advance Power Tips?

    0
  35. 35

    Great article, wordpress will become the CMS of choice in the not to distant future. Keep the articles coming.

    0
  36. 36

    To control which widgets appear on which pages or sections of the site, you can use two plugins: Widget Context and Widget Logic.

    0
  37. 38

    Hi Jacob,

    great post, really love it and already used some snippets and tried them out. Regarding to: “Using the More Tag for… More” – there is a little typo in line 6:
    echo ”:

    – it should be
    echo ”;

    semicolon instead of colon. is just a small one but may others getting a bit confused.

    Thanks for sharing your knowledge

    Joe

    0
  38. 39

    Great! Just what I’ve been waiting for – I was really hoping you guys would further expand the original article!

    @nuzunet

    0
  39. 40

    This is great article, I truly plan to apply the methods discussed in your article. I was looking for a way to combine some sports data along with a few feeds for news purposes with my new blog. It is a great help thank you.

    0
  40. 41

    Jacob,
    Thanks so much for posting this article, it’s really helped me get far in a project I’m working on. One question I have though that you could probably answer fairly quick.

    For your section titled “Retaining the Page Layout for Post Views within a Category Page,” how do you handle this scenario for posts that are in multiple categories?

    I’m currently working on a motion graphic artist portfolio site with projects that are in 3 separate categories: all projects, animation, composition, and design. All of the projects are part of the “all projects” category, in addition to at least one other category. I’ve created 4 separate project filter pages, each one that allows you to filter through either all projects, animation, composition, or design based. However, when I output the posts on say for example, the animation page, the permalink always reads /all-projects/post-name, since all of the posts are in the all projects category. So when I view that particular post and access it through the animation filter, the navigation shows all projects as being the current item, not animation. Any ideas on how to handle this?

    Thanks a lot for this awesome article.

    0
  41. 42

    great article..thanks for sharing..

    0
  42. 43

    Could you add some guidelines for adding icon in the settings page of the theme. And how can one add multiple options page for a theme?

    0
  43. 44

    Hey guys

    great round up but I’ve got something new for ya!
    Its a plugin called Advanced Custom Fields and it’s perfect for any WordPress CMS developer!

    you can check it out on the WordPress Plugins directory: http://wordpress.org/extend/plugins/advanced-custom-fields/

    Enjoy!

    0
  44. 45

    Glenn Rieland

    May 5, 2011 8:37 pm

    Which About ALEXA Rating AS A Device FOR Google Greater Ranking?

    0
  45. 46

    In this section: “…Here is how to retrieve content above and below the more divider as separate blocks of HTML content in the corresponding page template file…”

    At line 6, shouldn’t the colon be a semicolon?

    [code]
    global $more;

    $more = 0;
    echo '';
    the_content('');
    echo '': // this colon

    $more = 1;
    echo '';
    the_content('',true);
    echo '';
    [/code]

    0

↑ Back to top