1

I have a need to customize some posts from the loop.
Here's the deal: My site is set to 10 posts per page. On post #2,#5, #7 (on every page), I want to display specific background. What's the best solution for this kind of problem?

2 Answers 2

2

This should do it:

$real_current_post = $wp_query->current_post + 1;
switch( $real_current_post ){
  case 2:
    // Do something for 2
    break;
  case 5:
    // Do something for 5
    break;
  case 7:
    // Do something for 7
    break;
}

You may need to globalize $wp_query, but as long as you're using the normal template hierarchy, it should already be in scope. If you do use global $wp_query;, use it before the loop starts.

3
  • To summarize the solution and to make an appendum: The answer was to use a counter and check the value of that counter with each iteration of the loop. For styling based on post id(or similar) you'd have no need for such code, because post specific styling is already possible with the post_class().
    – t31os
    Dec 16, 2010 at 17:52
  • @t31os: Except that post_class() doesn't address this particular problem (ie. order specific styling), and I could not find anything in the core code that did. Dec 17, 2010 at 1:48
  • John's answer addresses the question, i was simply pointing out that if post specific styling(by category, id or whatever) was required(and not a count specific style) that the post_class would cover it(incase anyone reading is looking for ID/cat/tag based styling, etc..).
    – t31os
    Dec 17, 2010 at 10:03
0

One way of handling this is to use CSS pseudo classes. On the plus side it keeps you from making hardwired decisions in your loop code, on the down side it won't work in older/broken browsers, ie. MSIE 6.

div#content div.post:nth-child(2), div#content div.post:nth-child(5), div#content div.post:nth-child(7) { background-color: #FF0; }

If you like this approach but it must work in all browsers, then you can do the above in jQuery. Although I try to make major design elements degrade gracefully when dealing with dinosaurs like IE6, I've stopped catering to it for stuff like this. The majority of its users are either inside corporate LANs or are severely lagging end-users, neither of which are in our main demographics.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.