Damn Good Content To Grow Your Business In The Digital World
Insights, Ideas and Innovations from the brains of the Saucal NERDS.
SAU/CAL Interviewed by Clutch for Expertise in WooCommerce
07 Mar

Our team is still proud of our recent recognition as a top e-commerce developers in Canada by Clutch. As a result of this achievement, they reached out to interview us on our expertise in the field. I was thrilled to talk to them about the strengths of WooCommerce and provide my insights.

Clutch is a B2B ratings and reviews platform designed for agencies and buyers in the IT sector. Beyond company profiles and client reviews, they also produce research on website builders such as e-commerce platforms. There are many things to take into account when creating an e-commerce store before deciding what platform to use. As I said:

“E-commerce comes down to the basic requirements—whether someone is selling physical or digital products, figuring out shipping, payment and tax options and so on. It requires a bit of planning upfront, but, as with anything, we need to dream big and start small. It’s a different story for bigger companies, but those may be the ones who need to take the biggest leap of all—adapting to the paradigm of online selling, versus retail locations.”

With all this in mind, clients typically come to us to start a store from scratch, build out new features and extensions or upgrade the platform. While there are many great options out there, we are believers of open-source technologies and work exclusively with WooCommerce.

“WooCommerce is open source, which makes it highly customizable and flexible. Compared to software like Magento, it’s also quite lean, without a lot of technical debt…It’s still a young platform—having been released in 2011—but it’s already a massive part of the e-commerce market. More than 30% of all e-commerce sites are using WooCommerce.”

However, as with any development and design project, there are always areas to be cautious. I highlight this by sharing:

“WooCommerce provides a lot of power, but it can be daunting for non-technical people. Since there are so many extensions available for it, installing a badly written one can easily take an entire store down. People without a lot of good technical talent, or ones who don’t want to invest too many resources in the technical side, should use something like Shopify. For truly basic stores, Squarespace can be an option. These eliminate technical hurdles and keep things simple.”

Thank you to Clutch for thinking of SAU/CAL and including us in your research. We were happy to share our knowledge with you. Check out the full interview for more great information!

SAU/CAL Named Top E-Commerce Developer by Clutch!
16 Feb

Top eCommerce Developers Canada 2018

SAU/CAL is made up of dedicated, tech-savvy individuals who produce high quality e-commerce solutions. We make sure that the stores we develop help a company thrive in the increasingly digital universe. This is why we are excited to announce that our hard work has paid off and we are now recognized as one of the top e-commerce developers in Canada by Clutch.

Clutch is a B2B ratings and reviews platform that connects businesses with the best-fit agencies, software, or consultants they need to tackle business challenges together.

The new report they released looks at the top developers in both the UK and Canada. To determine the leaders, Clutch evaluated the companies based on a unique methodology that took into account each company’s verified client reviews, services offered, work quality, and market presence.

We are proud of our seven reviews and overall 5 star rating from our clients. Check out some of the awesome comments they shared on our profile:

“They don’t just deliver on what they say they will deliver on, they make recommendations that are even better. They take your feedback, adapt and deliver on that as well.”

“The most impressive thing was how the nimble the team was and how fast they were able to deliver on such an excellent product.”

“The quality of work for the value is amazing, because you get high quality work for a very reasonable price. They’re very fair in the way they charge.”

“The most impressive thing was their friendliness. They were great at communicating and being quick, but they were very friendly, easy to get along with, and very humble…I appreciated how candid and honest they were. They were completely transparent.”

Our team is thrilled to be one of the top three e-commerce developers in Canada and would like to thank Clutch for including us in their research. We look forward to maintaining our rank and beginning new e-commerce projects soon.

Suffering from Slow Search Speeds in WooCommerce? Give Your Site a Boost with this Free Upgrade
28 Sep

This post originally appeared on Codeable.

We’ve recently experienced some serious issues with WooCommerce search on eCommerce sites that process a large number of orders. The postmeta table needs to be queried when looking for a specific meta_value, which causes a major slowdown. For example, querying the “my orders” section would take 5s or possibly even more, depending on the server environment. To make matters worse, performing searches on the “Orders” screen for orders belonging to a specific email or person can take 30s or more (due to the involvement of extra JOINs on the postmeta table).

Both of the above examples are unacceptable for a website with high amount of traffic and had to be addressed.

Current Solutions And Associated Limitations

After doing some research, we’ve found that these issues are currently handled in one of two ways:

The ElasticSearch solution sounds good in theory, but our experience leads us to believe that it is not a good thing to integrate with WordPress. This is due to the huge number of differences between the base WP datasource (which is MySQL tables) and the ElasticSearch indexes.

