Archive for the 'Work' Category

Thickboxing in WordPress themes

The lovely Thickbox jQuery plugin appears to no longer be supported by it’s creator, Cody Lindley, but it’s included with WordPress (it provides the “popup” overlays in the post editor for uploading and inserting images and other media), very flexible and that’s good enough reason for me to use it for the time being.

I’ve always been a bit shy of using Thickbox in the front end of WP sites, as the close button and loading animation paths are hard-coded relative to the WP admin area… in short, they don’t work at the front without tinkering. Today I realised that the required tinkering was (relatively) trivial, so here’s my code for including thickbox at the front end, you can drop it into the functions.php of your theme or make it into a plugin.

function my_load_thickbox() {
add_thickbox();
?>
<script type="text/javascript">
/* <![CDATA[ */
var tb_pathToImage = '<?php echo esc_js( includes_url( '/js/thickbox/loadingAnimation.gif' ) ); ?>';
var tb_closeImage = '<?php echo esc_js( includes_url( '/js/thickbox/tb-close.png' ) ); ?>';
/* ]]> */
</script>
<?php
}
add_action( 'wp_head', 'my_load_thickbox', 0 );

Taking this section by section:

The add_thickbox function is a wrapper for adding the styling and script for Thickbox; the style gets added to the HTML HEAD element, and the script is added to the footer.

The script block is where the Thickbox image paths are corrected, the technique works because the WP Thickbox script checks if these two paths are set a JS vars before it sets them and uses any pre-existing values. Because the vars in the function above are set before the Thickbox script is loaded (the script has been added to the footer, remember) we are able to override and set some paths which will work on the front end of a WP site. The include_urls function is a handy way to reference some code inside the wp_includes directory (which the two Thickbox images are). The esc_js escapes text for a JS context, it’s included to prevent something hairy and completely unexpected getting into the JS and making a security mess everywhere (it’s always a good idea to escape anywhere and everywhere you can).

Here’s the code in a separate file, which you may find easier to read: thickboxing.phps

(One gotcha: because the scripts are added to the footer, your theme must include a wp_footer action.)

Problem with a PHP fatal error when saving WP profile

This bug has been around for a little while now, and one of my clients has it bad as they cannot save user profiles without patches to WP core. (Unfortunately although WordPress Trac has tickets (#9640, #7540) the discussion over how the problem needs to be fixed has been going on for a couple of WP releases now.)

The symptoms are the following error:

Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string in /home/halfbets/public_html/wp-includes/wp-db.php on line 445

The solution is outlined in this WP support post, but does involve editing core WP files so does require both some knowledge and a brave heart (and the willingness to repeat the exercise if the problem isn’t fixed the next time you upgrade).

Fix users with no role – data migration plugin

So you’ve migrated a bunch of users over from another system and then, horror, you discover that they don’t have roles in WordPress. The WP Users admin screen doesn’t cope with this issue (why should it), so the only option would be to go through and manually select the roles for each user with no role… fine, right? Except I just migrated 8,000 ish users and there’s no way my meta carpels will take that abuse. This plugin finds any users on your system with no role and gives them the role of ’subscriber’, it does this in batches of 1,000 users per page load and once it has finished it replaces your entire blog with a message saying it’s finished… so don’t leave it running unattended kids, eh? (I know that’s rude, but coding “echo ‘blah; exit;’ is SO much quicker and it’s only a dirty data migration tool.

You can download the source here: Fix Users with No Role – Data Migration tool as WordPress plugin

Migration to bbPress – fix topic slugs

So I’ve just had to migrate a whole load of data to bbPress, and unfortunately the fairly old migration tool I was using (while generally excellent) didn’t bring across the topic-slugs, meaning I couldn’t have pretty permalinks in bbPress. So I’ve written a quick plugin which creates the topic slugs, it does this by doing 1000 at a time every time the page loads, then it very rudely bangs up a big text notice telling you it’s done and you should remove the plugin… at this point bbPress won’t work until you remove the plugin. You have been warned. I couldn’t be bothered with polite messages as this is a one use migration tool. :)

Here it is: bbPress create topic slugs plugin – data migration tool only

Updated version, this one also create forum slugs: bbPress create forum and topic slugs plugin – data migration tool only

Installing ImageMagick on MacPorts and imagick on PECL

Over the last few hours I’ve installed ImageMagick on MacPorts (super easy), and imagick on PECL (not so much). Xentek’s post on ImageMagick and imagick was a great help, and got me past the first brick wall I hit (passing in the ImageMagick prefix to prevent it complaining about Wand-config)… but then I couldn’t get the darned extension installed. Anyway, here’s the steps I went through, and if anyone has any suggestions for improvements I’m all ears. Continue reading ‘Installing ImageMagick on MacPorts and imagick on PECL’

Editing many posts at once in WordPress

Need to edit many posts at once in WordPress? Is the standard limit of 15 posts on the Posts Edit screen just not enough for you? Well, there is a hack you might be interested in. This involves editing the core WP files, so is not recommended as a permanent solution or for production sites… it works for me, but it might kill your cat and devastate the area around your home. You have been warned. Continue reading ‘Editing many posts at once in WordPress’

Restoring deleted files from an SVN repository

I’ve always idly thought that one of the brilliant things about version control was that you could recover accidentally deleted files when it became necessary. Well that scenario arose today, and I realised I had absolutely no idea how to do it. Continue reading ‘Restoring deleted files from an SVN repository’

Individual languages for WordPress Mu sites

For WordCamp UK 2009, we’re having a dual language site (currently in the works, but hopefully near completion soon), where the content will be available in English or Welsh (as our host city is Cardiff). I had a scout around the various multi-language plugins, and none of them really seemed to hit the spot (mostly because there seemed to be too much UI jammed onto the screen), so I’ve decided to go with WordPress Mu running with a sub-directory for each language.

Continue reading ‘Individual languages for WordPress Mu sites’

Page load hooks in the WordPress admin area

There are a number of really handy hooks, each of which are specific to a page in the WordPress admin area. You can use these action hooks to enqueue scripts on particular pages, to process form requests, etc, etc.

Despite these hooks being so handy, and despite using them a great deal, every time I want to use one I have to dig through the code to try and work out how they work and what they’re called… so for my own benefit, here’s what I think is a complete list: Continue reading ‘Page load hooks in the WordPress admin area’