Claude Skill

classic-woocommerce-single-product

Build or audit WooCommerce single product templates in a classic PHP theme. Covers `single-product.php`, `content-single-product.php`, `woocommerce_before_single_product`, product gallery hooks, `woocommerce_single_product_summary`, add-to-cart templates for simple/variable/group

LLM Mart · 0 points · 0 views 0 listing impressions 0 install-command copies
Virus-scanned Reviewed automatically before listing.

Full trust report

Download lonsdale201-wp-agent-skills-theme-development_classic-woocommerce-single-product-52f6020.zip · 2 KB
Part of lonsdale201/wp-agent-skills — 226 skills

Install

skills CLI npx skills add https://github.com/Lonsdale201/wp-agent-skills/tree/main/theme-development/classic-woocommerce-single-product
Claude Code claude plugin marketplace add https://llmmart.ai/marketplace.json && claude plugin install lonsdale201-wp-agent-skills@llmmart
Git git clone https://github.com/Lonsdale201/wp-agent-skills.git

The skills CLI installs just this skill, for any of its supported agents. Claude Code installs the whole lonsdale201/wp-agent-skills collection as a plugin from our marketplace. Git is the plain clone.

Skill manifest

Classic WooCommerce Single Product

Use this when building or reviewing single product pages in a classic WooCommerce theme: product gallery, summary order, add-to-cart forms, variable products, tabs, upsells, related products, reviews, and structured data.

When to Use This Skill

  • Editing woocommerce/single-product.php.
  • Editing woocommerce/content-single-product.php.
  • Moving title, price, rating, excerpt, add-to-cart, meta, or sharing.
  • Customizing product gallery layout.
  • Customizing variable product forms or add-to-cart UI.
  • Changing tabs, upsells, related products, or reviews.

Single Product Skeleton

Keep the top-level single-product.php simple.

get_header( 'shop' );

do_action( 'woocommerce_before_main_content' );

while ( have_posts() ) {
	the_post();
	wc_get_template_part( 'content', 'single-product' );
}

do_action( 'woocommerce_after_main_content' );
do_action( 'woocommerce_sidebar' );

get_footer( 'shop' );

Rules:

  • Preserve get_header( 'shop' ) and get_footer( 'shop' ) unless the theme has a deliberate header/footer strategy.
  • Preserve wrapper hooks.
  • Do not manually query products inside single-product.php.
  • Do not remove woocommerce_sidebar without replacing sidebar behavior intentionally.

Content Single Product Contract

content-single-product.php handles notices, password protection, product classes, gallery, summary, tabs, upsells, related products, and after-product hooks.

Must preserve:

  • do_action( 'woocommerce_before_single_product' ) for notices.
  • post_password_required() guard.
  • <div id="product-<?php the_ID(); ?>" <?php wc_product_class( '', $product ); ?>>.
  • woocommerce_before_single_product_summary.
  • woocommerce_single_product_summary.
  • woocommerce_after_single_product_summary.
  • woocommerce_after_single_product.

Rules:

  • Do not remove WC_Structured_Data::generate_product_data() by deleting the summary hook.
  • Preserve wc_product_class() for schema/state/CSS classes.
  • Use hooks to reorder summary items instead of overriding the template.

Summary Hook Map

Default woocommerce_single_product_summary callbacks:

  • title at 5.
  • rating at 10.
  • price at 10.
  • excerpt at 20.
  • add-to-cart at 30.
  • meta at 40.
  • sharing at 50.
  • structured data at 60.

Example: move price below excerpt.

add_action( 'after_setup_theme', 'mytheme_single_summary_order' );

function mytheme_single_summary_order() {
	remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
	add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 25 );
}

Rules:

  • Use exact callbacks/priorities from wc-template-hooks.php.
  • Do not echo raw _price, _stock, or _sku meta.
  • Use WC_Product methods and Woo template functions.

Product Gallery

Default gallery output:

  • woocommerce_before_single_product_summary -> sale flash at 10.
  • woocommerce_before_single_product_summary -> woocommerce_show_product_images at 20.
  • woocommerce_product_thumbnails -> thumbnails at 20.

