WooCommerce Hook Finder

Browse the real action hooks WooCommerce fires on the shop, single product, cart and checkout pages, with priorities and copy-ready code.

Describe the result you need. AI will set up the tool and ask for any missing details.

Configure with AI

Enter to submit · Shift + Enter for a new line

Sent to AI. Leave out passwords and private customer data.

Find a hook

A theme built on the Product Gallery/Product Details blocks renders those parts from block content, not from these action hooks.

14 hooks on the single product page, in the order they fire

woocommerce_before_single_product

Default: woocommerce_output_all_notices() at priority 10

woocommerce_before_single_product_summary

Default: woocommerce_show_product_sale_flash() at priority 10

woocommerce_before_single_product_summary

Default: woocommerce_show_product_images() at priority 20

woocommerce_single_product_summary

Default: woocommerce_template_single_title() at priority 5

woocommerce_single_product_summary

Default: woocommerce_template_single_rating() at priority 10

woocommerce_single_product_summary

Default: woocommerce_template_single_price() at priority 10

woocommerce_single_product_summary

Default: woocommerce_template_single_excerpt() at priority 20

woocommerce_single_product_summary

Default: woocommerce_template_single_add_to_cart() at priority 30

Only shown when $product->is_purchasable().

woocommerce_single_product_summary

Default: woocommerce_template_single_meta() at priority 40

woocommerce_single_product_summary

Default: woocommerce_template_single_sharing() at priority 50

woocommerce_after_single_product_summary

Default: woocommerce_output_product_data_tabs() at priority 10

woocommerce_after_single_product_summary

Default: woocommerce_upsell_display() at priority 15

woocommerce_after_single_product_summary

Default: woocommerce_output_related_products() at priority 20

woocommerce_product_additional_information

Default: wc_display_product_attributes() at priority 10

Inside the Additional information tab.

How WooCommerce's template hooks work

WooCommerce's classic templates (shop, single product, cart, the shortcode checkout, my account) are built almost entirely from do_action() calls. Instead of editing the template file, you hook a function onto one of these actions with add_action( 'hook_name', 'your_function', priority ). Lower priority numbers run first.

Search or pick a page below to see the hooks that fire on it in order, which core function is already attached to each one (so you know what runs before or after your code), and a copy-ready add_action stub.

Block-based Cart and Checkout don't use these hooks. They're React apps rendered by WooCommerce Blocks. Most woocommerce_checkout_* and woocommerce_cart_* actions below only fire on the classic shortcode versions of those pages. To change block Cart or Checkout, use the Blocks extensibility APIs (ExperimentalOrderMeta slot fills, the woocommerce_blocks_enqueue_checkout_block_scripts_after action) or the WooCommerce Text String Changer for wording changes.

Using a hook safely

  1. 01

    Find the hook

    Pick the page, then find the hook nearest where you want your content to appear.

  2. 02

    Check what's already there

    The default function column shows what core has hooked there, so you don't accidentally duplicate or conflict with it.

  3. 03

    Copy the stub

    Copy the add_action snippet and paste it into a site-specific plugin or your child theme's functions.php.

  4. 04

    Set a priority

    Use a priority between the two hooks you want your content to land between, for example 15 to run after a priority-10 hook and before a priority-20 one.

Never edit WooCommerce's own template files in the plugin folder. A plugin update overwrites them. Hooks (or a copy of the template in your theme) survive updates.

Questions people ask

What's the difference between an action and a filter?

An action (do_action, hooked with add_action) runs code and outputs something; it doesn't return a value. A filter (apply_filters, hooked with add_filter) takes a value in and must return a (possibly changed) value out. Everything on this page is an action hook.

Why did my hooked content show up in the wrong place?

Check the priority. WooCommerce's own functions are attached at specific priorities (shown here); if your priority matches one exactly, the order between the two isn't guaranteed, so pick a number that clearly falls before or after it.

Do these hooks still work with block themes?

Yes, for the classic WooCommerce templates: shop archive, single product, and the [woocommerce_cart]/[woocommerce_checkout] shortcodes. Block-based Cart and Checkout blocks use a separate system.

Where do I put the code?

In a small site-specific plugin, or your child theme's functions.php. Never in the parent theme or the WooCommerce plugin folder, since both get overwritten on update.

How do I remove something a hook adds instead of adding to it?

Use remove_action( 'hook_name', 'function_name', priority ) with the exact same function name and priority shown in the default function column, then hooked function name must be a plain function, not a class method, unless you also pass the class instance.

Want this builtinto your store?

I'm Emmanuel, a Shopify and WooCommerce developer. If this tool pointed at something you'd rather have fixed for you (a faster store, cleaner product data, a migration, a custom feature), send me a note.

Emmanuel Asika

Emmanuel Asika

Shopify & WooCommerce developer, Dublin

I build and fix online stores: new builds, migrations, speed, SEO and the custom bits apps can't do.

hello@emmanuelasika.com