WooCommerce Hooks List With Example: 19 Key Hooks for Developers

In WordPress development, hooks are essential tools that allow developers to customize website behavior without altering core code. A hook is a specific point in the WordPress code where developers can inject custom functions, extending features or altering the site’s output. There are two main types of hooks in WordPress: actions and filters. While actions enable developers to add new functionalities, filters allow them to modify existing data or content. Understanding hooks is crucial for enhancing WooCommerce functionality.

The importance of hooks in WordPress lies in their flexibility and efficiency. Hooks provide a structured way to manage code ( PHP, HTML, & CSS ), making it easier to maintain and upgrade themes and plugins in the future. By using hooks, developers can add features such as custom product displays, tailored checkout experiences, or dynamic pricing rules without touching the core WooCommerce template files. This approach minimizes conflicts during updates, ensuring a stable and secure WordPress development environment.

The benefits of using WooCommerce hooks include improved code re-usability, easy troubleshooting, and better overall site performance. By leveraging these hooks, developers can focus on building specific features without worrying about compatibility issues or performance lags. Hooks also help create a modular codebase, making it more organized and scalable for future modifications. Knowing the right hooks to implement can significantly optimize a WooCommerce store, delivering a seamless shopping experience for customers.

Discover additional related articles, including the Ultimate Guide to WooCommerce Shortcodes and an in-depth look at WordPress sidebars.

Must-Have WooCommerce Hooks List with Examples

Discover essential hooks that streamline backend and frontend development for your themes and plugins. This comprehensive list provides key examples and insights on utilizing hooks for settings configuration, panel adjustments, widget integration, and shortcode implementation, ensuring your templates are both functional and user-friendly.

1. Action Hooks

Action hooks allow you to add custom code at specific points in the WooCommerce process.

1.1. woocommerce_before_shop_loop

Executed before the product listing starts on the shop page.

add_action('woocommerce_before_shop_loop', 'custom_text_before_shop_loop');
function custom_text_before_shop_loop() {
echo '<p>Welcome to our shop! Browse our products below:</p>';
}
    

1.2. woocommerce_after_shop_loop

Executed after the product listing ends on the shop page.

add_action('woocommerce_after_shop_loop', 'custom_message_after_shop_loop');
function custom_message_after_shop_loop() {
echo '<p>Thank you for visiting our shop! Check back for new items soon.</p>';
}
    

1.3. woocommerce_single_product_summary

Used to customize the single product page. You can add content like an extra description or badge.

add_action('woocommerce_single_product_summary', 'display_custom_badge', 6);
function display_custom_badge() {
echo '<span class="custom-badge">Special Offer!</span>';
}

1.3. woocommerce_before_cart

Triggered before the cart table is displayed.

add_action('woocommerce_before_cart', 'custom_notice_before_cart');
function custom_notice_before_cart() {
echo '<div class="custom-notice">Free shipping on orders over $50!</div>';
}

1.5. woocommerce_thankyou

Executed after an order is placed on the “Thank You” page.

add_action('woocommerce_thankyou', 'custom_thank_you_message');
function custom_thank_you_message($order_id) {
echo '<p>Thank you for your purchase! Your order number is ' . $order_id . '.</p>';
}
    

2. Filter Hooks

Filter hooks are crucial for modifying data before it is sent to the database or displayed on the frontend. They allow developers to customize settings, enhance functionality, and adjust output without altering the core code. This flexibility is essential for maintaining compatibility with themes and plugins, ensuring a seamless user experience while preserving upgrade paths for future updates.

2.1. woocommerce_add_to_cart_fragments

Modifies the cart content dynamically when adding products via AJAX.

add_filter('woocommerce_add_to_cart_fragments', 'update_cart_count');
function update_cart_count($fragments) {
ob_start();
?>
    cart->get_cart_contents_count(); ?>
<?php
    $fragments['.cart-count'] = ob_get_clean();
    return $fragments;
}
    

2.2. woocommerce_product_tabs

Used to add or modify product tabs on the single product page.

add_filter('woocommerce_product_tabs', 'custom_product_tab');
function custom_product_tab($tabs) {
    $tabs['custom_tab'] = array(
        'title' => __('Extra Info', 'your-theme'),
        'priority' => 50,
        'callback' => 'custom_product_tab_content'
    );
    return $tabs;
}

function custom_product_tab_content() {
    echo '<h2>Extra Information</h2>';
    echo '<p>Here you can find more details about the product.</p>';
}
    

2.3. woocommerce_currency_symbol

Changes the currency symbol displayed.

