PHP Code to Clear the WPSSO Cache

wpsso-icon-round-2048x2048

If you use a caching plugin, you may have an option to include custom PHP code when flushing the cache manually — for example, Comet Cache has an “Evaluate Custom PHP Code when Clearing the Cache?” option where you can enter additional PHP code to execute when clearing the cache manually. Adding the following code will also clear the WPSSO object cache when clearing the webpage cache:

Continue reading


PHP – Print a Prettier Array

php-logo

I often want to output an array for debugging purposes, but using var_dump() or print_r() on an array that includes true / false values and class objects can be problematic — false values appear empty, and class objects can include too much information. I wrote the following recursive static method (presented here as a function) to pre-filter an array for readability when using print_r() or var_dump().

Continue reading


How Fast is WPSSO Compared to Other Plugins?

wpsso-icon-round-2048x2048

There is a huge variety of available plugins for WordPress — 30,326 plugins as of today — and if you’ve tried more than a few, you’ll have noticed a marked difference in their quality as well (functionality, user interface, stability, etc.). If you know your way around PHP, you should take a moment to browse the source code of a plugin before installing it. You’ll notice quite a difference there as well. ;-) You can view WPSSO’s source code directly from WordPress.org’s SVN repository. If you do, please excuse the lack of comments — it’s on my To-Do list. ;-)

I started developing the NextGEN Facebook (NGFB) plugin about a year ago, when I broke my foot and was stuck in bed / on the couch for much of the day. NGFB is the foundation for WPSSO, minus the sharing buttons and their related features (shortcodes, widgets, stylesheets, javascript caching, and url shortening). WPSSO has 25% less code, is 0.0070 secs faster per page load, and is often preferred for websites that already have (or don’t need) a set of sharing buttons.

I’ve always kept an eye on performance, and used WordPress’s object and transient caches when possible, along with disk based caching when appropriate. NGFB and WPSSO are fast, but until recently, I’d never compared their performance to other plugins. As I prepare WPSSO v2.4.4 for release later this week, I took some time to double-check its performance and that of a few other plugins as well.

Continue reading


NextGEN Gallery v2 Resize Issue Persists

If you are concerned about the quality of your NextGEN Gallery v2.x resized images, this should be of particular interest to you.

Some months ago I contacted Photocrati to ask them how, in version 2.x, developers could retrieve the “actual” dimensions of a resized image. In the past, after resizing an image we could use PHP’s getimagesize() function on the resulting file, but in v2.x image resizing is dynamic and those resized images may not be available on disk. I had some concerns between the expected / calculated image dimensions, those returned by NGG v2.x’s methods / functions, and the actual image retrieved by the URL. All 3 dimensions were different! A resized uncropped image which should have been 300x200px, was reported as being 300x199px by the NGG methods / functions, and the image retrieved by URL was 298x199px!

This may not sound like much, but a few pixels here and there can lead to image distortion when rendered by browsers, alignment issues in page layouts, and failures when working with minimum image dimensions (for example, Facebook ignores images smaller than 200x200px).

Continue reading


WordPress Multisite Activate, Deactivate, and Uninstall

php-logo

I recently added multisite support for NGFB and faced a few challenges — the documentation is a little slim, especially when it comes to uninstalling / deleting plugins. The basic premise is that network-wide plugin activation must take care of the essentials for all sites (like creating default settings in the options table), and when removing the plugin, it should cleanup all its settings from all the sites. I prefer working within classes, so opted to keep the uninstall method in the class, instead of breaking it out into an uninstall.php file.

Continue reading


My WordPress Debug / Logging PHP Class

One of the eventual issues you have to deal with when developing a plugin for WordPress, is finding out what went wrong when someone reports a bug. You need to know what the plugin did — what decisions it took as it executed and why. There are a number of PHP / WordPress debugging tools available to developers, but you can’t really ask customers to debug your plugin with these. At most, you can ask them to click a “debug” option so you can get more info about it’s operation. And this is where my WordPress debug / logging PHP class comes in. At first, it was just a way to include a few hidden HTML comments in the webpage, so I could have some clues as to what might have went wrong and where. But the more I used it, the more useful it became. Here are a few examples…

Continue reading


Screenshot Machine Shortcode v1.1 Plugin for WordPress

Include images from Screenshot Machine in your content with a shortcode.

Use the [[ssm]] shortcode in your content with the following arguments:

  • key=”{account key}”
  • url=”{website url}”
  • size=”{size letter}” (default=T)
  • format=”{jpg|png|gif}” (default=jpg)
  • days=”{cache expiration}” (default=14)
  • wait=”{wait in ms}” (default=200)
  • title=”{href title}”
  • link=”{yes|no}” (default=yes)
  • target=”{link target}” (default=_blank)
  • refresh=”{yes|no}” (default=yes)

Continue reading


Collapse / Close WordPress MetaBoxes

I recently converted the single NGFB Open Graph plugin settings page to multiple submenu pages in WordPress, and at the same time, wanted to present some of the metaboxes closed — either by default, or force them closed whenever the page was displayed. There are generally two ways to do this, one would be to use the add_filter() function to add the “closed” class to some metaboxes, but this would mean forcing the metabox closed every time the settings page was loaded. A more flexible method is to access the user options table with get_user_option(), check to see if a particular page has some open/closed metaboxes, and then decide if we want to force them closed, or just close them by default — If the user has not clicked a metabox open or closed, then no record for that page will be present (thus we can create an entry with our default closed metaboxes).

Continue reading