The current version of my WordPress OCD Plugin Stats plugin, is somewhat… clunky.1 When I wrote it I didn’t know that WordPress.org had an API for it’s plugin statistics.2 Thus, the current version essentially scrapes particular WordPress.org plugin pages for information and drops it into the WordPress dashboard.
After poking into the stats on one of my plugin pages the other day I discovered that the source code for the page included several calls to a WordPress.org API. Why should I bother scraping and interpreting a page of HTML when I can just ask WordPress.org to deliver the exact data I need in a nifty JSON format?! I’m very much looking forward to adjusting this plugin to use a more direct and simple call to the WordPress API rather than scraping plugin pages.
While posting about my DrawBot adventures, I’ve become increasingly annoyed with my own post series WordPress plugin. If only it had a simple button in the WordPress editor to drop the shortcode for an existing series, it would instantly become so much better. Thus inspired, I delved into WordPress.org and sought out the answers. What I discovered is that while it’s not particularly difficult to add a button to the WordPress text editor, it didn’t seem to be very well documented. I’m still working on how to add a graphical button to the WordPress TinyMCE visual editor, so stay tuned for that. I was ultimately able to glean the necessary information from the WordPress “Quicktags API. However, for your sake1 I’m distilling what I’ve learned right here.
First, I’ll give you an overview of what we’re going to do. If you’re looking to add a button to the WordPress editor, it’s probably because you’re working on a plugin. Thus, I’ll assume you have a working knowledge of plugin development. Your plugin will need to include, at a bare minimum, one action hook and one function which performs the double duty of creating the button and giving the button some kind of ability.
// This action adds a script to the script footer on administrative pages
add_action( 'admin_print_footer_scripts', 'MBSS_quicktags', 100 );
// This is the function that is run at the end of the administrative pages in the script footer
// Optional database interactions
// I used this section in my plugin to run a query on the database and return information that would be used in the button
// Creates button in the text editor
QTags.addButton( 'MBSS_tag_id', 'Add Series', MBSS_add_series_js );
// Function to append the series shortcode to the end of the post
editor = document.getElementById('content');
editor.value = editor.value + "\n" + "EXAMPLE TEXT TO APPEND TO END OF POST";
Posts about Simple Series (with a list created by this very plugin!)
While looking at the source code on my Simple Series plugin page, I began to wonder how WordPress.org was serving up all those nifty little stats into the downloads graph. ((Photo courtesy of Windell Oskay)) What I discovered is that there’s a little bit of jQuery magic going on that pulls download data from a WordPress.org API, formats it for niftiness, and inserts it into the dynamically draw SVG graphic of the downloads.
In case you’re interested, the API call looks like this:
This weekend, almost an entire year from the last update, I made some revisions to my Simple Series plugin for WordPress.1 This is one of the plugins that I use the most often for WordPress. It’s right up there, in terms of frequency, with the WP-Footnotes plugin that lets me insert footnotes.2
As much as I loved this plugin, it was always a little bit of pain to use. In order for two posts to be associated together in the same series, the title must be listed exactly the same in each post. So, to make sure that I was getting it right, I would open an old post in the relevant series, copy the exact plugin shortcode with the exact title, and paste it into the new post.
With this update you can click the “Add Series” button in the TinyMCE text editor for a post and insert any series title you’ve previously used. It’s not yet as elegant as I would like, but it makes a few button clicks out of a what used to be an annoying process.3 I’ve also added the ability to have a series between pages, posts, or any combination of the two kinds of content types.
Posts about Simple Series (with a list created by this very plugin!)
This morning I quickly checked my small-side-business SaaS site before heading off to work, only to find the thing that people actually pay to use was not working. Dropping everything, I quickly started hunting through code. I haven’t changed a single word of core logic on the site in about six months, so there’s no reason this problem should be occurring.
Except that whenever WordPress asks me if I want to update, I immediately do so. Sometimes really minor changes to WordPress functionality create huge tangles of CSS and HTML, as it did in this case. Once I tracked down the problem I quickly hacked together a solution and uploaded it back to the site. 2 Thankfully it’s now working as well as it did before I found this problem.
Because my site has been working so well for so long3 I’ve been loathe to build a better design for the logic. In the very long run, it will save me time, but in near future/short run of a few months all it will do is suck up time without demonstrating a tangible benefit. I suppose being less prone to breakage is a tangible benefit, but I spend less than 2 hours a year dealing with minor problems like this. The prospect of spending two months rewriting and then rechecking code to save 2 hours a year doesn’t seem like a worthwhile investment.
Frankly, what I need to do is come up with some other tangible benefits that when added with the existing fixes I need to perform will have a more tangible4 benefit, and then jump into building them all.
And, really, it’s a nearly unforgivable hack. Rather than figuring out how to fix the problem in the plugin, I commented out the newly-bad code and hacked that same code directly into the website’s theme. I know, I know… nearly unforgivable. At least I didn’t try to hack the core. [↩]
The core logic of the site has been essentially unchanged since about 2008. [↩]
I just read this super useful comparison test of four top-notch WordPress caching solutions. Since none of my websites have the kind of traffic that really warrants the optimal caching solution, it’s nice to know what that solution actually is. :)
Adds a caption, that includes the same text as the original photo on Flickr
Centers the image, using WordPress’s tags
Makes the photo credit part of the text. I like to include the photo credit using slightly different language. At some point I’ll get around to modifying the plugin so that I can save my format as a setting.
Admittedly, these implementations are just a little bit buggy – I just hacked those bits in without really doing any serious testing on them. Once I have kicked the tires on this code a little, I’ll post it to the plugin’s page. If you want to take a look at it before then, just drop me a line.
Sometimes the right post just needs the right picture – I’ve actually had a lack of a good photo hold up a post before. I’m happy
ShrimpTest is a WordPress plugin with a LOT of promise. Basically, it is an A/B testing tool for WordPress. The plugin author, Mitcho, does a great job of explaining A/B testing and why it is important. If you are already familiar with A/B testing, you can skip ahead to 16:03 in the video to see a demo of Mitcho presenting the plugin
Unfortunately, and this is truly a shame, the plugin also suffers from an almost complete lack of development and updating. There must have been some change in WordPress v3.2 that stopped the plugin from working. The effect was that the “A/B” icon in the rich text editor was missing. Fortunately, someone figured out a work around. The super quickest way to apply this change to the plugin is to do the following:
Make sure you’re logged into your WordPress website of choice
Navigate to `http://[DOMAIN].com/wp-admin/plugin-editor.php?file=shrimptest/plugins/variant-shortcode/tinymce.js&plugin=shrimptest%2Fshrimptest.php`