The woo_app_* action hooks run only on /app/shop and /app/search – unlike standard WooCommerce hooks, they fire exclusively inside the app shell. Use them to inject banners, badges, notices, and custom markup at any point in the product loop.
Full hook reference in your admin: The plugin ships a built-in guide at /wp-admin/admin.php?page=wc-app-help#custom-hooks – it lists every hook with a ready-to-copy example and updates automatically with the plugin.
Hook Map – /app/shop & /app/search
Hooks fire in this order for every shop or search page load:
| # | Hook Name | Parameters | When It Fires |
|---|---|---|---|
1 |
woo_app_before_main_content |
$screen, $query |
Before the entire shop/search wrapper opens |
2 |
woo_app_before_shop_loop |
$screen, $query |
Before the loop region (after any filter bar) |
3 |
woo_app_before_products |
$screen, $query |
Before the products list opens (only when results exist) |
4 |
woo_app_before_shop_loop_item |
$product |
At the start of each product card |
5 |
woo_app_before_shop_loop_item_link |
$product, $loop_link |
Before the product anchor tag opens |
6 |
woo_app_before_shop_loop_item_title |
$product |
Before the thumbnail + title area inside the card link |
7 |
woo_app_before_shop_loop_item_thumbnail |
$product |
Directly before the product thumbnail image |
8 |
woo_app_after_shop_loop_item_thumbnail |
$product |
Directly after the product thumbnail image |
9 |
woo_app_shop_loop_item_title |
$product |
At the title insertion position (use priority 5 to prepend) |
10 |
woo_app_after_shop_loop_item_title |
$product |
After title, before rating/price rendering |
11 |
woo_app_before_shop_loop_item_price |
$product |
Before rating and price block |
12 |
woo_app_after_shop_loop_item_price |
$product |
After rating and price block |
13 |
woo_app_after_shop_loop_item_link |
$product, $loop_link |
After the product anchor closes (outside the link) |
14 |
woo_app_after_shop_loop_item |
$product |
At the end of each product card |
15 |
woo_app_after_products |
$screen, $query |
After the products list closes |
16 |
woo_app_no_products_found |
$screen, $query |
When the query returns zero products (instead of 3–15) |
17 |
woo_app_after_shop_loop |
$screen, $query |
After the loop region ends |
18 |
woo_app_after_main_content |
$screen, $query |
After the entire shop/search wrapper closes |
Code Examples
Paste any example into your theme’s functions.php or a custom plugin. Never edit files inside the WooCommerce App plugin folder — changes are lost on update.
1. woo_app_before_main_content
Runs before app shop/search wrapper output – ideal for global banners, notices, or context setup based on current query.
add_action( 'woo_app_before_main_content', 'my_app_before_main', 10, 2 );
function my_app_before_main( $screen, $query ) {
echo '<div class="woo-app-banner">Welcome</div>';
}
2. woo_app_before_shop_loop
Runs immediately before the loop region – perfect for introductory text, filter summaries, merchandising notes, or campaign messaging.
add_action( 'woo_app_before_shop_loop', 'my_app_before_loop', 10, 2 );
function my_app_before_loop( $screen, $query ) {
echo '<p class="woo-app-loop-note">Fresh picks for you</p>';
}
3. woo_app_before_products
Runs right before the products list opens – useful for custom list headers, grid controls, or result metadata blocks.
add_action( 'woo_app_before_products', 'my_app_before_products', 10, 2 );
function my_app_before_products( $screen, $query ) {
echo '<div class="woo-app-grid-head">Shop collection</div>';
}
4. woo_app_before_shop_loop_item
Runs at each product card start – so you can print badges, wrappers, or per-item merchandising labels.
add_action( 'woo_app_before_shop_loop_item', 'my_app_before_item', 10, 1 );
function my_app_before_item( $product ) {
echo '<span class="woo-app-chip">Trending</span>';
}
5. woo_app_before_shop_loop_item_link
Runs before the product link opens – giving access to product object and resolved link for custom markup.
add_action( 'woo_app_before_shop_loop_item_link', 'my_app_before_item_link', 10, 2 );
function my_app_before_item_link( $product, $loop_link ) {
echo '<!-- before link: ' . esc_url( $loop_link ) . ' -->';
}
6. woo_app_before_shop_loop_item_title
Runs before thumbnail and title area content inside card links – suitable for icons, labels, or micro-messages.
add_action( 'woo_app_before_shop_loop_item_title', 'my_app_before_title_area', 10, 1 );
function my_app_before_title_area( $product ) {
echo '<span class="woo-app-pre-thumb">Quick view</span>';
}
7. woo_app_before_shop_loop_item_thumbnail
Runs directly before product thumbnail markup – useful for media overlays, countdown chips, or custom visual indicators.
add_action( 'woo_app_before_shop_loop_item_thumbnail', 'my_app_before_thumb', 10, 1 );
function my_app_before_thumb( $product ) {
echo '<span class="woo-app-media-hint">Tap to open</span>';
}
8. woo_app_after_shop_loop_item_thumbnail
Runs directly after product thumbnail markup – ideal for image notes, badges, or lightweight interactive hints.
add_action( 'woo_app_after_shop_loop_item_thumbnail', 'my_app_after_thumb', 10, 1 );
function my_app_after_thumb( $product ) {
echo '<span class="woo-app-thumb-note">Swipe gallery on PDP</span>';
}
9. woo_app_shop_loop_item_title
Runs around the title insertion position – prepend content by using a priority lower than 10 (e.g. priority 5).
add_action( 'woo_app_shop_loop_item_title', 'my_app_title_prefix', 5, 1 );
function my_app_title_prefix( $product ) {
echo '<span class="woo-app-title-prefix">New:</span> ';
}
10. woo_app_after_shop_loop_item_title
Runs after title output and before rating/price rendering – ideal for trust points, stock hints, or benefit copy.
add_action( 'woo_app_after_shop_loop_item_title', 'my_app_after_title', 10, 1 );
function my_app_after_title( $product ) {
echo '<div class="woo-app-meta">Fast delivery available</div>';
}
11. woo_app_before_shop_loop_item_price
Runs before rating and price rendering – useful for urgency badges, promo labels, or pricing context notes.
add_action( 'woo_app_before_shop_loop_item_price', 'my_app_before_price', 10, 1 );
function my_app_before_price( $product ) {
echo '<div class="woo-app-price-badge">Limited stock</div>';
}
12. woo_app_after_shop_loop_item_price
Runs after rating and price rendering – ideal for shipping notes, financing copy, or post-price highlight text.
add_action( 'woo_app_after_shop_loop_item_price', 'my_app_after_price', 10, 1 );
function my_app_after_price( $product ) {
echo '<div class="woo-app-ship-note">Free shipping over $50</div>';
}
13. woo_app_after_shop_loop_item_link
Runs after product link closes – with product and link available for secondary actions outside the anchor markup.
add_action( 'woo_app_after_shop_loop_item_link', 'my_app_after_item_link', 10, 2 );
function my_app_after_item_link( $product, $loop_link ) {
echo '<button type="button" class="woo-app-secondary-btn">Wishlist</button>';
}
14. woo_app_after_shop_loop_item
Runs at each product card end – useful for footer blocks, secondary CTAs, or comparison shortcuts.
add_action( 'woo_app_after_shop_loop_item', 'my_app_after_item', 10, 1 );
function my_app_after_item( $product ) {
echo '<div class="woo-app-card-footer">Member price available</div>';
}
15. woo_app_after_products
Runs right after the products list closes – perfect for summaries, helper text, or post-grid promotional modules.
add_action( 'woo_app_after_products', 'my_app_after_products', 10, 2 );
function my_app_after_products( $screen, $query ) {
echo '<div class="woo-app-after-products">End of collection</div>';
}
16. woo_app_no_products_found
Runs when the query has no products – use this to show a custom empty-state message before the default notice appears.
add_action( 'woo_app_no_products_found', 'my_app_no_results', 10, 2 );
function my_app_no_results( $screen, $query ) {
echo '<div class="woo-app-empty-tip">Try another category or search term.</div>';
}
17. woo_app_after_shop_loop
Runs after the loop section completes – useful for support prompts, summaries, pagination helpers, or promotions.
add_action( 'woo_app_after_shop_loop', 'my_app_after_loop', 10, 2 );
function my_app_after_loop( $screen, $query ) {
echo '<div class="woo-app-support">Need help choosing? Contact support.</div>';
}
18. woo_app_after_main_content
Runs after the app shop/search wrapper ends – ideal for footer notes, legal copy, analytics snippets, or extras.
add_action( 'woo_app_after_main_content', 'my_app_after_main', 10, 2 );
function my_app_after_main( $screen, $query ) {
echo '<div class="woo-app-footer-note">Thanks for visiting our store</div>';
}