Mastering WooCommerce Actions and Filters

Share this article

The use of WooCommerce, along with WordPress, to create eCommerce websites is on the rise. If you are a Web Developer like me, knowing the ins and out of the WooCommerce template system, along with it’s actions and filters is a very nice skill to have. Just think how happy your boss would be if you knew everything there is to know about WooCommerce, or at least enough to be able to implement anything with very little help, just you and the WooCommerce documentation.

If all this sounds good to you, continue reading and we’ll explore what can be done with WordPress and WooCommerce working side-by-side. The style of this article (and hopefully many more to come) will include presenting you with a problem and then coming up with a solution using WordPress and WooCommerce actions and filters.

Useful Actions For Account Creation and Updating

It’s very common to use a CRM along with your eCommerce website. WooCommerce makes it simple for us to detect when a new customer or user registers during the Checkout process or via the ‘My Account’ page.

The following example should give you an idea of how to create an account on Salesforce when someone registers through WooCommerce. Note that the Salesforce API code is not shown; I’m just outlining the process.

<?php
// Create Customer's Salesforce Account
add_action( 'woocommerce_created_customer', 'create_salesforce_account', 10, 3 );
function create_salesforce_account( $customer_id, $new_customer_data, $password_generated ) {

	// Get the New Customer's data
	$username   = $new_customer_data['user_login'];
	$password   = $new_customer_data['user_pass'];
	$email      = $new_customer_data['user_email'];
	$role       = $new_customer_data['role'];

	// Getting the rest of the info for this customer
	$user = get_user_by( 'id', $customer_id );

	// Continue and send the information to Salesforce now
}

Continuing on from our previous example, it’s only natural that you would want to update the customer’s information on Salesforce when the customer edits either the Billing or Shipping Address. woocommerce_customer_save_address runs immediately after either address has been edited and it gives the User ID and which address was edited. Note that you can also get any of the form fields via $_POST.

<?php
// Update Salesforce account with new shipping information
add_action( 'woocommerce_customer_save_address', 'update_salesforce_account', 10, 2 );
function update_salesforce_account( $user_id, $load_address ) {

	// Let's use a Switch statement to know which address we are updating
	switch ( $load_address ) {
		case 'billing':
			// Send billing info to Salesforce
			break;

		case 'shipping':
			// Send shipping info to Salesforce
			break;
	}
}

Overriding Front-End Titles, Messages And Descriptions

Section titles, messages and descriptions can easily be changed if you know what filter to use. These filters allow you to customize what’s displayed to the customer down to the last detail. Did you notice I’m saying filters and not actions? That’s because WooCommerce doesn’t use actions for overriding these kinds of values, just like WordPress does.

WooCommerce checkout coupon message

woocommerce_checkout_coupon_message displays only if coupons are enabled on your store, and while you are in the checkout page it asks you for a coupon code. For example: Have a coupon? Click here to enter your code.

WooCommerce checkout login message

woocommerce_checkout_login_message displays on the checkout page when the cart detects that you are not logged in and it gives you the option to sign-in. For example: Returning customer? Click here to login.

WooCommerce lost password message

woocommerce_lost_password_message displays under the ‘My Account’ page where it instructs you to enter your username or email in order to reset your password. For example: Lost your password? Please enter your username or email address. You will receive a link to create a new password via email.

WooCommerce my account my address title

woocommerce_my_account_my_address_title displays on the ‘My Account’ page and by default it can have one of two titles. Its modified slightly from ‘My Addresses’ to ‘My Address’ when you have set-up to ship only to the billing address so there is only a need for one of them. For example: My Addresses or My Address.

WooCommerce my account my address description

woocommerce_my_account_my_address_description displays right below the Address Title, giving you a brief explanation of what the address(es) will be used for. For example: The following addresses will be used on the checkout page by default.

WooCommerce my account my downloads title

woocommerce_my_account_my_downloads_title displays on the ‘My Account’ page and sets the title for the downloads section. For example: Available downloads.

WooCommerce my account my orders title

woocommerce_my_account_my_orders_title displays on the ‘My Account’ page and sets the title for the Orders section. For example: Recent Orders.

There are quite a few of these and the usage is almost identical with the exception of names, of course. Here are some examples on how to change them.

<?php
add_filter( 'woocommerce_checkout_coupon_message',              'override_checkout_coupon_message', 10, 1 );
function override_checkout_coupon_message( $message ) {
    return __( 'Have a coupon for our store?', 'spyr' ) . ' <a href="#" class="showcoupon">' . __( 'Click here to enter it', 'spyr' ) . '</a>';
}

add_filter( 'woocommerce_checkout_login_message',               'override_checkout_login_message',  10, 1 );
function override_checkout_login_message( $message ) {
    return __('Already have an account with us?', 'spyr' );
}

