WooCommerce Frontend & Template Customization
Before writing code
Fetch live docs:
- Web-search
site:developer.woocommerce.com template structurefor template hierarchy - Web-search
site:developer.wordpress.org themesfor WordPress Theme Handbook - Web-search
woocommerce template override guidefor override patterns
Template System
How Templates Work
WooCommerce uses a template override system:
- Core templates live in
woocommerce/templates/within the plugin - Themes override by copying to
{theme}/woocommerce/{template-path} wc_get_template()andwc_get_template_part()handle the lookup chain
Template Lookup Order
{child-theme}/woocommerce/{template}.php{parent-theme}/woocommerce/{template}.phpwoocommerce/templates/{template}.php(plugin default)
Key Template Files
| Template | Path | Purpose |
|---|---|---|
| Single product | content-single-product.php |
Product page layout |
| Product archive | archive-product.php |
Shop/category page |
| Product loop item | content-product.php |
Product card in loop |
| Cart | cart/cart.php |
Cart page |
| Checkout | checkout/form-checkout.php |
Checkout form |
| My Account | myaccount/my-account.php |
Customer account |
| Emails | emails/*.php |
Transactional emails |
Template Parts
wc_get_template_part( 'content', 'product' ) loads content-product.php — used for reusable template fragments.
Template Hooks
Product Page Hooks (Sequence)
woocommerce_before_single_product
woocommerce_before_single_product_summary
(product image/gallery)
woocommerce_single_product_summary
woocommerce_template_single_title (5)
woocommerce_template_single_rating (10)
woocommerce_template_single_price (10)
woocommerce_template_single_excerpt (20)
woocommerce_template_single_add_to_cart (30)
woocommerce_template_single_meta (40)
woocommerce_template_single_sharing (50)
woocommerce_after_single_product_summary
woocommerce_output_product_data_tabs (10)
woocommerce_upsell_display (15)
woocommerce_output_related_products (20)
woocommerce_after_single_product
Shop/Archive Hooks
woocommerce_before_shop_loop
woocommerce_before_shop_loop_item
woocommerce_before_shop_loop_item_title
woocommerce_shop_loop_item_title
woocommerce_after_shop_loop_item_title
woocommerce_after_shop_loop_item
woocommerce_after_shop_loop
Enqueuing Assets
CSS
Enqueue via wp_enqueue_scripts action:
wp_enqueue_style( 'handle', plugin_dir_url(__FILE__) . 'assets/css/style.css', [], '1.0.0' )- Conditional loading: wrap in
is_product(),is_cart(),is_checkout(), etc.
JavaScript
wp_enqueue_script( 'handle', $url, ['jquery'], '1.0.0', true )- Pass data to JS:
wp_localize_script()orwp_add_inline_script() - Use
wp_enqueue_scriptwithstrategy => 'defer'for performance
WooCommerce Conditional Functions
| Function | Returns true on |
|---|---|
is_shop() |
Main shop page |
is_product_category() |
Category archive |
is_product_tag() |
Tag archive |
is_product() |
Single product page |
is_cart() |
Cart page |
is_checkout() |
Checkout page |
is_account_page() |
My Account page |
is_woocommerce() |
Any WooCommerce page |
Theme Integration
Declaring WooCommerce Support
add_action( 'after_setup_theme', function() {
add_theme_support( 'woocommerce' );
add_theme_support( 'wc-product-gallery-zoom' );
add_theme_support( 'wc-product-gallery-lightbox' );
add_theme_support( 'wc-product-gallery-slider' );
});
Block Themes (FSE)
Full Site Editing themes use:
- Block templates instead of PHP templates
templates/andparts/directories with HTML filestheme.jsonfor global styles and settings- WooCommerce block patterns for product displays
Email Templates
Customizing Emails
- Override templates in
{theme}/woocommerce/emails/ - Use
woocommerce_email_headerandwoocommerce_email_footerhooks - Style with
email-styles.phptemplate - Custom email classes extend
WC_Email
Best Practices
- Override templates only when hooks are insufficient
- Keep overridden templates up to date with WooCommerce releases (check
@versiontag) - Use hooks (
add_action/add_filter) over template overrides when possible - Conditionally load assets only on pages where they're needed
- Use
wc_get_template()in plugins to make templates overridable by themes - Escape all dynamic output in templates
- Support block themes by providing block template alternatives
Fetch the WooCommerce template structure docs and theme handbook for exact template paths, hook sequences, and override patterns before implementing.