add_filter('woocommerce_currency_symbol', 'change_currency_symbol', 10, 2);
function change_currency_symbol($currency_symbol, $currency) {
    if ($currency == 'USD') {
        $currency_symbol = 'US$';
    }
    return $currency_symbol;
}
    

2.4. woocommerce_checkout_fields

Used to customize checkout fields.

add_filter('woocommerce_checkout_fields', 'customize_checkout_fields');
function customize_checkout_fields($fields) {
    $fields['billing']['billing_phone']['placeholder'] = 'Enter your phone number';
    return $fields;
}
    

3. WooCommerce Email Hooks

WooCommerce provides hooks specifically for email customization.

3.1. woocommerce_email_header

Modifies the email header.

add_action('woocommerce_email_header', 'custom_email_header', 10, 2);
function custom_email_header($email_heading, $email) {
    echo '<p>Special Announcement: Enjoy 10% off on your next purchase!</p>';
}
    

3.2. woocommerce_email_order_meta

Adds custom meta information to order emails.

add_action('woocommerce_email_order_meta', 'custom_email_order_meta', 10, 3);
function custom_email_order_meta($order, $sent_to_admin, $plain_text) {
    echo '<p>Order Note: This is a custom order note added to the email.</p>';
}
    

4. Checkout Hooks

These hooks allow you to customize the checkout process.

4.1. woocommerce_before_checkout_form

Triggered before the checkout form is displayed.

add_action('woocommerce_before_checkout_form', 'custom_message_before_checkout');
function custom_message_before_checkout() {
    echo '<p class="custom-checkout-message">Please ensure all your details are correct before proceeding.</p>';
}
    

4.2. woocommerce_review_order_before_submit

Executes before the “Place Order” button on the checkout page.

add_action('woocommerce_review_order_before_submit', 'extra_terms_checkbox');
function extra_terms_checkbox() {
    echo '<p><input type="checkbox" name="extra_terms" /> I agree to the extra terms and conditions.</p>';
}
    

4.3. woocommerce_checkout_order_processed

Triggered after an order is processed.

add_action('woocommerce_checkout_order_processed', 'order_processed_message', 10, 3);
function order_processed_message($order_id, $posted_data, $order) {
    // Log or perform an action when an order is processed.
    error_log('Order #' . $order_id . ' has been processed.');
}
    

5. Cart Hooks

These hooks allow modifications to the cart page.

5.1. woocommerce_before_cart_contents

Executes before the cart contents are displayed.

add_action('woocommerce_before_cart_contents', 'custom_notice_before_cart_contents');
function custom_notice_before_cart_contents() {
    echo '<div class="cart-message">Items in your cart are reserved for 10 minutes.</div>';
}
    

5.2. woocommerce_cart_calculate_fees

Allows adding custom fees to the cart.

add_action('woocommerce_cart_calculate_fees', 'add_custom_cart_fee');
function add_custom_cart_fee() {
    WC()->cart->add_fee('Handling Fee', 5.00);
}
    

5.3. woocommerce_after_cart_totals

Executed after the cart totals are displayed.

add_action('woocommerce_after_cart_totals', 'custom_message_after_cart_totals');
function custom_message_after_cart_totals() {
    echo '<p class="cart-totals-message">Apply a coupon to get a discount on your order.</p>';
}
    

6. Product Hooks

These hooks are used for customizing the product pages.

6.1. woocommerce_before_single_product

Triggered before the single product content is displayed.

add_action('woocommerce_before_single_product', 'custom_notice_before_single_product');
function custom_notice_before_single_product() {
    echo '<div class="custom-product-notice"> Limited stock available, order soon!</div>';
}
    

6.2. woocommerce_before_add_to_cart_button

Executes before the “Add to Cart” button on the single product page.

add_action('woocommerce_before_add_to_cart_button', 'additional_product_info');
function additional_product_info() {
    echo '<p class="extra-info">This item ships for free!</p>';
}
    

6.3. woocommerce_after_add_to_cart_button

Executes after the “Add to Cart” button on the single product page.

add_action('woocommerce_after_add_to_cart_button', 'custom_after_add_to_cart');
function custom_after_add_to_cart() {
    echo '<p class="add-to-cart-message"> Thank you for considering this product!</p>';
}
    

7. Email Notification Hooks

These hooks allow customizing email notifications sent by WooCommerce.

7.1. woocommerce_email_footer

Modifies the email footer.

add_action('woocommerce_email_footer', 'custom_email_footer');
function custom_email_footer() {
    echo '<p>Follow us on social media for the latest updates and promotions!</p>';
}
    