add_filter( 'woocommerce_lost_password_message',                'override_lost_password_message',   10, 1 );
function override_lost_password_message( $message ) {
    return  __( 'Lost your password? Please enter your username or email address.', 'spyr' );
}

add_filter( 'woocommerce_my_account_my_address_title',          'override_my_address_title',        10, 1 );
function override_my_address_title( $title ) {
    return __( 'Your Address', 'spyr' );
}
add_filter( 'woocommerce_my_account_my_address_description',    'override_my_address_description',  10, 1 );
function override_my_address_description( $description ) {
    return __( 'The following addresses will be used on the checkout.', 'spyr' );
}
add_filter( 'woocommerce_my_account_my_downloads_title',        'override_my_downloads_title',      10, 1 );
function override_my_downloads_title( $title ) {
    return __( 'Your Downloads', 'spyr' );
}
add_filter( 'woocommerce_my_account_my_orders_title',           'override_my_orders_title',         10, 1 );
function override_my_orders_title( $title ) {
    return __( 'Your Most Recent Orders', 'spyr' );
}

That’s it for now. We’ve only begun to explore what’s under the hood of WooCommerce and as we progress through a series of articles, we are going to be building more complex modules that will rely heavily on using WooCommerce’s and WordPress’ hooks system to produce whatever we set our minds to do.

In the next article, we will work on a real world case scenario where you might want to give a free product with any purchase that meets a certain criteria among other items of interest.

Frequently Asked Questions on Mastering WooCommerce Actions and Filters

How can I add a custom action to a WooCommerce hook?

To add a custom action to a WooCommerce hook, you need to use the add_action() function. This function requires two parameters: the name of the hook and the function to be executed. Here’s an example:

add_action('woocommerce_before_cart', 'your_custom_function');
function your_custom_function() {
// Your code here
}
In this example, ‘woocommerce_before_cart’ is the hook where you want to add your action, and ‘your_custom_function’ is the function that will be executed.

How can I remove an action from a WooCommerce hook?

To remove an action from a WooCommerce hook, you can use the remove_action() function. This function requires the same parameters as the add_action() function: the name of the hook and the function to be removed. Here’s an example:

remove_action('woocommerce_before_cart', 'your_custom_function');
In this example, ‘woocommerce_before_cart’ is the hook from which you want to remove your action, and ‘your_custom_function’ is the function that will be removed.

How can I modify the default behavior of a WooCommerce hook?

To modify the default behavior of a WooCommerce hook, you can use filters. Filters allow you to modify data before it is sent to the database or the browser. Here’s an example:

add_filter('woocommerce_cart_item_price', 'modify_cart_item_price', 10, 2);
function modify_cart_item_price($price, $cart_item) {
// Your code here
return $new_price;
}
In this example, ‘woocommerce_cart_item_price’ is the filter hook, ‘modify_cart_item_price’ is your custom function, ’10’ is the priority of your function, and ‘2’ is the number of parameters your function accepts.

How can I add a custom field to the WooCommerce checkout page?

To add a custom field to the WooCommerce checkout page, you can use the ‘woocommerce_after_order_notes’ hook. Here’s an example:

add_action('woocommerce_after_order_notes', 'add_custom_checkout_field');
function add_custom_checkout_field($checkout) {
echo '<div id="custom_checkout_field">';
woocommerce_form_field('custom_field', array(
'type' => 'text',
'class' => array('input-text'),
'label' => __('Custom Field'),
'required' => true,
), $checkout->get_value('custom_field'));
echo '</div>';
}
In this example, ‘woocommerce_after_order_notes’ is the hook where you want to add your custom field, and ‘add_custom_checkout_field’ is the function that creates the custom field.

How can I modify the WooCommerce product price programmatically?

To modify the WooCommerce product price programmatically, you can use the ‘woocommerce_product_get_price’ filter hook. Here’s an example:

add_filter('woocommerce_product_get_price', 'modify_product_price', 10, 2);
function modify_product_price($price, $product) {
// Your code here
return $new_price;
}
In this example, ‘woocommerce_product_get_price’ is the filter hook, ‘modify_product_price’ is your custom function, ’10’ is the priority of your function, and ‘2’ is the number of parameters your function accepts.

Yojance RabeloYojance Rabelo
View Author

Yojance Rabelo has been using WordPress to build all kinds of Websites since July 2006. In his free time he likes to try out new technologies, mainly PHP and JavaScript based, and also playing with his EV3RSTORM, a Lego MINDSTORMS robot. He maintains his own blog among other sites about various topics.

ChrisBE-commercepluginpluginswoocommercewoocommerce addonswoocommerce templatesWordPress
Share this article
Read Next
Get the freshest news and resources for developers, designers and digital creators in your inbox each week