I was working on a WordPress site using the popular WooCommerce plugin today and was presented with the problem of trying to differentiate between a WordPress category and a WooCommerce product category.

WooCommerce products don’t have a WordPress category just as a standard blog post on the site doesn’t have a WooCommerce shop category, the two things aren’t linked. This is normally not a problem, however the search page was returning both blog posts and shop products in its results. I wanted to display a simple button linked to the product page on the shop if the search item was a WooCommerce product or display the text excerpt if the item was a blog post. This turned out to be quite straightforwards!

After having a good root around through the WooCommerce support documentation I was no closer to finding a quick function that did the equivalent of the WordPress code:


So after some trial and error with the is_category() and in_category() functions, I began looking at the $post variable in the post loop as that was the variable populating the list. Sure enough $post->post_type was exactly what I was looking for and defined between pages, products and posts for each item.

I plugged that into a quick if statement and plugged it into the search.php file (it might be different depending on your theme but I copied it under the the closing h2 tag for the_title)…

<?php if ( $post->post_type == 'product' ) { ?>
<p class="woocommerce"><a class="button" href="<?php the_permalink() ?>;">BUY NOW</a></p>

Now when any products show up the search results they have a nice button directing them straight to the item in the shop, and blog posts & pages display the excerpt text. You can change ‘product’ to ‘page’ or ‘post’ to alter the output for those types as well.

Leave a Reply

Privacy & more..

Cookie Consent Policy