7.2. woocommerce_email_before_order_table

Executes before the order table is rendered in the email.

add_action('woocommerce_email_before_order_table', 'add_custom_message_to_email', 20, 4);
function add_custom_message_to_email($order, $sent_to_admin, $plain_text, $email) {
    echo '<p>Thank you for shopping with us! Here are the details of your order:</p>';
}
    

8. Account and Login Hooks

These hooks allow you to customize the account pages and login process.

8.1. woocommerce_login_form_start

Executed at the start of the login form.

add_action('woocommerce_login_form_start', 'custom_login_message');
function custom_login_message() {
    echo '<p class="custom-login-message">Welcome back! Please log in to continue.</p>';
}
    

8.2. woocommerce_before_my_account

Runs before the content of the “My Account” page.

add_action('woocommerce_before_my_account', 'custom_message_before_my_account');
function custom_message_before_my_account() {
    echo '<p>Check out our latest products and special discounts in your account dashboard.</p>';
}
    

8.3. woocommerce_account_navigation

Allows adding custom content to the navigation section of the “My Account” page.

add_action('woocommerce_account_navigation', 'custom_account_navigation_message');
function custom_account_navigation_message() {
    echo '<p class="account-navigation-message">Navigate through your orders, downloads, and account details.</p>';
}
    

9. Order Management Hooks

These hooks allow customization of the order management process.

9.1. woocommerce_order_status_changed

Executed when an order’s status changes.

add_action('woocommerce_order_status_changed', 'order_status_update_notification', 10, 4);
function order_status_update_notification($order_id, $old_status, $new_status, $order) {
    // Notify admin when the order status changes to "completed".
    if ($new_status == 'completed') {
        error_log('Order #' . $order_id . ' has been marked as completed.');
    }
}
    

9.2. woocommerce_admin_order_data_after_order_details

Allows adding custom data after the order details in the admin panel.

add_action('woocommerce_admin_order_data_after_order_details', 'custom_admin_order_data');
function custom_admin_order_data($order) {
    echo '<p><strong>Custom Note:</strong> This order requires special handling.</p>';
}
    

10. Payment Gateway Hooks

These hooks let you customize payment gateway behaviors.

10.1. woocommerce_payment_complete

Triggered when payment is complete for an order.

add_action('woocommerce_payment_complete', 'custom_action_on_payment_complete');
function custom_action_on_payment_complete($order_id) {
    // Perform custom action after payment is completed.
    error_log('Payment for order #' . $order_id . ' has been successfully completed.');
}
    

11. Coupons Hooks

WooCommerce provides hooks for customizing how coupons are applied and processed.

11.1. woocommerce_coupon_options_save

Allows you to execute custom code after saving a coupon in the admin.

add_action('woocommerce_coupon_options_save', 'save_custom_coupon_data', 10, 2);
function save_custom_coupon_data($post_id, $coupon) {
    // Custom logic when saving a coupon
    update_post_meta($post_id, '_custom_coupon_field', sanitize_text_field($_POST['_custom_coupon_field']));
}
    

11.2. woocommerce_applied_coupon

Triggered when a coupon is applied at checkout.

add_action('woocommerce_applied_coupon', 'custom_action_after_coupon_applied');
function custom_action_after_coupon_applied($coupon_code) {
    // Notify user that a coupon was applied
    wc_add_notice('Coupon ' . $coupon_code . ' applied successfully!', 'success');
}
    

12. Shipping Hooks

WooCommerce allows customization of shipping calculations and methods.

12.1. woocommerce_after_shipping_rate

Used to display custom content after a shipping rate option on the checkout page.

add_action('woocommerce_after_shipping_rate', 'custom_text_after_shipping_option', 10, 2);
function custom_text_after_shipping_option($method, $index) {
    echo '<p class="custom-shipping-info">Delivery expected in 3-5 business days.</p>';
}
    

12.2. woocommerce_package_rates

Allows modification of shipping rates before they are displayed.

add_filter('woocommerce_package_rates', 'custom_shipping_rate_adjustment', 10, 2);
function custom_shipping_rate_adjustment($rates, $package) {
    foreach ($rates as $rate) {
        // Increase all shipping rates by $5
        $rate->cost += 5;
    }
    return $rates;
}
    

13. Subscription Hooks

If you’re using the WooCommerce Subscriptions extension, it provides hooks for managing subscription-related events.

13.1. woocommerce_scheduled_subscription_payment

