Making your own theme
Easy breezy. The minimum you need are index.php and style.css files. As long as you have the right code in your stylesheet, your theme should show up in the picker in the admin area. This doc has all the basics: http://codex.wordpress.org/Theme_Development.
Don’t forget to add <?php wp_head(); ?> right before the </head> tag in your header.php file and <?php wp_footer(); ?> right before the </body> tag in your footer.php. Without these some plugins won’t work.
Screenshot.png
To get the fancy screenshot in the theme menu, add a file called “screenshot.png” to the root folder. It should be 300 x 225 pixels.
Handy Functions
<?php get_header(); ?> and <?php get_footer(); ?> – I always forget those. They automatically get the header.php and footer.php files in your theme.
<?php bloginfo('stylesheet_url'); ?> – for your stylesheet call.
<?php bloginfo('template_directory'); ?> – to get to other stuff in your theme folder: images, scripts, etc. Does NOT include trailing slash like most EE template tags, so don’t forget to include that.
<?php bloginfo('url'); ?> – for your site’s url, as set in Admin > Settings > General. Especially handy when developing on a different domain than where your site will live when done. Saves work later.
is_page() – returns true if the current post is a page. Handy for adding a sub-page specific class or id.
wp_list_pages() – the best way to create a page menu. Dumps out a nested, unordered list (without the top-level ul tags) of your pages. My typical use looks like this:
<?php wp_list_pages('title_li=&depth=2&exclude=44,50'); ?>
This page in the codex has all the deets.
How to get content from a specific post
http://www.tipsandtricks-hq.com/query-or-show-a-specific-post-in-wordpress-php-code-example-44
Permalinks
Under Admin > Settings > Permalinks, add /%postname%/ under Custom Structure, to get pretty URLs that just have the page name. Should show page heirarchy when pages are nested as well.
Adding custom styles to the text editor styles dropdown
This post has all the necessary info. I’ve tweaked it a bit so that it references the main stylesheet, so I don’t have to maintain two stylesheets.
Change the “more” link on post excerpts to whatever you want
Add this to your theme’s functions.php file (create one if you don’t have one):
function new_excerpt_more($post) {
return ' <a href="'. get_permalink($post->ID) . '">' . 'Read More...' . '</a>';
}
add_filter('excerpt_more', 'new_excerpt_more');
Remove admin Menu items
http://www.wprecipes.com/how-to-remove-menus-in-wordpress-dashboard
Plugins
(Many plugins referenced from here: http://sltaylor.co.uk/blog/best-wordpress-plugins/)
SEO
FV Simpler SEO – great for adding meta tags for each page/post. It does a ton of other stuff, but I haven’t explored that yet.
Google XML Sitemaps – makes Google-friendly sitemaps automagically. Set it and forget it.
WP Google Analytics – adds your GA code to the right spot on every page. Also has options for turning off GA in admin area and for logged in users by role. Make sure you have your <?php wp_footer(); ?> in place for this to work properly.
UI improvements
My Page Order – drag and drop interface for re-ordering pages. Hopefully WP will have this natively some day.
Quick Page/Post Redirect – handy for when you have a page with children but no content itself. You can use this to redirect from the empty page to the first child or whatever you want. Relative links are ok.
Allow HTML in Category Descriptions – does just what it says, allows HTML code in the category description field. I’ve used this as a ghetto-charged way to add extra stuff to category pages. Custom entry types in 3.0 might handle this concept better.
Security/Performance
Email Obfuscator Shortcode – uses the native antispambot function. Super simple.
Quick Cache – great caching plugin.
WP DB Backup – easy backups. can do automated, scheduled backups.
Extra CMS-like stuff
Pods CMS – changes WordPress into a viable CMS for really reals.
Verve Meta Boxes – a fancy wrapper for custom fields that groups them and makes them easier for the end user to use.