While ElasticSearch performs partial searches very well and is pretty good at “guessing” what you intend to write in the search query, these minor benefits are definitely not outweighed by the downsides of integrating these two data sources:

  • latency between the ElasticSearch instance and your hosting provider (note that this won’t be an issue if you have ElasticPress installed on the same server as your PHP environment, but this is not a common scenario with today’s managed WordPress hosting solutions), and
  • the number of orders covered in each result (across all pages) is narrowed down to just a couple hundred.

In this case, we would need to query the ElasticSearch instance and then pass on the matched post IDs to WP_Query (while adhering to the max length of the SQL query being sent to MySQL). This breaks the workflow for wide range searches, and could potentially provide a misleading number of total results to the store manager searching the Orders screen.

Now, onto the secondary index table. The original solution was presented to us by Patrick Garman, a fellow WordPress developer. He originally intended to just improve the “My Orders” section of WooCommerce, but we thought that this fell a bit short for our needs.

We know that his current implementation is just meant to be a temporary fix until the release of WooCommerce 3.0 and the huge database revamp that is planned for it (which will fix the issues we are discussing in this post). We also know that WC 3.0 is not slated to be released until mid-2017, and since we need to make our customers happy before then, we forked Patrick’s implementation.

Our Proposed Solution

The original implementation of the order index only indexes the Order IDs and the Customer IDs in a secondary table (which is what Patrick set out to fix). His solution is to modify the “My Orders” WP_Query to use his index.

We extended this in a couple of ways:

  1. We’ve included the customer emails (both the billing email on the order and the customer email which is derived from the customer assigned to the order). Whenever you search an email in the orders view of the admin section, we trigger the use of the index instead of postmeta.
  2. We’ve included the customer names (billing, shipping, and display name of the assigned customer).

Here we come across an issue; we don’t want to completely remove WooCommerce’s existing search features, but we need to have some way of using the index conditionally for faster searches. This is because our index doesn’t support Address search, for example, and WooCommerce functionality covers that.

In order to achieve this, we’ve included a parameter like search. Whenever your search parameter is “name:John D,” we return all orders with names that match John D using a wildcard search. You could search for the Order ID in WooCommerce but we felt we could make it easier, so with our solution, you can just enter the search term “#1456” and have order 1456 returned to you.

How To Implement It

In order to install this index, all you have to do is install our fork of the plugin and then enable it. Here’s the URL: https://github.com/saucal/wc-customer-order-index

The only complication at the moment is that you need access to WP-CLI to create the initial index. We’re working on enabling an AJAX interface which will allow you to build the index without WP-CLI.

For now, after you enable the plugin, you need to open up your WP-CLI interface and enter the command “wp wc_coi reset_index” for it to start generating the index for you. The time this process takes will vary depending on the number of orders you have on your site.

How Things Have Changed

WooCommerce Search Before

With the use of this plugin, we have been able to vastly improve the performance of our customers’ large stores. Here above you can see an example where the time was up to almost 40 seconds. In one of our worst performing cases, email search on WP-Admin was taking over 50 seconds.

WooCommerce Search After

Using this plugin, we reduced the search time to less than 5 seconds, improving it by 867%!

Wrapping Things Up

We tried the ElasticSearch solution for one of our customers and it had too many moving parts for our liking. We prefer something that stays within the scope of WordPress and doesn’t require our customers to sign up for any external services.

To be clear, this is not a problem of ElasticSearch as a technology. It’s just that it’s too different from how WordPress works, so integrating the two created a few downsides that for us were deal breakers considering what we were trying to achieve. Additionally, we had to rely on a complex third party plugin (10up’s ElasticPress).

We iterated on Patrick’s approach and extended it to fulfill our customer’s most common needs. As a trusted WordPress agency, we know that this is not the prettiest solution since it duplicates a lot of the data. We just want to provide our customers with a solid workaround until WooCommerce 3.0 is released and renders this solution unnecessary.

Would you have done something different? Feel free to send us a pull request on our repository, we’d love to see alternatives!

High fives to our lead developer Matias for helping me with this article.

How to Setup the Canada Post WooCommerce Shipping Plugin
12 Jul

The Canada Post WooCommerce plugin is one best way to get shipping rate details from Canada Post, Canada’s primary postal operator. It works as a premium shipping method that provides realtime shipping rates from Canada Post’s API.

To use this extension, two criteria are required to be satisfied. First, your store needs to use Canadian Dollars. Second, your server has SimpleXML installed.

Canada Post manages both, domestic and international parcels.


  • Login to your WooThemes Account
  • Download .zip files from the account
  • Go to WordPress Admin > Plugins > Add New to upload the file that was downloaded with Choose File
  • Activate the extension

