WordPress Development Services

WordPress logo

The WordPress CMS is a well supported, user friendly and highly extensible platform for managing your online content. We provide a full range of WordPress services, from individual plugin development to creating and hosting complete websites.

Our primary focus is on custom WordPress plugin development, but we also offer programaticly oriented themes and even core modifications if necessary. We develop all of our WordPress plugins and themes from scratch to ensure stability and uniqueness.

If you would like to view a sample of our work, many of our WordPress themes and plugins are freely available from the official WordPress.org repositories under the GPLv3 license. If you would like a price quote or have any other questions, please send us a message via the contact page and we will be in touch shortly.

Learn more about our WordPress Development Services.

I’ve exported all my WordPress PHP snippets from Dreamweaver using Massimo’s Snippet Import/Export extension.

I have about 50 of the most common theme related functions and pasted a lot of information from the WordPress codex in the descriptions. You can download mine here (tar.gz) (zip).

If anyone would like to contribute similar WordPress snippets, I’ll be glad to add them to the library.

If you want to get some of your social media statistics for a particular URL, like the number of Facebook “likes,” mentions on Twitter, or +1′s on Google Plus, you can (at least in theory). Facebook’s Open Graph API supports public like/share counts the best and in the easiest way. Twitter still allows you to do it by calling an internal JavaScript, and Google+ has no even semi-official way to do this, which is really uncharacteristic of them.

Google even took measures to disable the “unofficial” API method, so the only way to do it at the moment is to rip the number out of the official Google+ button’s source code with a regular expression. You can complain on this issue ticket and if enough people do, they might actually listen.

In any case, here are the good, the bad, and the ugly:Read More …

By now, you’ve probably noticed that some entries in your Google search results are appearing with a small picture of the author, along with their name and the page’s publication date.

Google+ Search

This is the result of Google’s latest push to boost Google+ membership via further integration with search. While associating a profile with a search result may not increase the item’s search rank (although it might), it certainly does make it stand out more from the other results and without a doubt improves click thru percentages. That alone should be enough of an incentive to get a Google+ profile and start associating it with your posts.

Here is how you can do it in 3 steps: Read More …

There are many little details that separate websites that look professional across devices and browsers from those that don’t. The favicon and the apple-touch-icons are one of those small extra details that make all the difference in how your site is perceived by users.

Apple Touch Icons

The browser on touchscreen Apple products (the iPhone, iPod touch, and iPad) offers the option to add a bookmark to a link directly to the home screen alongside the users apps and widgets. If your site doesn’t provide the apple-touch-icon markup, then the icon will just be a screenshot of the webpage. This is generally quite ugly as most websites don’t fit well in a 57px square! However, if you set an apple-touch-icon link to a PNG image, the browser will use that as an icon instead.

There are 4 image sizes that correspond to the 4 different Apple touchscreen product resolutions currently available. These are (in pixels):

  • 144×144 (iPad retina)
  • 114×114 (iPhone retina)
  • 72×72 (iPad)
  • 57×57 (iPhone)

Read More …

This reference has been updated to include the new HTML5 elements and separated (but not removed) the deprecated elements to assist in phasing them out of your development.

  1. Supported Block Elements

    These are all the block level elements (display:block) that are officially supported in HTML5.
    article, aside, blockquote, body, br, button, canvas, caption, col, colgroup, dd, div, dl, dt, embed, fieldset, figcaption, figure, footer, form, h1, h2, h3, h4, h5, h6, header, hgroup, hr, li, map, object, ol, output, p, pre, progress, section, table, tbody, textarea, tfoot, th, thead, tr, ul, video
  2. Read More …

The Walker_Comment class seems to be the weirdest and most hacked together of all the Walker classes in WordPress. Despite a few hours searching, I could not find a single example of a working Walker_Comment class anywhere on the entire internet. So I made this one from scratch by copying the default Walker_Comment function that comes with WordPress. It’s doing what I need it to, but I’m not 100% sure I’m using it properly.


Ignoring $output

Although the functions are set up to pass a global &$output variable forward, they don’t do it (at least in the default Walker class), they just echo each portion as it comes. It appears the Walker totally ignores the variable which just strikes me as odd.

start_lvl() Isn’t the Start

The start_lvl() function, with a $depth of 0 begins at each child comment, so essentially at the start of every reply which is the first to reach a new level under a particular comment. This took me awhile to figure out and is also rather odd. That’s why you have to wrap the comment list div/ol/ul yourself, because it has no way to reach the top of it’s own comments list. I was able to wrap the comment list dynamically by just using the constructor and destructor functions, but I’m sure none of the other Walkers require that.


In the $args for wp_list_comments(), there are 2 optional callback functions which plug into start_el() and end_el() (I believe), so if you don’t need to play with any of the other functions, this is probably a less annoying way to accomplish this. I removed that plugged-in code from this example since there is no reason to ever do a custom Walker that refers to outside functions, just pick one or the other.

Anyway, here’s the code I finally came up with:Read More …

Microdata is one of the rich snippet formats that is supported by the major search engines (learn more on schema.org) and is natively supported in HTML5 in a really powerful and simple way. These formats can help robots parse the data on your pages more accurately and in greater detail. Google uses a few of these formats to tailor result displays in certain situations. There isn’t a ton of support yet, but anything that improves semantics is usually a good idea, so I’ve started adopting this into my web design habits.

You can check how Google is parsing your rich snippets to make sure they’re crafted correctly using the Google Structured Data Testing Tool by pasting your url into the box, nothing to download. I will be creating example pages since I believe that’s one of the best ways to learn how to use the different schemas.

You can see my first example, a scholarly article (which uses the microdata ScholarlyArticle schema from schema.org). I hope it’s instructive.

This is the most detailed tutorial in the world (to my knowledge) on the topic of creating a WordPress theme from scratch. If you read it all, you will know everything you need to create a complete and powerful WordPress theme. The verbosity of this tutorial means it can be tailored to people of any skill level, from ace theme jockey to complete and utter beginner.

I even go so far as to break down the basics of HTML and CSS, so I do mean beginner. However, I realize not everyone needs this much detail, so I have also included links to skip past beginner sections for those are so inclined.

Twilio is a great service. It allows you to send and receive automated calls and text messages for very reasonable prices. They also have a wonderful API that makes integration into your site or plugin a breeze.


You are given a unique Account SID and Account Token for each phone number you use; you use this data to authenticate with the server. To send a request, you just put To, From, and Body URL attributes into a HTTP post. The easiest way to do this is probably using cURL (or create stream). The function below is all you need to send an SMS.Read More …