WooCommerce - excelling eCommerce
[resolved] A custom single product template? (11 posts)

  1. daledude
    Posted 3 years ago #

    The search on WordPress.org sucks. Love WordPress, but the forums need a search upgrade... should be able to filter my results to only this plugin.

    Is it possible to custom theme the single product page template based on the category it's in? I know you can custom theme the category itself by adding the category's slug to one of the template pages, but can you do the same with the single product page? So that, say, all of the products in Category Z have a different look from the single products in categories A-Y. Thanks~


  2. Mike Jolley
    Plugin Author

    Posted 3 years ago #

    If you make your own single-product.php you can do just this. WordPress conditionals can be used:


    Alternatively you may want to add some conditional classes to your themes body tag - then you can style based on that class.

  3. Preeminent
    Posted 2 years ago #

    Hey guys, So I don't understand how to get this to work? I know all about creating a custom single-product.php file, which I have done, but how do I use the Conditional Tags to get the template to change depending on the category? I mean I understand using something like, is_category( '9' ), but where do I put that at? My content_single_product.php file is really where I have done my extensive edits to customize the product page. I'm confused because no matter what category is assigned to a product, it still will always use the content_single_product.php file. How do I get each category to use a different template style?

  4. twoelevenjay
    Posted 2 years ago #

    I see this is 7 months old but no one has answered here. So maybe this will help someone out.


    To edit content-single-product.php I assume you copied this file to a directory called "woocommerce" in your root theme directory. If not you should do this.

    In this directory called "woocommerce" duplicate your content-single-product.php file and name the new one content-single-product-CATEGORYNAME.php*

    Also copy the woocommerce template file single-product.php from woocommerce to your directory called "woocommerce" and find on line 28:

    woocommerce_get_template_part( 'content', 'single-product' );

    Change this to:

    if (is_product_category( 'CATEGORYNAME' ) {
        woocommerce_get_template_part( 'content', 'single-product-CATEGORYNAME' );
        woocommerce_get_template_part( 'content', 'single-product' );

    If you were to do this for a second category and duplicate content-single-product.php again naming the second one content-single-product-SECONDCATEGORYNAME.php then your code would look like this:

    if (is_product_category( 'CATEGORYNAME') {
        woocommerce_get_template_part( 'content', 'single-product-CATEGORYNAME' );
    }elseif (is_product_category( 'SECONDCATEGORYNAME') {
        woocommerce_get_template_part( 'content', 'single-product-SECONDCATEGORYNAME' );
        woocommerce_get_template_part( 'content', 'single-product' );

    Hope that helps.

  5. Preeminent
    Posted 2 years ago #

    Thank you for this!

  6. daledude
    Posted 2 years ago #

    twoelevenjay: you are a god among men, seriously!

    Works perfectly. I forgot about this post, but that definitely works.

    Is there a way to make the child categories inherit this template as well? They don't seem to by default. It doesn't seem like you can get much in WooCommerce to inherit things from a parent.

  7. daledude
    Posted 2 years ago #

    Sorry, I realize what I wrote may be confusing, considering my original post was about the SINGLE PRODUCT page. Rather, what I wanted to know is if there's a way to customize the product category template and have all of its children subcategories also inherit it using similar conditional code to the single product example. Hope that's more clear?

    So if I create a template that is used by the Children category, I also want that template to be used in Children > Books, Children > Games, Children > Images, Children > Books > History, etc.

    I've search Googled and found references to child_of, woocommerce_get_term_top_most_parent, and others, but I have yet to be able to get any of them to work.

  8. elisafern
    Posted 2 years ago #

    @Preeminent and @daledude


    I am trying to achieve the exact same thing, followed the exact steps mentioned but somehow the however the "content-single-product-SECONDCATEGORYNAME.php" doesn't seem to have any effect.

    I have a clean WP installation. Did you have any trouble when you implemented this?

    I also realized that some bracket were missing in @twoelevenjay code, but it didn't change anything.

    Could you let me know if you have some trouble too?

    Thank you so much for your time!

    Kind Regards,

  9. daledude
    Posted 2 years ago #

    elisafern - are you trying to just do the single product page, or the categories also?

    Regardless, I had no trouble getting twoelevenjay's code to work, but I ended up finding something that worked for me even better. I was trying to get my footer.php widgets to change between widget sidebars depending on which WooCommerce category you were in. It turns out, the code I found works both for WooCommerce pages and regular WordPress pages. This works the same for the single product page, the categories the product is in, etc - it's all shared.

    My WooCommerce categories were 'children', 'young-people', and 'adults', and I also had static WP pages with those same slugs.

    global $post;
    $terms = wp_get_post_terms( $post->ID, 'product_cat' );
    foreach ( $terms as $term ) $categories[] = $term->slug;
    // if in WooCommerce children category, children WP page, or a descendant of the children WP page
    if ( in_array( 'children', $categories ) || is_page('children') || '29' == $post->post_parent ) {
    // put code you want for this condition here
    echo 'This should output only for Children!';
    } elseif ( in_array( 'adults', $categories ) || is_page('adults') || '33' == $post->post_parent ) {
    echo 'This should output only for Adults!';
    } elseif ( in_array( 'young-people', $categories ) || is_page('young-people') || '31' == $post->post_parent ) {
    echo 'This should output only for Young People!';
    } else {

    In the code above, you'd replace my echoes and get_sidebars with the code for content single.
    As for twoelevenjay's code, it worked fine for me as he posted though w/ instructions, I also noticed the missing bracket.

  10. justinledelson
    Posted 2 years ago #

    I tried the code from @twoelevenjay but it doesn't seem to have any affect.

    It is still going to the default content-single-product.php page.

  11. elisafern
    Posted 2 years ago #


    I was trying to get custom single templates for different categories (a different template for each categories, each of them having a different menu).

    Your code worked like a charm! Im forever grateful! :)

    Thank you so much for your quick and good reply!

Topic Closed

This topic has been closed to new replies.

About this Plugin

  • WooCommerce - excelling eCommerce
  • Frequently Asked Questions
  • Support Threads
  • Reviews

About this Topic