Canada Post – Getting Started

Link your Canada Post account first. Find the notification bar at the top of the admin screen, which will prompt you to Register/Connect.

canadapost connect

The plugin recommend using pretty permalinks before connecting your Canada Post account to avoid an error caused by Canada Post. To know more about permalinks, check the Codex, and choose any option except default.

  • Click the Register/Connect button and you will be taken to Canada Post’s website.
  • Login to your account or register as a new user if you don’t have an account already. Once created, WooThemes will start getting shipping quotes from the API on your behalf.
  • Canada Post might also ask you to enter a credit card detail for few future automatic transactions, like monthly fees, transaction charges, etc. You can submit the details now or update it later when you sign into My Business Profile on the Canada Post Dashboard.

Upon completion, you will be sent automatically to the admin panel.

NB: To disconnect your account in the future, click the link at the top of the Settings page.

canada post account

Canada Post – Setup & Configuration

Setup the payment gateway by going to WooCommerce > Settings > Shipping > Canada Post

canada post settings

  • Enable/Disable – Tick the checkbox to offer Canada Post as a shipping method.
  • Method Title – Give a short description. This will be shown to customers during checkout.
  • Origin Postcode – Give the postal code of the location from where shipping originates. The info will be also sent to the API to calculate rates.
  • Method Availability – Set it to All Countries or restrict it to certain countries as per your suitability. We recommend the former so that it is available to all your customers.
  • Debug Mode – Tick the checkbox if you want to log every request and response made in the Cart and Checkout pages. Useful for troubleshooting.
  • Quote Type – Commercial uses rates and discounts associated with your account. Counter uses normal rates that you will receive in person. Commercial is also used for VentureOne members.
  • Rate Cost – Two types: Base and Due. The former is base rate cost and latter is cost after taxes.
  • Lettermail – Select Standard and/or Registered rates from the dropdown. Lettermail isn’t a part of the Canada Post API and, therefore, rates are calculated by taking box packing and hard coded prices into account.
  • Additional Options – Select Coverage, Proof of Age, and/or Signature for parcels from the dropdown.
  • Delivery Time – Tick the checkbox to get delivery estimate (in days) displayed alongside rates. (Info pulled from the API).
  • Parcel Packing Method – Use the dropdown to select Pack individually. Weight of All items, or Pack with Weights and Dimensions (explained below).
  • Maximum weight –  Define the maximum weight per package.
  • Offer Rates – Select All Rates (User Choice) or Cheapest Rate (Single) from the dropdown.
  • Services – Rename and reorder Canada Post shipping rates. Add price rates by percentage or fixed dollar amount. Adjustments are positive (surcharge/fee) or negative (discount).

canada post services

Parcel Packing Methods

3 packing methods exist with Canada Post; each affects parcels sent to the API

  • Per Item – Items in your cart (non-virtual) are sent to the Canada Post API. The final cost involves quotes of all items combined.
  • Weight Based – The cart needs to be segregated into 30kg packages, details of which are sent to the API. Details include weight only, not dimensions.
  • Pack Into Boxes – Items are packed in pre-defined boxes and sent to the API. For more options, see Box Packing.


Box packer lets you group items into packages wherein you define height, width, length, weight, and max-weight. Packing considers volume on a primary basis, but item size is also considered.

Setting Up Box Sizes

Set up box dimensions by clicking Add Box.

Outer dimensions refer to the parcel dimensions, an info which is passed to the API.
Inner dimensions are used for packing. It must ensure that items fit within them.
Box weight or in simple terms, weight of the box is the additional weight the cost of which is also included with shipping.
Max weight is the maximum threshold of your box. This includes content weight and box weight.

How The Calculation Works?

The packer does the following:

  • Finds boxes that would fit the item needed to be packed, using HxWxD
  • Packs all items into boxes
  • Uses the largest box that would plausibly accommodate 100% of items; or uses highest percentage of packed box, return unpacked items, and then repeats the process.
  • Packs ‘unpackable’ items alone, using item dimensions.
  • Returns all packed boxes.

Customer Usage

When customers submit their address, they get quotes from 2 places:

  •  Cart Page – using the shipping calculator
  • Checkout Page – by filling shipping and billing forms


  • Check if your production Canada Post account is connected or not?
  • Enable development mode, or turn on WP DEBUG to view debugging information on the cart page. This reveals the issue most of the time.
  • Check if product sizes and weights are set or not, since without them calculation cannot be performed.
  • Finally, ensure you have selected your store’s base country as Canada and base currency as Canadian Dollar (WooCommerce > Settings >General).


