Here is a collection of tips, snippets, customizations, plugin reviews and how-to tutorials to answer your biggest WooCommerce questions, curated by Rodolfo Melogli.
Please remember feedback is vital and that your social media shares, blog comments and WooCommerce Weekly newsletter sign ups help me understand which WooCommerce content works and which not, so that I can fine-tune my writing :)
It happened to me today while updating to WordPress 5.3, so I thought of sharing the fix with all the people who are going to have this problem now and in the future.
Honestly, I should have thought about this better – but it’s an early Saturday morning and maybe my brain is still asleep.
I kept getting always the same error, even after 10 refreshes and attempts, even while trying to use /wp-login.php or /my-account to login as opposed to /wp-admin. And when you get the same behavior no matter how many times you refresh or try again… well, it should be easy to understand why!
You could install a free WordPress plugin to enable “LOGIN / LOGOUT” menu links – or you could use a super simple snippet. Once again, the less plugins you use the better, especially if you can substitute them with a few lines of code.
In this case study, I have added the “My Account” page to the navigation menu and renamed it to “ACCOUNT” in the menu settings. However, I want that label to change to “LOGIN” if the user is logged out. Enjoy!
WooCommerce, with 25% market share for website eCommerce solutions as of November 2019, is the most popular platform for building online stores. It’s easy to get a basic setup running and start selling your products online.
WooCommerce also offers a lot of hooks and filters for further customization – the only problem is you need to understand a bit of PHP programming.
This is where the WooCustomizer WordPress plugin comes in. WooCustomizer offers all of these filters and more, all neatly built into one WordPress plugin so you can visually customize your WooCommerce store in an ‘easy to use’ and intuitive interface within the WordPress Customizer.
No more creating a child theme to manually add code snippets to your WordPress website, no more adding multiple plugins and increasing the chance of bugs coming up… Just a simple, one plugin solution.
In this example, I will demonstrate how to hide the “billing phone” if “billing company” is empty or no information is entered. Of course, you also have to disable the mandatory attribute for the billing phone from the Customizer settings, otherwise checkout validation will fail. You can readapt this snippet to any other checkout field combo – just identify the IDs and change jQuery accordingly. Enjoy!
There are many plugins that would allow you to do this in bulk or that would give you advanced features… but what if you just need to hide one product ID for users who are visiting your WooCommerce website from a specific country code?
This is also called “geolocation” – remember this won’t work unless you’ve enabled geolocation inside the WooCommerce general settings. Other than that, get your product ID, find out the target country 2-letter code, and this snippet will do the trick. Enjoy!
If just the thought of tax season gives you a headache, you’re not alone. In fact, 60 percent of small-business owners don’t feel confident about their accounting knowledge (Small Business Report – Accounting).
We understand the feeling – tax season is approaching and you’re frantically trying to add up and categorize all of those shoe boxes full of receipts. Or maybe you’re not even completely sure of your business’ financial position as you haven’t accurately tracked your orders/sales.
Whether you’re behind on your accounting, unsure of what your business income is, or simply want to save yourself the time and headaches that tax season entails, this guide is for you.
We have compiled our top WooCommerce accounting tips to save you time this tax season (and every year there after…)
A nice way to avoid user frustration is to never let them pick a product / variation that is out of stock, only to realize later they can’t purchase it.
A variable product comes with a “select dropdown” on the single product page, from which customers can pick their favorite variation. Problem is that ONLY after selecting this they will find out about price, stock status and may be able to add to cart.
Today, we’ll completely disable (grey-out) those select dropdown options (variations) that are out of stock, so that users don’t waste time and only pick one of those that are in stock. Enjoy!
Product recommendations is an efficient and proven way to boost your WooCommerce sales.
The downside is that it could be a very time-consuming activity to bundle products manually, as well as the fact that it is not always the logical “pairing” that will generate the most sales.
The way forward is to utilize AI (Artificial Intelligence) and let analytical data models do the work for you.
Meet Engage, an AI-powered product recommendation engine. The type of recommendation vary a bit depending on the page your visitor is viewing. This is mainly because the recommendation model needs input to function properly (e.g. the first time a new visitor lands on your homepage, the model doesn’t know anything about their behavior and therefore it can’t provide recommendations.
But as the user interacts with the website the model picks up on behavioral patterns and is then able to provide better recommendations.
You can apply this simple jQuery snippet to any piece of WooCommerce content.
In this example we’ll see how to truncate the WooCommerce single product short description and place a “read more” link to reveal the hidden content… however you can also apply this to the long description, a custom product tab, the product gallery, and whatever can be truncated.
You could use a popular plugin called Widget Logic, or instead you could keep it simple with a few lines of PHP. Here’s a snippet for you in case you need to conditionally hide a certain sidebar widget given a condition e.g. if you’re on the Cart page.
Of course, you can use any of the available WooCommerce conditional tags and make this more complex, but in this example we’ll keep it simple and check if we’re looking at the Cart page (thanks to the is_cart() conditional). Enjoy!
Because “split” might not be the correct term, let me explain this better.
Let’s imagine your WooCommerce cart table is sorted by A>Z (with my WooCommerce cart sorting snippet for example). If your business model and/or UX requires it, then you might need to “add a cart table row” to communicate the fact those items belong to that letter:
Item 1 Title: “AAA”
Item 2 Title: “ACC”
Item 3 Title: “BDD”
Item 4 Title: “BEE”
Once again, this might sound incomprehensible so you’d better look at the screenshot below. Enjoy!
This time around we’ll take a look at some SQL. As you know, WooCommerce orders (same as WooCommerce products) are stored in the WordPress database.
Instead of using complex PHP loops and conditionals, sometimes knowing a bit of database “SQL SELECT” can help. I took some inspiration (because I don’t know everything by heart) from the “wc_customer_bought_product()” WooCommerce function, which contains some SQL to check if a user has purchased a given product.
I’ve played a little with the same SQL SELECT call, and managed to return the list of user email addresses who have purchased a specific product ID. If you’re ever going to need this, enjoy!
When you’re doing custom PHP work, this snippet will come handy. It’s a quick way to get a sublist of product IDs based on product meta criteria – in this case we’ll get a list of products that have “_downloadable” set to “yes” (which, translated in English, means they are “downloadable”).
Of course, you can edit this snippet to get any sublist of product IDs, for example in stock products, custom field value products, below/above sales number, and so on. Whatever is stored as a custom field can be used. Enjoy!
We already saw how to hide Order Notes on the WooCommerce checkout page. This time around, however, our goal is to “move” them – and specifically remove them from their default position (under the shipping form) and add them back under the billing form.
As you can imagine, this is a combo snippet: (1) we remove them (and we’ll use the snippet as per the link above) and (2) we create a new billing field. Finally, (3) we also need to “save” this new field value into the original order notes custom field meta.
If this is difficult to understand don’t worry – just copy/paste the snippet into your functions.php and see magic happen. Enjoy!
The default WooCommerce Dashboard Products page (/wp-admin/edit.php?post_type=product page) shows the list of products in a table. Default fields are: Image, SKU, Stock, Price, Categories, Tags, Featured and Date.
Sometimes, these columns are not enough and you need more. For example, you might want to quickly take a look at a product custom field, such as “visibility” (whether the product is hidden or not).
So, here’s the snippet for that. Of course, you can adapt it to show your own custom field, an ACF field or whatever product-related information you require.
Creating an ecommerce business can be a great way of making money, but it’s a competitive world. This is why you need to do all that you can to turn your ecommerce business into the success that you are looking for.
There are several steps that you need to take. Here are some tips that you should find useful.
WooCommerce picks related products on the Single Product Page based on product categories and/or product tags. Related products are very important to the shopping experience, and sometimes this is not enough – what if you want to automatically show certain products based on different criteria?
So, here’s a quick snippet to e.g. get related products with the same product title of the current one. A very strange example, but you can use this as reference in case you want to get products based on different criteria.
The get_posts() function, in fact, can be customized to get products with a given stock, specific price range, same custom field value, search term, and so on.