Rules:

  • Prefer CSS and gallery support flags before overriding single-product/product-image.php.
  • Keep wc_get_gallery_image_html() behavior when overriding gallery markup.
  • Preserve placeholder behavior for products without images.
  • Test variable products, because variation image switching depends on gallery structure.
  • Do not remove focusable/lightbox controls without replacement.

Add-to-Cart Forms

Woo routes add-to-cart by product type:

  • woocommerce_simple_add_to_cart.
  • woocommerce_grouped_add_to_cart.
  • woocommerce_variable_add_to_cart.
  • woocommerce_external_add_to_cart.

Rules:

  • Do not replace all product types with one custom form.
  • Preserve quantity inputs, hidden variation/product fields, form action, method, and enctype.
  • Keep nonce/validation behavior from Woo forms.
  • For product-type-specific layout, hook around the relevant add-to-cart action or override the smallest add-to-cart template.

Variable Products

The Woo 10.x single-product/add-to-cart/variable.php template includes:

  • JSON-encoded variations in data-product_variations.
  • wc_dropdown_variation_attribute_options().
  • labels for each attribute select.
  • reset link with aria-label.
  • .reset_variations_alert.screen-reader-text live region.
  • woocommerce_single_variation hooks.

Rules:

  • Avoid overriding variable.php unless absolutely necessary.
  • Preserve data-product_id and data-product_variations.
  • Preserve labels and reset/live-region accessibility.
  • Do not load all variation objects manually in the theme.
  • Test in-stock, out-of-stock, backorder, and unavailable variation states.

Tabs, Upsells, Related Products

Default hooks:

  • woocommerce_after_single_product_summary -> tabs at 10.
  • upsells at 15.
  • related products at 20.

Examples:

add_filter( 'woocommerce_output_related_products_args', 'mytheme_related_products_args' );

function mytheme_related_products_args( $args ) {
	$args['posts_per_page'] = 3;
	$args['columns']        = 3;

	return $args;
}

Rules:

  • Use woocommerce_product_tabs to rename, remove, or reorder tabs.
  • Use woocommerce_output_related_products_args for related product count/columns.
  • Keep reviews accessible if reviews are enabled.
  • Do not hide product attributes that customers need for purchase decisions.

Reviews and Comments

Product reviews use the comments system when reviews are enabled.

Rules:

  • Do not globally disable comments template behavior for products unless the store does not use reviews.
  • Preserve rating display and review text hooks in custom review templates.
  • Use accessible labels and validation on review forms.

Review Checklist

  • single-product.php keeps Woo wrapper and sidebar hooks.
  • content-single-product.php keeps notices and password protection.
  • Product wrapper uses wc_product_class().
  • Summary changes use hooks when possible.
  • Structured data hook remains reachable.
  • Gallery overrides preserve variation image behavior.
  • Add-to-cart forms remain product-type-specific.
  • Variable product form keeps labels, data attributes, reset link, and live region.
  • Tabs/related/upsells use filters/hooks before template copies.
  • Product data comes from WC_Product methods, not raw postmeta.

Common Mistakes

  • Removing woocommerce_before_single_product and losing notices.
  • Rebuilding the variable product form from scratch.
  • Moving add-to-cart outside the product form contract.
  • Deleting structured-data callbacks while reordering summary output.
  • Breaking variation image switching with gallery markup changes.
  • Hardcoding a simple product purchase flow for all product types.

References

