For some of us, the projects we work on day-to-day can be interesting (or even fun), but they can also be redundant, similar in nature and not very challenging. However, every once in awhile, a certain project comes across your desk that is different and welcomely gives you pause. This happened to me recently, so I thought I would share.
The Challenge: Member Area, Exclusive Buoy Rental System and 21-Day Max Limit During The Peak Season
What was the project?
The client came to me and asked to have a website built for a local HOA that has about 350 members. The website would need 1) a very simple front-end (static pages, events page, contact form, etc.), 2) a membership portal with several differently privilege levels so that members can access different pages in the portal, and 3) a members-only reservation system for the buoys they own on Lake Tahoe.
(Seems pretty straight forward so far.)
The client continued … The members would need to be able to pay their annual dues every year, they would need to be able to submit their boat registrations & insurance forms to the admins for approval to use the buoys, and the admins would need to be able to approve members and grant them the additional access within the member portal so they may access the reservation system. Naturally, all of these things would be unavailable to the public.
(Getting more interesting, but certainly do-able)
The client added one last thing… We need to limit members who are renting buoys to a maximum of 21 days during the Peak Season (June 1st – August 31). This would be across all 21 buoys for 21 days total, no exceptions.
(Hmm… now things get interesting)
What does the client currently have?
After asking what the client is currently using, this is what he said…. Our last developer set us up with a Squarespace website that uses their Membership Subscription plugin. Members can sign-up and use their home address for us to verify. In the membership area, members can view exclusive material, submit their insurance/registration forms and have access to a reservation area. In the reservation area, we provide a link to a 3rd party rental website that allows them to reserve the buoys.
(sounds ok I guess)
What are the problems with the current system?
The client continues… Well, any website visitor can sign-up to be a member and then we would have to manually confirm that they are actually home owners in the HOA. If they do not belong to the HOA, we would have to cancel their membership and refund their money. In regards to the reservation system, all current members have access to ‘the link’ and all they simply have to do is copy the link and save it somewhere. Which means a member can share it with anyone they want; thus bypassing the exclusive nature of renting these buoys. And, yes, this became an issue, because we were inundated with reservations from people who were not approved for these buoys (proper insurance & registration forms), AND by people who didn’t even live in the HOA community! So, we would have to police these, cancel reservations, etc. And finally, in regards to the 21 days rule, we were just using the honor system.
(wow, facepalm)
The Solution: How I Got There
Step #1: The Easy Stuff
The easy stuff was pretty straight forward. 1) Setup a fresh WordPress w/ Woocommerce website, 2) populate the database with all members from the old system (I used Order/Coupon Import Export for Woocommerce – Free Version), 3) create a user portal based on their User Roles (I used User Profile Builder – Beautiful User Registration Forms, User Profiles & User Role Editor – Free Version), 4) setup a Member Renewal via a Woocommerce product, and 5) create user forms w/ document upload functionality via WPForms Basic.
(Naturally, there is a good amount of leg work involved with the above, but I’ll spare you that part)
Step #2: The Buoy Rental System (without 21-Day Limit)
Ideally, I wanted to minimize my custom development time by trying to solve this challenge by simply using a suite of plugins to get me there. The less the better, but as long as it works and the client is happy, then that is the path I am willing to take. With that said, I tested virtually every rental product software solution I could find and sadly, I didn’t find a single silver bullet solution among them (namely anything that can provide a suitable solution for the 21 Day Limit). Of course, there were trade-offs between the plugins I tried, but ultimately I landed on Rental Products for WooCommerce.
Why did I go with Rental Products for WooCommerce? The choice was simple:
- It Integrated seamlessly with WooCommerce. Since I was using Woo anyway, keeping everything under one umbrella was ideal.
- I really liked the admin interface. The back-end calendar for checking past/current/future rentals was very clean and came with extremely useful filters.
- Their product editor within the native WooCommerce product editor was also seamless and it was extremely easy to create a product, set inventory limitations, blackout dates, etc.
- I LOVE shortcodes, and their Availability Checker is a shortcode that works with other custom shortcodes! On the Availability Checker page, I have a shortcode in the main body that filters out buoys based on their taxonomy (e.g. a buoy during the On-Peak season uses that taxonomy) and then in right column, I have the Rental Products shortcode for filtering buoys based on availability. Just awesome. (See Screen Recording Below)
- Their support was amazing. I told them what I was trying to do, and they worked with me until it was completed. They admitted that they did not have a solution for the 21 Day Limitations (yet), but they were more than accomidating in helping me find a way to project completion.
- I can go on and on, but the last thing I liked was how easy it was to cancel & refund a rental and return it back to the availability inventory. This also worked nicely with my 21 Day Limitation Solution, but more on that later!
So after I made my rental software choice, the next step was to create a couple of demo products and try to find a solution for the 21 Day Limitation.
Rentals Products Availability Calendar Shortcode Integrating
With A Custom Product Shortcode
(WATCH FULL SCREEN)
Step #3: The 21 Day Limitation (The Search For Plugins)
As mentioned before, I really wanted to find plugins to solve as much of this challenge as possible. So, I went and searched for any plugin that claimed to provide this feature. Many of them hinged on products that used taxonomy (which is good, because that is how I separated the ‘On-Peak’ and ‘Off-Peak’ buoys for the Rental Products), but none of them got me to where I needed to go. Why? Well, with the plugins I tried, all of them depended on the qty of a product purchased and not the number of days. This is completely understandable, since ‘days’ for a Product Rental are a custom meta value and not the core qty variable (e.g. a two day rental and a ten day rental both have a qty of one). So, our search for plugin integrations have come to an end. So close, but still not quite there!
Step #4: The 21 Day Limitation (The Solution – Custom Plugin!)
We are so close to solving this challenge, but have just one hurdle left, the 21-Day Limitation. I’ll be honest, at this point, based on what the HOA had before I started this project, I felt like even if I couldn’t provide a solution for this, they are much better off than where they were. But, I digress, so we journey on…
The solution came down to developing my own small custom plugin, but honestly, it was actually quite straightforward. By using core Woocommerce functions/variables we can access the member’s past orders in their account order history and access the current cart data to determine how many days they are trying to add to their rental by filtering with the On Peak taxonomy. So, even though Rental Products show a qty of ‘one’ for each of the rentals (past orders & cart), we can easily determine how many days they have by dividing the total cost of the rental by the price of the daily rental. (e.g. You have a rental subtotal of $1,000 and the price of a daily rental is $100, than you know the renter purchased 10 days). Boom. Simple right?
Example of the core functions/variables:
//Get cart data.
foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item )
// Get past order data.
foreach ( $order->get_items() as $item_id => $item )
(Of course this is overly simplified, but you get the idea)
If we apply the logic above, and since the members need to be logged in to use the Reservation System, you can access their past rental days used from previous orders and the days they are trying to add from accessing the rental products in their cart. To accomplish this, the simple plugin uses a single shortcode that can placed anywhere in the WooCommmerce environment. When the shortcode is placed, it tallies the days you had & have, provides the member with the results and depending on their situation, they will or will not be allowed to checkout. And that’s pretty much it!
(I will skip all the details in the following, but the plugin does take into account if an order status was canceled or modified, because that data (‘canceled’ or ‘discount’ or ‘refunded’) can be accessed in the same way we figured out the number of days as it traversed the customer’s past orders. E.g. if a rental was canceled, the member will get those limited days back for future use).
How did it go after launch?
The Good:
Once the website was launched and the members started pouring in, every aspect of this challenge was put to the test! And, for the most part, it went off without a hitch. The HOA Board decided to review the required member buoy documents as they came in, but did not open up the Reservation System until a set future date to give everyone a fair chance for the coveted On-Peak Buoy days. When that day came, it was a free-for-all! 48 hours after launch, there were more than $20,000 of rental revenue and a majority of the members had exhausted their allotted 21 On-Peak days.
The Bad?
As expected, there was a good deal of questions and feedback from members since it was a new and completely different system than what they were used to (thank goodness!). But, to be honest, I received something I did not expect, HATE MAIL. Some of the members were angry and complained about not being able to reserve more than 21 days (as they were accustomed to). I was even getting emails from non-members, who had abused the system in the past, angry that ‘the link’ was no longer working and the new system wouldn’t let them in. So, in other words, they were saying the new system worked…. HA! Thanks I guess.
What’s Next?
This probably goes without saying, since version #1 of the project worked out so well, the HOA is already started compiling a wish-list items for next year. The biggest feature I look forward to implementing is a form of ‘rolling booking time period for last minute on-peak rentals’. Simply speaking, even if a member has all 21 days used up, and if, let’s say, there are buoys available today and up to 7 days away, the member can book those buoys and not have it count toward their 21 day limitation. This way, the HOA can maximize their profits by freeing up buoys that would have otherwise not been rented and also give everyone a fair chance for more days on the water.
Lessons Learned: My Advice.
- As much as you would like to avoid custom development and rely on 3rd party plugins to save time and precious in-the-budget-money, sometimes it’s just better to do it right and do it yourself. It will be better in the long run in terms of scalability, functionality, and troubleshooting.
- Sometimes the solution is easier than it seems and as long as you are working with quality 3rd. party software that adheres to best practices and uses core functionality, you should always have an opportunity to extend a plugins capabilities.
- I’ll admit, my custom plugin serves a very specific need, but I feel that as long as you are using taxonomies to keep track of products (or groups of products), than you can apply this to any store or product with just a bit more custom development. I can absolutely see opportunities using Rental Products for WooCommerce with a custom plugin extension like mine, you can apply this to any number of limited qty products: Therapy Sessions, Short Run Apparel, Retreat Reservations, Special Event Seating, Sports Lessons and much more!
- Good support is worth it’s weight in Gold. KestrelWP was incredibly helpful and timely in their responses. They made the process run as smoothly as it could have gone and I look forward to working with them on version #2 of this custom plugin and other future projects that may come across my desk.
About The Author

tahoewebcompany.com
hello@tahoewebcompany.com
775.413.0044
Instagram: @tahoe.web.company
Brian Anderson, Tahoe Web Company
I have been a web developer and small business owner for more than 20 years. I manage web clients for my own business in addition to those from other companies, providing web services both locally and nationwide. Over the years, I have worked with numerous programming languages, content management systems, and web builders. My platform of choice has always been WordPress and I have been building websites on the WordPress platform since its inception back in 2003. I would never truly call myself a 'programmer' or a 'web/graphic designer' or an 'SEO marketer', instead I swear by the Ol' saying - "Jack Of All Trades, But I Am A Master Of None".
When I'm not at my desk, you will find me trail running, 'disc' & 'ball' golfing, surfing, fishing, snowboarding... outside stuff!
If you have any questions about anything in this article (or anything related), or need assistance in one of your projects, please do not hesitate to reach out.
Thanks for reading!