Triggered when a subscription payment is scheduled.

add_action('woocommerce_scheduled_subscription_payment', 'process_subscription_payment', 10, 2);
function process_subscription_payment($amount_to_charge, $order) {
    // Custom logic when subscription payment is processed
    error_log('Processing subscription payment of ' . $amount_to_charge . ' for order ' . $order->get_id());
}
    

13.2. woocommerce_subscription_status_updated

Runs when a subscription status is updated (e.g., from active to canceled).

add_action('woocommerce_subscription_status_updated', 'subscription_status_change_action', 10, 3);
function subscription_status_change_action($subscription, $old_status, $new_status) {
    // Take action when a subscription is canceled
    if ($new_status == 'cancelled') {
        error_log('Subscription #' . $subscription->get_id() . ' was canceled.');
    }
}
    

14. Product Loop Hooks

These hooks are useful when customizing the product loop display (e.g., on the shop or category pages).

14.1. woocommerce_before_shop_loop_item

Executes before each product in the product loop.

add_action('woocommerce_before_shop_loop_item', 'custom_before_product_loop_item');
function custom_before_product_loop_item() {
    echo '<div class="product-loop-header">Featured Product</div>';
}

14.2. woocommerce_after_shop_loop_item

Executes after each product in the product loop.

add_action('woocommerce_after_shop_loop_item', 'custom_after_product_loop_item');
function custom_after_product_loop_item() {
    echo '<div class="product-loop-footer">Limited Time Offer</div>';
}
    

15. Variable Products Hooks

For stores that offer variable products (products with multiple variations), these hooks are handy.

15.1. woocommerce_available_variation

Used to modify the available product variations before they are displayed.

add_filter('woocommerce_available_variation', 'custom_variation_price_display');
function custom_variation_price_display($variation_data) {
    $variation_data['price_html'] .= '<p class="custom-price-message">Special price for this variation!</p>';
    return $variation_data;
}
    

16. Order Notes Hooks

WooCommerce allows you to interact with order notes, a useful feature for communicating updates to customers.

16.1. woocommerce_new_order_note

Runs when a new order note is added.

add_action('woocommerce_new_order_note', 'log_order_note', 10, 2);
function log_order_note($note_id, $note) {
    // Log the new order note
    error_log('New order note added: ' . $note);
}
    

17. Custom Fields in WooCommerce

WooCommerce also provides hooks for managing custom fields in products, orders, or checkout fields.

17.1. woocommerce_process_product_meta

Used to save custom fields in the product’s metadata.

add_action('woocommerce_process_product_meta', 'save_custom_product_meta');
function save_custom_product_meta($post_id) {
    if (isset($_POST['_custom_product_field'])) {
        update_post_meta($post_id, '_custom_product_field', sanitize_text_field($_POST['_custom_product_field']));
    }
}
    

18. Custom Email Fields Hooks

If you want to modify the emails, such as adding custom fields to the order emails, you can use the following hooks:

18.1. woocommerce_email_order_meta_fields

Allows you to add custom meta fields to the order emails.

add_filter('woocommerce_email_order_meta_fields', 'add_custom_meta_to_email', 10, 3);
function add_custom_meta_to_email($fields, $sent_to_admin, $order) {
    $fields['custom_order_meta'] = array(
        'label' => __('Custom Meta'),
        'value' => get_post_meta($order->get_id(), '_custom_meta_key', true)
    );
    return $fields;
}
    

If you’re working with custom payment gateways or want to modify payment-related behavior, these hooks are useful.

19.1. woocommerce_payment_gateways

Filter to modify or add custom payment gateways.

add_filter('woocommerce_payment_gateways', 'add_custom_payment_gateway');
function add_custom_payment_gateway($gateways) {
    $gateways[] = 'WC_Custom_Gateway';
    return $gateways;
}

Conclusion

This extended list provides a more comprehensive overview of the WooCommerce hooks available to you. Depending on the specific requirements of your store, you may need to dive into other specialized hooks (e.g., for specific extensions like Subscriptions or Memberships) or modify behaviors at a more granular level.

Let me know if you need further clarification on any of these or if you’d like examples for any specific use case!

Inspire us with your love!

FacebookTwitterReddit
Saiful Islam

Saiful Islam, the founder of aThemeArt, is a successful freelancer, a father of two boys, and an enthusiast in coding, YouTube, and gaming. Connect with me on Twitter, Facebook, and Instagram to stay updated with my latest endeavors.

You can check also

Leave a Reply

Your email address will not be published. Required fields are marked *.

*
*