Custom Programming

Do you need one of my WordPress plugins customized to fit your needs?

Do you need some other WordPress plugin customized to fit your needs? 

Do you need a custom WordPress plugin programmed from scratch?

Do you need help putting together a customized WordPress based web site?

If you need any of these things, then please contact me with details and I will be happy to discuss your project with you!

In addition to programming a very complex and complete set of plugins for my son’s school PTA web site, I have done custom work for several other projects, both for myself as well as other clients.  Through these projects I have developed quite a bit of experience in programming extensions for popular plugins such as Woocommerce and Gravity Forms.  In addition, I’ve done projects where I have found other plugins that had some, but not all, of the functionality needed, and rewrote and extended them to fit the project’s needs.

Some of my more recent work includes:

  • Extensive custom auto-parts web site built on WordPress and Woocommerce. This was a major job, and we first needed to figure out if WordPress & Woocommerce could handle an online shop with over 100,000 products in the catalog, without slowing down the site. After we determined that, with a powerful server, that WordPress & Woocommerce could handle that many products, we needed to figure out an efficient way of importing large amounts of auto parts into Woocommerce in a short amount of time. The parts data was being collated into CSV format spreadsheets from several large auto-parts databases. Although there are several CSV importer plugins currently available, we determined that none of them would work for our needs.  When importing thousands of products at a time, the only way to do it quickly was by writing many rows of records direct to the database at once. We came up with a function that would do this, and could create 70,000 new products in under 4 minutes. Images were another issue, and so I created a CRON function that would run every 15 minutes in the background, search through images uploaded via FTP to a specific directory, find the matching products (first part of image name is the part SKU), and insert the images into the media library and attach them to the products, in batches of 250 images at a time (less than 3 minutes to process 250 images). To speed up product searches, filtering, and display, I programmed a custom cascading AJAX based filtering system widget for make, model, year, category, and text search string. We also bypassed the normal Woocommerce “shop” page, creating our own custom product display loop to speed things up with over 70,000 products in the database.  Finally, I created an all new pricing system to account for several different types of customers and pricing schemes. For this system, we import the list (retail) price along with the cost (store cost) for each part from the CSV files. List price is stored as the regular Woocommerce price, while Cost is an additional price field we save in the postmeta for each product.  For each of several roles we set up, we can define if their “base price” is the List or the Cost, and then define a multiplier, so we can set a percentage above or below the base price for each user role. In addition, some customers of certain role types will get more of a discount than others with the same role, so I also set it up so that you can also define the base price and multiplier for each individual user.  It can be set to the role default, or you can set them to other values and override the role values for that particular user.  There was a lot more to this custom job as well, including custom payment gateways (quote, purchase order, etc.), shipping methods, and a variety of other customizations. Eventually I may split off this new pricing system and offer it as a stand alone Woocommerce extension.
  • Creating a Woocommerce Wholesale Ordering extension for my wife’s web site, paychiguh.com.  For this plugin I created a Wholesale Customer role and added Wholesale price fields for products in the Woocommerce system.  Wholesale customers could then shop in the online store like a normal customer, except they would see the wholesale prices. This extension has since been released to the public, with many more features and options. Please see the Woocommerce Wholesale Ordering extension page for more details.
  • Creating a Woocommerce Pre-Order extension.  My wife also needed a way to put some preorder messages up in various sections of the Woocommerce system to let people know that certain items were available for preorder and to give them information on expected delivery date and payment requirements.  She also needed to be able to turn these notices on or off by product and by product category, and customize the message at any time.  Again, I created a plugin that hooked into Woocommerce and added checkboxes to products to determine if they should be preorder items.  On the Preorder settings page in Woocommerce she can pick a product category to show a preorder message, as well as turn on or off a message for the overall shop page.  There are separate messages for all three areas (shop, category, and individual products) and each can be turned on or off from the settings page. This extension has since been released to the public with additional features and settings. Please visit the Woocommerce Pre-Order extension page for more details.
  • Custom mods and functions for Classipress theme.  Finally had time to upgrade my FREE Musicians’ Classifieds site and switch it over to a new WordPress based system using the Classipress theme from AppThemes. Seems like a lot of people have problem with spam when running these types of classifieds site. I didn’t want to make visitors have to create an account to respond to ads, and the built-in contact form for ads only had a simple match captcha to stop spambots. I created a child theme and did some mods and custom programming to do much more elaborate spambot checks on that form (hidden), as well as also send the form contents through Akismet to check for human submitted spam/scams.  We’ll see how well this does… Akismet usually does a very good job. I also found a little security bug that let people put script into the content areas when posting an ad and those scripts were getting executed on the ad review page (before final submission), so I fixed that little problem for them.  Did a few other modifications here and there.
  • Custom Tutor Directory and submission/editing system.  This is a recent project I completed for a client in Canada.  He has a tutoring web site and needed a way for tutors to submit listings online, and keep them pending until he could personally review and approve them.  Once approved they needed to show up in a simple online directory that could be filtered and searched easily, with links from the directory to a page with more details for each tutor, and then a way to contact each tutor from the web site that would also send a copy to the site owner.  To do this, I created a custom post type for the tutor, with some help of available plugins for that purpose (instead of programming from scratch, which wasn’t in his budget).  The toolset plugins also helped set up the forms for submitting and editing tutor listings, as well as the directory view.  I then created a simple Gravity Forms contact form that would be automatically included on each individual tutor page with a hidden field to track the post id (to identify which tutor).  I then only had to program a small custom plugin that would change the recipient for the Gravity Forms notification and make sure it got sent to the correct tutor, while also sending a separate notification to the site admin.  My custom plugin also hooked into the custom post type editor and when the admin approved a new tutor listing (set status from pending to publish), then my plugin would automatically create a new user account for that tutor, generate a strong password for their account, and then email them to let them know their account was approved and send them their password.
  • Modification/Extension of the Audio Player add-on for Easy Digital Downloads. This was something I did for my own Performance Loops web site.  I needed audio previews of my downloadable loop & sample products for this new site of mine, after already deciding upon Easy Digital Downloads as my shopping system for the site.  I purchased their own Audio Player add-on, which lets you attached one or more audio preview files to a product.  However, the way it was set up, it only shows the audio player on the individual product pages.  You can’t have a little audio player for each product in the main shop/products page.  Their main shop page was only showing photos and the excerpt for each products (custom post type), and you can’t embed audio players or shortcodes in the excerpt section, so that wouldn’t work.  Instead, I found some template hooks, and added my own function in the product loop to place my own custom designed mini audio player above the excerpt for each product (see it in action on the main shop page).  It was a lot of trial and error to get it the way I wanted, but I think it turned out pretty good for someone like me who isn’t very good with graphics.

