Update May 6th, 2011: This article is now outdated, please read this one instead for a more updated way get your custom query working with pagination and PageNavi.
For this current redesign of wplover (have you seen it? come take a look!) I’m using a custom loop in the index page to remove all posts under “Links” category from the main content area. Now the most common problem with WP_Query-based custom loops is that it screws up pagination. No problem, we have this WBLT post to the rescue, and now my code looks like this:
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query('cat=-6&paged=' . $paged); // don't show posts from category ID 6, a.k.a Links
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<?php // the usual post-displaying codes here ?>
<?php
endwhile;
$wp_query = null; $wp_query = $temp; ?> |
One more thing to add is that I’m also using the WP-PageNavi plugin to show custom page navigation after the posts. After messing around with the code a bit, I find that to get the plugin working, the plugin function call needs to be placed right after endwhile; and before $wp_query = null, like so:
<?php
$temp = $wp_query;
$wp_query= null;
$wp_query = new WP_Query('cat=-6&paged=' . $paged);
while ($wp_query->have_posts()) : $wp_query->the_post();
?>
<?php // the usual post-displaying codes here ?>
<?php
endwhile;
if(function_exists('wp_pagenavi')) { wp_pagenavi(); }
$wp_query = null; $wp_query = $temp; ?> |
Placing the plugin call there will result in the correct pagination. You’ll get funky paging errors if it’s placed after the whole $wp_query variable swapping in the end.
I mentioned in my How to Launch Your WordPress Theme guide that you can use a plugin to let visitor previews a theme applied to your current site (so you don’t have to build your own demo theme). For the current version of wplover I’m using the Theme Preview plugin by Dougal Campbell.
The example from that plugin’s installation guide is pretty simple, you just create a link like this:
http://example.com/index.php?preview_theme=my-theme
If you use custom permalinks (I suppose everyone does it at this point, you remove the “index.php” part:
http://example.com/preview_theme=my-theme
Then, your visitors can use that link to preview that my-theme you have. Now, things get interesting when you want to demo a child theme. This doesn’t get documented clearly, but you can do this to preview child themes:
http://example.com/preview_theme=parent-theme&preview_css=child-theme
It’s that simple. Remember to use the correct names for both the parent and child theme. If you’re not sure, just use the theme’s folder name. Here’s an example for A Simple Love‘s demo:
http://wplover.com/preview_theme=thematic&preview_css=a-simple-love
Also remember that you need both the parent and child theme in your wp-content/themes/ directory for this to work.
Welcome to the weekly Hackers Highlight, showcasing various interesting information that happened in the last week of WordPress hacker’s mailing list, wp-hackers. You can also follow the mailing list via the Google Group front-end here.
Did you know the WordPress 24-Hours Has-Patch Marathon a few days before? Here’s a little inside story of what happened in wp-hackers. Some wanted to help but couldn’t because there’s no news posted at the mailing list, and the two days prior announcement post at the WP development blog were simply too short.
Stephen Rider suggested that it is better to revert from using the word “Appearance” back to “Design” inside the Dashboard. The change to “Appearance” happened within the 2.7 redesign, which changed all the menus from verbs to nouns. “Design” is also a noun, he said, and it encompassed the content underneath that menu better: Widgets, for example, are not just appearances but also part of the design of the site. Demetris suggested using the word “Layout” instead. What do you think?
Here’s a discussion on using the WP_Query() to display posts with a certain search term.
Wow, last weekend was quite a hectic one for me, and so this particular article goes out of schedule a bit. Anyways, as usually, this is the weekly Hackers Highlight, showcasing various interesting information that happened in the last week of WordPress hacker’s mailing list, wp-hackers.
First, I found out that the Google Groups frontend version of wp-hackers is a much pleasant version to read and link to, so I’m going to use that from now on.
Liraz Siri was working on including WordPress inside TurnKey Linux and then asked what plugins needs to be included with it. And so a bunch of WP hackers recommend their own list of good plugins to have when starting a new WP blog.
Shane A. Froebel released the wireframe document for the new Media Management System for WordPress 2.9.x. Sounds great. It’s on his blog, and also available as a PDF file (direct link, this one).
Here’s a nice and short discussion on best practices for using wp_enqueue_script and wp_enqueue_style, started by Michael Toppa.
Joost de Valk asked about some information on the syntax of WXR. Surprisingly, there is no such definitive resource anywhere!
This is the weekly Hackers Highlight, showcasing various interesting information that happened in the last week of WordPress hacker’s mailing list, wp-hackers.
Chris Jean questioned whether it’s possible to hide the parent of a child theme in the Manage Themes dashboard area. While this is potentially useful to avoid user confusion (so that they don’t activate the parent theme when they should be activating the child one), I don’t think this is a particularly necessary issue. Users might not even understand what a parent/child theme is: just tell them precisely what theme to activate, and that’s it.
Joost de Valk offered a small fix so that /wp-includes/link-template.php uses less database query. Nice catch.
Ptah Dunbar asked whether there’s a WordPress UI guidelines somewhere. Apparently there is one, except that it’s written in German. Anyone interested to do an English version?
Mike Schinkel found out that WordPress always run a query for posts regardless of whether you need it or not (say, if you’re using a custom query). The discussion that follows talked about ways to disable the query_posts() function.