Q: After attempting to authorize Canada Post, it brings me back to a page with a number 1 on the top left.
A: You may need to update your permalink settings for WordPress to Pretty Permalinks.

Q: Why are my lookups timing out?
A: Try opening Port 30000 for API communications.

Q: Error message in cart: Fatal error: Cannot use object of type WP_Error as array in ../woocommerce-shipping- canada-post/shipping- canada-post.php.
A: If you are seeing this message, your server is unable to use the wp_remote_get() function. This can be verified using the Status Report:

canada post wp_remote_get

In this case, we recommend you to contact your hosting company so they update your server.

Hope this blog simplifies the Canada post plugin. If you have any questions, let us know in the comments.

If you want to discuss more about the Canada post plugin with the team, or need help in configuring or customizing the plugin, please feel free to contact us.

Authorize.Net to stop support for HTTP GET method
23 Jun

Recently users have been getting an mail from Authorize.Net informing them, that they would be ending support for any HTTP GET method for transaction requests; this is because HTTP GET methods no longer adhere to current TLS protection requirements. It’s a welcome change that increases security.

Authorize.Net HTTP GET

Previously Authorize.Net has strongly encouraged merchants to upgrade their connections to use TLS 1.2 exclusively and now this, adds a huge step towards making ecommerce more secure along with the web in it’s entirety. This will eventually make transactions over the web much safer than it is now.

Solution to HTTP GET changes

All the functionalities using HTTP GET methods for transaction requests has to be replaced by HTTP POST.

The team here at Saucal would recommend users to update to the latest version of the official Authorize plugins.
Authorize.Net CIM
Authorize.Net AIM
Authorize.Net DPM

The team has been watching the transition closely and understands this can be challenging for many out there.  Don’t slack off because July 30, 2016 is approaching quickly and can kill your eCommerce sales if forgotten.

If you want to discuss more about the change with the team, or need help replacing the plugins please feel free to contact us.

Why I Stopped Managing My Own WordPress Server
21 Jan

picture of baby and meme about bad hosting

Managing my own server used to keep me up at night. I was constantly worried; about the software, whether all of my tools were up-to-date; what to do if something went awry (which happens with technology, because, well, it’s technology).

At the time, I was building Saucal, yet there I was managing a WordPress server, fighting fires, and wasting valuable time on tasks other than designing killer sites for you. It was a headache, and made it challenging to focus on building and running a business and serving you, our customers.

At Saucal our goal is to design stunning websites, that help you build your business and attract new customers. Playing firefighter with server management made that promise hard to deliver on.

Then one of our clients was hacked and I stayed up all night fixing it. That was the the last straw. I vowed not to self-manage my server again, and I immediate sought a better way.

We found WP Engine after some shopping around, and WP Engine’s managed WordPress hosting platform was a perfect fit.

And since we moved to WP Engine, we’ve noticed a huge difference, not only in the time saved by no longer grappling with service management, but in the performance of our customers’ sites.

WP Engine is a WordPress expert. You won’t find that anywhere else. Other platform providers simply say they know WordPress, where WP Engine knows it inside and out. WP Engine is a WordPress specialist, not a hosting generalist. That shows in the amazing support we’ve received from WP Engine over the more than two years we’ve hosted our site and several customer sites on the platform.

Along with incredible support, the user experience is top-notch. We use staging to design sites before pushing them live, so we can test them and ensure they’re perfect before deploying. And we get peace of mind from automated and on-demand backups, which enable us to restore our work to any point we choose. All that and a simple and intuitive UI, makes adding customers and additional staff to access the a WordPress install a breeze.

If you’re anything like me, you saw site migrations as a necessary evil. You hated them, but they needed to be done, despite the time, complexity, cost, and overall hassle. They took hours. WP Engine put an end to that, however, with the Automated Migration plugin, which in just a few clicks automatically migrates a WordPress site to WP Engine’s platform. We’ve gotten migration times to between five and 10 minutes—really just the setup time–which allows us to onboard more customers faster, and focus on what we do best: building beautiful sites.

And unlimited transferable developer installs eliminate additional host costs so we can work on any number of client sites we want. This saves us a bundle, lets us scale, and gives us the freedom to experiment.

WP Engine saves us time and money, and boosts our dev team’s morale. The platform works out of the box without any of the headaches.

I am now free to focus on building Saucal’s business and serving you, our customers, without having to worry about hosting. We can do what we do best: building and creating amazing, revenue-driving sites for you. We can focus on you and your success.

And on top of all that, we haven’t had any more hacked sites. We are confident that our sites and your sites are safe.