The PTA Manager system

By far my biggest project, and the one with which I learned WordPress and Woocommerce inside and out, was the custom programming I did for my son’s school PTA web site.  This current school year has been my test year using what I did on the live web site, and getting feedback from various PTA board members.  The main goal I had was to allow various PTA committee chairs to manage their own pages, create their own volunteer sheets, manage programs like Eager Reader online, all while maintaining the privacy of all parent, student, and PTA member information.  The system I created hooks into WooCommerce to handle registration and PTA Membership, putting all parents who sign up for free site registration, or who order a paid PTA membership, into a pending status until they can be confirmed to be a real parent of at least one student at the school.  Once approved, they are giving parent level access to the site, where they can view things like the online student directory (search for students and get the contact info for the parents, but only if they purchased a PTA Membership).  There are databases for students and teachers, and then verified parents are set up with WordPress user accounts with either a parent role or parent-member role (for parent who purchase a PTA Membership).  We manage sales of Logowear, Yearbooks, and even fundraising donations through Woocommerce, along with some custom programming I did to create special classroom delivery reports for products we sell that are delivered to the students in their classrooms.  I also created special registration and membership reports that tap into Woocommerce orders and extract the appropriate information.  Parents can add, edit, and delete their own students, and we set it up so that two parents can “own” & manage the same student (in case they both have accounts, or are separated/divorced).  We took our Eager Reader program online this year, and set it up so parents can sign up their students online and enter their reading time for each tally.  On the back end, the Eager Reader system generates several reports for the chairs to make it easy for them to figure out which students earned which prized and list them in a way that makes it easy to sort the report and deliver the prizes.  Two parts of the system have already been packaged as individual plugins and release as free plugins on WordPress.org.  The first was the PTA Member Directory & Contact Form, and the newest release is the PTA Volunteer Sign Up Sheets plugin.  I will continue to work on isolating other parts of my very complex system, and making them a bit more generic and configurable, and will release those as they are ready.

However, if you need a complete PTA Management system for your web site, that can be used with any WordPress theme, please contact me and we can discuss what it would take to modify the system for your needs and get it installed for you.

My Background

I taught myself Assembly Language program while in middle school in the late 70s.  I continued working with computers and programming for fun throughout high school, and then studied Electrical & Computer Engineer at the University Of Illinois on a scholarship.  After college I was a Nuclear Engineering Officer for the US Navy for 5 years, and then took a change of direction and got in the the recording industry, where I worked at a major recording studio in the Seattle area for several years while building up my own business on the side.  These days I mostly focus on mixing, working from my own home based recording studio.  As my son entered Grade school four years ago, I decided to volunteer to be the web master since I’ve been building and maintaining my own web sites since the late 90s.  Our site was very outdated and our sign-up sheet system for volunteers was overly simple and too open to spambot attacks, as well as revealing the personal info of the volunteers to the general public. After having recently reworked a few of my own web sites with WordPress, I thought it would be a good platform for our PTA web site since chairs could fairly easily edit the content on their own program pages, and I thought for sure I’d be able to find some decent plugins that could handle things like Volunteer sign-ups.  Unfortunately, after several weeks of searching and trying out various plugins, I couldn’t find anything close enough to fill our needs.  That’s when I decided to dive back into programming so I could create a new custom system for our PTA web site.  After several months of work, I had a fairly complex system ready to launch in time for the 2013-2014 school year.  It has all gone very smoothly so far, with no show-stopping bugs, and only a few modifications here and there to fit the preferences of the PTA board members.  Since then, I’ve slowly been reworking parts of the PTA system to be more flexible and work as stand-alone plugins for the general public. The knowledge I gained about WordPress and Woocommerce allowed me to also program some custom plugin extensions for my wife’s web site, as well as some of my own site and for clients (see some examples above).