WooCommerce allows you to “schedule” the product sale price – you can define a start date and an end date, so that you can run your promotion automatically.
However, for some reason, this information is only visible to the admin. It would be awesome to show the “sale price end date” to customers as well, don’t you think? So, let’s do it!
Continue reading WooCommerce: Display Sale Price End Date @ Shop & Single Product Page
We can get products belonging to a product category or product tag very easily. What’s much more difficult is getting single variations based on a product category or product tag, as variations… don’t have a category or tag, which belong to its “parent” variable product instead.
In this post, we will define a function that you can reuse in your custom code whenever you need to get all variation IDs based on a given product category or product tag. You can then loop through the array and return whatever info you need. Enjoy!
Continue reading WooCommerce: Get Variation IDs By Product Category or Tag
Just so you know, there is no need to hardcode WooCommerce URLs in your custom code! In fact, WooCommerce gives us helpful shortcut functions that we can reuse in our code to get cart, checkout, account and product URLs without wondering if they have been modified by the website owner e.g. example.com/cart to example.com/basket.
In this way, you can always make sure you’re getting the correct URLs without wasting time looking for page/product slugs. Enjoy!
Continue reading WooCommerce: Easily Get Cart, Checkout, Account, Product URLs
Now, this is a bit of a niche tutorial, but it may come useful you need to get a product permalink when it’s still a draft. As you can see from the screenshot below, this is helpful when the product URL is very long – in such a case WordPress truncates the “Permalink” string and you can’t really copy/paste.
For example, you may need the product URL for a scheduled blog post, a future newsletter, an email; in whatever case, this is a cool way to “get” the product URL and print it in the “Publish” meta box of the single product edit page. Enjoy!
Continue reading WooCommerce: Get Draft Product URL
I find it unusual that after years of sharing tutorials on Business Bloomer there is no snippet for creating a custom product tab on the single product page!
I mean, we’ve seen an example on Related Products in a Custom Tab snippet a while ago, but here I want to concentrate on the actual functionality of adding a custom tab, giving a name and a heading to it, showing it conditionally (e.g. only for a specific product category), and making sure the “scroll to tab” works when the URL contains its anchor tag.
Continue reading WooCommerce: Add New Tab @ Single Product Page
On a default theme, such as Storefront, the single product page template is laid out so that the SALE badge comes first, on its own line, then comes the product title, the product price on its own line, the short description, the product’s stock availability and the add to cart button.
As you can see from the screenshot below, there is lots of white space on the right hand side, so for my new business line (WooCommerce Mini-Plugins, you somewhat guessed it, right?) I wanted to improve the single product page layout and move the SALE badge right beside the price, so that I could achieve two objectives: save some space, and also focus the customer attention on the product price as opposed on to the badge.
So, let’s see how I did it. Enjoy!
Continue reading WooCommerce: Move Sale Badge Beside Price @ Single Product Page
Whenever a customer logs out from WooCommerce, they are redirected to the My Account page URL.
But when you use separate Login and Registration pages, or whenever you have custom landing pages you wish your customers to see instead of the default My Account page, we can set a custom URL by code and safely redirect the just-logged-out customer there. Here’s the quick fix – enjoy!
Continue reading WooCommerce: Custom Logout Redirect @ My Account
It may be helpful to show the long product description of a given product in a custom WordPress page or post, so that you can use it as a teaser or anyway as a way to save some time instead of rewriting the whole thing.
The solution is easy: let’s code a simple shortcode that accepts a product ID as a shortcode attribute, and that returns its long description, properly formatted.
You can see this in action on this same website. Here’s one of my downloadable products’ long description: https://www.businessbloomer.com/shop/plugins/woocommerce-disable-payments-by-category/#tab-description – and here’s the same exact description printed in a blog post, thanks to the shortcode snippet you find below: https://www.businessbloomer.com/woocommerce-disable-payment-method-for-specific-category/#mini-plugin-business-bloomer-woocommerce-toggle-payments-by-category
Continue reading WooCommerce: Product Description in a Shortcode!
If you access the WordPress dashboard and go to WooCommerce > Orders, you will be presented with the WooCommerce “Orders Table” i.e. the list of customer orders. Each row comes with several columns, such as the order number, order date, order status, order billing and shipping addresses and more.
What’s annoying sometimes is that the whole row is a clickable link, so if you need to copy and paste some information you will end up actually clicking on it, and being redirected to the single order page.
There is a way to add a specific “class” to each table row, so that it becomes not clickable, and the only link that remains is the very first column table cell – the order number (as it should be by default!).
So, let’s see how easy it is to alter this default behaviour. Enjoy!
Continue reading WooCommerce: Disable Orders Table Row Hyperlink @ Admin
We’ve already covered a little about address formats when we added a custom House Number field to the WooCommerce Checkout page.
Address formats define the way Billing and Shipping addresses are formatted for the end user. Addresses show on the order received / thank you page, on transactional emails and on some My Account pages, and look like this:
Now, what if you wanted to move the “company” before the customer name, or maybe have “address 1” and “address 2” on the same line, or move “postcode” to the last line? Well, thankfully there is a neat WooCommerce filter called “woocommerce_localisation_address_formats” that allows us to do just that – reformat any address for any country we wish. Enjoy!
Continue reading WooCommerce: Change Address Format For a Specific Country
By default, WooCommerce displays a “Buy Product” button label for external products. This button redirects to the external URL that is entered via the single product settings.
As usual, this “Buy Product” label may not suit all businesses, and therefore WooCommerce gives you the option to rename such buttons via the single product edit page settings. This is great, but at the same time you don’t want to manually edit hundreds of products when you can use a few lines of PHP, right?
So, here’s a super quick fix to override the “Buy Product” external add to cart button label to whatever you wish, without ever touching the manual settings. Enjoy!
Continue reading WooCommerce: Change “Buy Product” Label for External Products
You may be aware that the WooCommerce Checkout page “order review” section reloads/refreshes every time there is a change of address – in this way shipping, taxes and optional fees are properly recalculated and customers are returned with the correct total.
But in case you add custom checkout fields that may cause a difference in pricing, or you want to keep the checkout UX consistent, or you have some other kinds of logic, it may be useful to refresh the order review section after a change on any checkout field. Enjoy!
Continue reading WooCommerce: Refresh Checkout Upon Any Input Field Change
The Additional Information tab on the WooCommerce Single Product Page displays information about product dimensions, weight, and possible attribute terms.
There are hooks, thankfully, that can help us display additional content in there, either above or below the attributes table. Enjoy!
Continue reading WooCommerce: Add Content To Additional Information Tab @ Single Product Page
This is quite an uncommon WooCommerce requirement, but especially for downloadable products the Completed Order email is such as important one – and customers may end up asking you to resend them all their past order emails.
This is an interesting snippet, as it features important functionalities: getting orders by billing email, looping through the results and re-triggering the Completed Order email whenever a specific admin URL parameter is posted. Enjoy!
Continue reading WooCommerce: Bulk Re-Send All Customer’s Completed Order Emails
We’ve already seen how to edit the “Related Products” title and how to add a subheading below it; this time, we’ll do the exact same but for the upsells section, which shows on the Single Product Page once an admin manually defines some “linked products” in the product settings / upsells.
Once again, we’ll take a look at a snippet to edit the title (“You may also like…“), and another one to add some HTML content below it. Enjoy!
Continue reading WooCommerce: Upsells Custom Heading & Subheading @ Single Product Page
Maybe because you have only one product category and therefore search engines would find duplicate content (Shop page = Category page) and penalize your website.
Or maybe because you use advanced product filters and you prefer customers to see the filtered view “by category” (e.g. “example.com/shop/?_product_category=tables“) as opposed to the default category pages ( “example.com/product_category/tables” ).
Either way, it is possible to programmatically redirect all product category pages to a given page or to a relevant URL with parameters – and here’s the fix. Enjoy!
Continue reading WooCommerce: Redirect Product Category Pages
WooCommerce frontend messages and error notifications display on the Single Product page, Cart page, Checkout page, My Account page and may show on page load or upon a specific user action.
The potential problem is that – same as the WordPress backend – WooCommerce messages can use a lot of vertical space, hence can push useful content further down the page, and possibly disturb the navigation – especially on the Checkout page.
A cool workaround may be to place a dismiss “x” button on the WooCommerce notices, so that customers can quickly close them and gain back some space.
We will use a mix of PHP, JS and CSS in the snippet below in order to achieve our final goal. Enjoy!
Continue reading WooCommerce: Close Button @ WooCommerce Checkout Notices
Related products automatically show on the WooCommerce Single Product page. We’ve already seen some tutorials here on Business Bloomer regarding them, such as one for displaying a custom list of related products instead of the default one, which uses product categories and tags in common.
Today I want to cover the actual “Related products” title (H2) and also find a way to display an additional piece of content right below it (subheading). Enjoy!
Continue reading WooCommerce: Related Products Custom Heading & Subheading
By default, WooCommerce external products do not have and do not display any stock, as they are simple redirects to an external URL. This may be unfortunate, because before clicking on an external URL and send people away from your website, you may want to make sure the current item is in stock (so that you have more chances to convert the sale and earn a referral commission, if that’s your business model).
So, how do we “manage stock” for an external product, and display the stock status on the single product page, just before the “Buy Product” button?
Continue reading WooCommerce: Display Stock Status For External Products
Bad news first – we’ve seen how to add content to any WooCommerce order email, however I did not specify that if you use the [products] shortcode that’s not going to work unfortunately. The reason behind this, in plain English, is that… it just doesn’t work, and it outputs a weird list of “Sale!” list items (see screenshot below)!
So, I want to fix this, and find a WooCommerce email-compatible way to show a grid of products based on a list of product IDs (for example, the list of related products based on the ordered items), and make sure I can actually see product images, titles, prices and a link. Enjoy!
Continue reading WooCommerce: Display Product Grid @ Order Emails e.g. Related Products