Files (wp-agent-skills)
  • SKILL.md 8.3 KB
    ---
    name: classic-woocommerce-single-product
    description: Build or audit WooCommerce single product templates in a classic PHP theme. Covers `single-product.php`, `content-single-product.php`, `woocommerce_before_single_product`, product gallery hooks, `woocommerce_single_product_summary`, add-to-cart templates for simple/variable/grouped/external products, variation form accessibility, tabs, upsells, related products, structured data hook preservation, `WC_Product` CRUD methods, image gallery support, reviews/comments, and avoiding fragile overrides of `product-image.php` and `variable.php`.
    metadata:
      wp-skills-author: "Soczó Kristóf"
      wp-skills-contact: "mailto:lonsdale201@hotmail.com"
      wp-skills-plugin: "woocommerce"
      wp-skills-plugin-version-tested: "10.8.1"
      wp-skills-wp-version-tested: "7.1"
      wp-skills-php-min: "7.4"
      wp-skills-last-updated: "2026-08-20"
    ---
    
    # Classic WooCommerce Single Product
    
    Use this when building or reviewing single product pages in a classic WooCommerce theme: product gallery, summary order, add-to-cart forms, variable products, tabs, upsells, related products, reviews, and structured data.
    
    ## When to Use This Skill
    
    - Editing `woocommerce/single-product.php`.
    - Editing `woocommerce/content-single-product.php`.
    - Moving title, price, rating, excerpt, add-to-cart, meta, or sharing.
    - Customizing product gallery layout.
    - Customizing variable product forms or add-to-cart UI.
    - Changing tabs, upsells, related products, or reviews.
    
    ## Single Product Skeleton
    
    Keep the top-level `single-product.php` simple.
    
    ```php
    get_header( 'shop' );
    
    do_action( 'woocommerce_before_main_content' );
    
    while ( have_posts() ) {
    	the_post();
    	wc_get_template_part( 'content', 'single-product' );
    }
    
    do_action( 'woocommerce_after_main_content' );
    do_action( 'woocommerce_sidebar' );
    
    get_footer( 'shop' );
    ```
    
    Rules:
    
    - Preserve `get_header( 'shop' )` and `get_footer( 'shop' )` unless the theme has a deliberate header/footer strategy.
    - Preserve wrapper hooks.
    - Do not manually query products inside `single-product.php`.
    - Do not remove `woocommerce_sidebar` without replacing sidebar behavior intentionally.
    
    ## Content Single Product Contract
    
    `content-single-product.php` handles notices, password protection, product classes, gallery, summary, tabs, upsells, related products, and after-product hooks.
    
    Must preserve:
    
    - `do_action( 'woocommerce_before_single_product' )` for notices.
    - `post_password_required()` guard.
    - `<div id="product-<?php the_ID(); ?>" <?php wc_product_class( '', $product ); ?>>`.
    - `woocommerce_before_single_product_summary`.
    - `woocommerce_single_product_summary`.
    - `woocommerce_after_single_product_summary`.
    - `woocommerce_after_single_product`.
    
    Rules:
    
    - Do not remove `WC_Structured_Data::generate_product_data()` by deleting the summary hook.
    - Preserve `wc_product_class()` for schema/state/CSS classes.
    - Use hooks to reorder summary items instead of overriding the template.
    
    ## Summary Hook Map
    
    Default `woocommerce_single_product_summary` callbacks:
    
    - title at 5.
    - rating at 10.
    - price at 10.
    - excerpt at 20.
    - add-to-cart at 30.
    - meta at 40.
    - sharing at 50.
    - structured data at 60.
    
    Example: move price below excerpt.
    
    ```php
    add_action( 'after_setup_theme', 'mytheme_single_summary_order' );
    
    function mytheme_single_summary_order() {
    	remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
    	add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 25 );
    }
    ```
    
    Rules:
    
    - Use exact callbacks/priorities from `wc-template-hooks.php`.
    - Do not echo raw `_price`, `_stock`, or `_sku` meta.
    - Use `WC_Product` methods and Woo template functions.
    
    ## Product Gallery
    
    Default gallery output:
    
    - `woocommerce_before_single_product_summary` -> sale flash at 10.
    - `woocommerce_before_single_product_summary` -> `woocommerce_show_product_images` at 20.
    - `woocommerce_product_thumbnails` -> thumbnails at 20.
    
    Rules:
    
    - Prefer CSS and gallery support flags before overriding `single-product/product-image.php`.
    - Keep `wc_get_gallery_image_html()` behavior when overriding gallery markup.
    - Preserve placeholder behavior for products without images.
    - Test variable products, because variation image switching depends on gallery structure.
    - Do not remove focusable/lightbox controls without replacement.
    
    ## Add-to-Cart Forms
    
    Woo routes add-to-cart by product type:
    
    - `woocommerce_simple_add_to_cart`.
    - `woocommerce_grouped_add_to_cart`.
    - `woocommerce_variable_add_to_cart`.
    - `woocommerce_external_add_to_cart`.
    
    Rules:
    
    - Do not replace all product types with one custom form.
    - Preserve quantity inputs, hidden variation/product fields, form action, method, and enctype.
    - Keep nonce/validation behavior from Woo forms.
    - For product-type-specific layout, hook around the relevant add-to-cart action or override the smallest add-to-cart template.
    
    ## Variable Products
    
    The Woo 10.x `single-product/add-to-cart/variable.php` template includes:
    
    - JSON-encoded variations in `data-product_variations`.
    - `wc_dropdown_variation_attribute_options()`.
    - labels for each attribute select.
    - reset link with `aria-label`.
    - `.reset_variations_alert.screen-reader-text` live region.
    - `woocommerce_single_variation` hooks.
    
    Rules:
    
    - Avoid overriding `variable.php` unless absolutely necessary.
    - Preserve `data-product_id` and `data-product_variations`.
    - Preserve labels and reset/live-region accessibility.
    - Do not load all variation objects manually in the theme.
    - Test in-stock, out-of-stock, backorder, and unavailable variation states.
    
    ## Tabs, Upsells, Related Products
    
    Default hooks:
    
    - `woocommerce_after_single_product_summary` -> tabs at 10.
    - upsells at 15.
    - related products at 20.
    
    Examples:
    
    ```php
    add_filter( 'woocommerce_output_related_products_args', 'mytheme_related_products_args' );
    
    function mytheme_related_products_args( $args ) {
    	$args['posts_per_page'] = 3;
    	$args['columns']        = 3;
    
    	return $args;
    }
    ```
    
    Rules:
    
    - Use `woocommerce_product_tabs` to rename, remove, or reorder tabs.
    - Use `woocommerce_output_related_products_args` for related product count/columns.
    - Keep reviews accessible if reviews are enabled.
    - Do not hide product attributes that customers need for purchase decisions.
    
    ## Reviews and Comments
    
    Product reviews use the comments system when reviews are enabled.
    
    Rules:
    
    - Do not globally disable comments template behavior for products unless the store does not use reviews.
    - Preserve rating display and review text hooks in custom review templates.
    - Use accessible labels and validation on review forms.
    
    ## Review Checklist
    
    - `single-product.php` keeps Woo wrapper and sidebar hooks.
    - `content-single-product.php` keeps notices and password protection.
    - Product wrapper uses `wc_product_class()`.
    - Summary changes use hooks when possible.
    - Structured data hook remains reachable.
    - Gallery overrides preserve variation image behavior.
    - Add-to-cart forms remain product-type-specific.
    - Variable product form keeps labels, data attributes, reset link, and live region.
    - Tabs/related/upsells use filters/hooks before template copies.
    - Product data comes from `WC_Product` methods, not raw postmeta.
    
    ## Common Mistakes
    
    - Removing `woocommerce_before_single_product` and losing notices.
    - Rebuilding the variable product form from scratch.
    - Moving add-to-cart outside the product form contract.
    - Deleting structured-data callbacks while reordering summary output.
    - Breaking variation image switching with gallery markup changes.
    - Hardcoding a simple product purchase flow for all product types.
    
    ## References
    
    - Official documentation: <https://developer.woocommerce.com/docs/theming/theme-development/template-structure/>
    - Official documentation: <https://developer.woocommerce.com/docs/theming/theme-development/image-sizes/>
    - Official documentation: <https://developer.woocommerce.com/docs/theming/theme-development/theme-design-ux-guidelines/>
    - Verified source paths:
      - `wp-content/plugins/woocommerce/templates/single-product.php`
      - `wp-content/plugins/woocommerce/templates/content-single-product.php`
      - `wp-content/plugins/woocommerce/templates/single-product/product-image.php`
      - `wp-content/plugins/woocommerce/templates/single-product/add-to-cart/variable.php`
      - `wp-content/plugins/woocommerce/includes/wc-template-hooks.php`
      - `wp-content/plugins/woocommerce/includes/wc-template-functions.php`
      - `wp-content/plugins/woocommerce/includes/wc-product-functions.php`
    

Comments (0)

Sign in to join the conversation.

No comments yet.

Reviews (0)

No reviews yet.

Related