*Developers › Action hooks*

# WordPress Action Hooks Reference

Every action hook in WP EasyCart, PRO and the extensions: when it fires and what it passes to your code. 23 parts.

Quick links

- [How action hooks work](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#how-it-works)
- [Reading the list](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#reading-the-list)
- [Cart and checkout](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#cart-and-checkout)
- [Products](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#products)
- [Categories, menus and manufacturers](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#categories-menus-and-manufacturers)
- [Orders](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#orders)
- [Customers and accounts](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#customers-and-accounts)
- [Subscriptions](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#subscriptions)
- [Shipping](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#shipping)
- [Taxes and fees](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#taxes-and-fees)
- [Payments](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#payments)
- [Email and notifications](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#email-and-notifications)
- [Offers and coupons](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#offers-and-coupons)
- [Reviews](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#reviews)
- [Reports and analytics](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#reports-and-analytics)
- [Admin screens and settings](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#admin-screens-and-settings)
- [Storefront templates and design](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#storefront-templates-and-design)
- [Pickup and scheduling](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#pickup-and-scheduling)
- [Downloads and gift cards](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#downloads-and-gift-cards)
- [Integrations and extensions](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#integrations-and-extensions)
- [Import and export](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#import-and-export)
- [API and mobile app](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#api-and-mobile-app)
- [Other](https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/#other)

**Where to find it:** WP Admin › functions.php

*Before you start*

## How action hooks work

What one is and how to read the list.

### How action hooks work

Run your own code when something happens

**What an action is.** WP EasyCart tells WordPress when something happens, such as an item going into the cart or an order being updated. Your code can listen and do something at that moment. It does not change what WP EasyCart does; use a filter for that.

**Where to put your code.** In a small plugin or your child theme’s `functions.php`. Never edit the WP EasyCart files; an update would remove your change.

**A first example.**

```php
add_action( 'wpeasycart_cartitem_added', 'my_cart_watcher' );
function my_cart_watcher( $tempcart_id ) { /* your code */ }
```

Each entry below shows the hook name, what triggers it, and the values it hands to your function, in order. If your function needs more than the first value, say how many to pass: `add_action( 'hook_name', 'my_function', 10, 2 );`.

> **💡 Note:** Connecting another system, such as a warehouse, an ERP or a marketplace, rather than changing the store from inside WordPress? Use the [WP EasyCart API](https://docs.wpeasycart.com/docs/extension-guides/wp-easycart-api-extension/) and its reference at [developer.wpeasycart.com](https://developer.wpeasycart.com/).

### Reading the list

Names, tags and where hooks fire

**Names.** Names start with `wp_easycart_` or `wpeasycart_`. A name with a word in braces, such as `wpeasycart_admin_order_{type}_update`, stands for a family of hooks: replace the braces with the value described in the entry.

**Tags.** An entry with no tag is in the free WP EasyCart plugin. A *PRO* tag means it works only when WP EasyCart PRO is active. Other tags name the extension that provides it.

**Fires in.** The plugin file, and the function, where the hook is called. Use it to understand the context or to search the plugin when you need more detail. Hooks in admin screens work only in the WordPress admin.

**Areas.** The list is grouped by what the hook is about: cart, orders, products, admin screens and so on. Use your browser’s find box to look for a name.

> **💡 Note:** Looking for a way to change a value instead of reacting to an event? See the [WordPress Filters Reference](https://docs.wpeasycart.com/docs/extension-guides/wordpress-filters-reference/).

*The action hooks*

## By area

781 action hooks, grouped by what they are about.

### Cart and checkout

Grouped by what they are about

`wp_easycart_abandoned_cart_captured`
Fires after a new abandoned-cart record is created for a shopper’s cart session.

**Parameters**
`$id` abandoned_cart_id of the new record (int)
`$row` Columns written to the ec_abandoned_cart table (array)

Fires in inc/classes/core/ec_abandoned_carts.php · capture()

`wp_easycart_abandoned_cart_code_minted` PRO
Fires after a recovery coupon code is created for an abandoned cart and saved on its record.

**Parameters**
`(int) $cart->abandoned_cart_id` Abandoned cart id
`$id` Id of the new offer code
`$code` The coupon code string
`(int) $offer->offer_id` Id of the offer the code belongs to

Fires in inc/classes/core/ec_abandoned_sequence.php · code_for()

`wp_easycart_abandoned_cart_coupon_applied`
Fires after a recovery coupon code is applied to a restored shopper session from an abandoned-cart email link.

**Parameters**
`$sid` Cart session id the code was applied to
`$code` The coupon code

Fires in inc/classes/core/ec_abandoned_carts.php · apply_code_to_session()

`wp_easycart_abandoned_cart_recovered`
Fires when an order is matched to an open abandoned cart and the cart is marked recovered.

**Parameters**
`(int) $row->abandoned_cart_id` Abandoned cart id
`$order_id` Id of the order that recovered the cart

Fires in inc/classes/core/ec_abandoned_carts.php · attribute_order() +1 more place

`wp_easycart_abandoned_cart_restored`
Fires after a shopper opens an abandoned-cart restore link and their cart session has been restored, before the redirect to the cart.

**Parameters**
`$new` New (rotated) session id
`$sid` Session id from the restore link
`$coupon` Coupon code from the link, or an empty string

Fires in inc/classes/core/ec_abandoned_carts.php · restore_session()

`wp_easycart_abandoned_cart_step_sent` PRO
Fires after a step of the abandoned-cart reminder sequence has been sent and the cart record advanced.

**Parameters**
`(int) $cart->abandoned_cart_id` Abandoned cart id
`$n` Sequence step number that was sent
`$coupon` Coupon details included in the email (array with a code), or empty

Fires in inc/classes/core/ec_abandoned_sequence.php · send_step()

`wp_easycart_abandoned_cart_unsubscribed`
Fires when a shopper’s email is unsubscribed from abandoned-cart reminders, only if it was not already suppressed.

**Parameters**
`(int) $id` Abandoned cart id used to unsubscribe
`$row->email` Email address unsubscribed

Fires in inc/classes/core/ec_abandoned_carts.php · unsubscribe()

`wp_easycart_abandoned_cart_updated`
Fires after an existing abandoned-cart record is updated with a fresh snapshot of the shopper’s cart.

**Parameters**
`$id` abandoned_cart_id (int)
`$row` Columns just written; status, sequence_step and next_send_at only when they changed (array)

Fires in inc/classes/core/ec_abandoned_carts.php · capture()

`wp_easycart_cart_after_checkout_button`
Fires on the cart page right after the checkout button, before the continue shopping area.

**Parameters**
`$this` The cart page object (classic cart), or the cart page object in the v2 cart template.

Fires in design/layout/base-responsive-v3/ec_cart.php +2 more places

`wp_easycart_cart_before_continue_shopping`
Fires on the cart page right before the Continue Shopping button.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart.php +2 more places

`wp_easycart_cart_link_deleted`
Fires after a cart link and its items have been deleted from the database.

**Parameters**
`(int) $cart_link_id` ID of the cart link that was deleted.

Fires in inc/classes/core/class-wp-easycart-cart-link.php · delete_link()

`wp_easycart_cart_link_rejected`
Fires when a shopper opens a cart link that is missing, inactive, expired or used up, before they are sent to the cart page.

**Parameters**
`$link ? $link : $token` The cart link record (object) when found, otherwise the link token that was requested.

Fires in inc/classes/core/class-wp-easycart-cart-link.php · resolve()

`wp_easycart_cart_link_resolved`
Fires after a valid cart link has been applied to the shopper’s cart, before they are redirected to the cart or checkout.

**Parameters**
`$link` The cart link record (object).
`$added` Whether the link’s items were added to the cart.

Fires in inc/classes/core/class-wp-easycart-cart-link.php · resolve()

`wp_easycart_cart_link_saved`
Fires after a cart link and its items have been saved.

**Parameters**
`$cart_link_id` ID of the cart link that was saved.

Fires in inc/classes/core/class-wp-easycart-cart-link.php · save_link()

`wp_easycart_cart_payment_after_edit_shipping_link`
Fires on the checkout payment page after the Edit Shipping Address link and before the shipping method heading.

**Parameters**
`$this` The cart page object.

Fires in design/layout/base-responsive-v3/ec_cart_payment.php

`wp_easycart_cart_payment_after_payment_table`
Fires on the v2 checkout payment page after the payment method table and the pay-later minimum message.

**Parameters**
`$cartpage` The cart page object.

Fires in design/layout/base-responsive-v3/ec_cart_payment_v2.php

`wp_easycart_cart_payment_end`
Fires at the very end of the checkout payment page template, before the closing spacer and media size marker.

**Parameters**
`$this` The cart page object.

Fires in design/layout/base-responsive-v3/ec_cart_payment.php +1 more place

`wp_easycart_cart_template_end`
Fires at the very end of the cart template, after the cart section and the media size marker.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart.php +1 more place

`wp_easycart_cartitem_deleted`
Fires after a line item has been deleted from the temporary cart and its option items removed.

**Parameters**
`$tempcart_id` ID of the cart line item that was deleted.
`$session_id` The shopper’s cart session ID.

Fires in inc/classes/core/ec_db.php · delete_cartitem()

`wp_easycart_cartitem_post_optionitems`
Fires for each cart line item after its options and custom details are printed, in the cart and checkout order summary.

**Parameters**
`$this->cart->cart[$cartitem_index]` The cart line item (object); the invoice item object in the invoice template.

Fires in design/layout/base-responsive-v3/ec_cart.php +5 more places

`wp_easycart_checkout_details_left_end`
Fires at the end of the left column of the checkout details page, after the checkout error messages.

**Parameters**
`$cartpage` The cart page object (passed as $this in the classic template).

Fires in design/layout/base-responsive-v3/ec_cart_information_v2.php +1 more place

`wp_easycart_checkout_details_right_end`
Fires at the end of the right column of the checkout details page, after the continue button or the cart totals.

**Parameters**
`$this` The cart page object.

Fires in design/layout/base-responsive-v3/ec_checkout_summary.php +1 more place

`wp_easycart_checkout_field_html` PRO
Fires after PRO prints a checkout field’s input, so extensions can add markup for a custom field type.

**Parameters**
`$field` The checkout field definition (array).
`$value` The shopper’s current answer (string).

Fires in inc/classes/core/wp_easycart_checkout_fields_pro.php · print_field()

`wp_easycart_checkout_fields_order_saved` PRO
Fires after checkout field answers have been saved on a newly created order.

**Parameters**
`$order_id` ID of the new order (int).

Fires in inc/classes/core/wp_easycart_checkout_fields_pro.php · order_inserted()

`wp_easycart_checkout_fields_order_updated` PRO
Fires after checkout field answers on an existing order have been changed, by staff on the order screen or by the customer after payment.

**Parameters**
`$order_id` ID of the order (int).
`$who` Who made the change: staff or customer (string).

Fires in inc/classes/core/wp_easycart_checkout_fields_pro.php · update_order_answers()

`wp_easycart_checkout_form_inner`
Fires inside the opening tag of the checkout details form, so a callback can echo extra HTML attributes for the form.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_page_one_form_start()

`wp_easycart_checkout_session_renewed`
Fires after an order is placed and the shopper is given a new checkout session, so anything tied to the old session can move to the new one.

**Parameters**
`$old_cart_id` (string) The session that placed the order.
`$new_cart_id` (string) The session that follows.

Fires in inc/classes/cart/ec_cart_data.php · checkout_session_complete()

`wp_easycart_display_cart_after`
Fires after the cart or the cart contents have been displayed.

**Parameters**
`$this->cart` The cart object.
`$this->order_totals` The order totals object.

Fires in inc/classes/cart/ec_cartpage.php · display_cart() +1 more place

`wp_easycart_display_cart_before`
Fires before the cart or the cart contents are displayed.

**Parameters**
`$this->cart` The cart object.
`$this->order_totals` The order totals object.

Fires in inc/classes/cart/ec_cartpage.php · display_cart() +1 more place

`wp_easycart_display_checkout_details_post`
Fires after the checkout details (contact information) step has been displayed.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_checkout_details()

`wp_easycart_display_checkout_details_pre`
Fires before the checkout details (contact information) step is displayed.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_checkout_details()

`wp_easycart_end_live_payment_box_inner`
Fires at the end of the live payment box on the checkout payment step, after the payment fields.

**Parameters**
`$this / $cartpage` The cart page object (passed as $this in one template and $cartpage in the other)

Fires in design/layout/base-responsive-v3/ec_cart_payment.php +1 more place

`wp_easycart_onepage_checkout_top`
Fires at the top of the one-page checkout template, after the tabbed form start and before the express checkout buttons.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart_information_v2.php

`wp_easycart_totals_after`
Fires on the checkout page after the cart totals lines are printed.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart.php +1 more place

`wpeasycart_billing_after`
Fires in the checkout after the billing information section, before the payment method section.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart_information_v2.php +3 more places

`wpeasycart_cart_added`
Fires when a new cart session record is created for a shopper who did not have one yet.

**Parameters**
`$session_id` Cart session ID of the new cart

Fires in inc/classes/core/ec_db.php · get_cart_data()

`wpeasycart_cart_item_added`
Fires after a product is added to the shopper’s cart, with the quantity added and unit price, so tracking and marketing integrations can record the add.

**Parameters**
`$tempcart_id` ID of the cart line (ec_tempcart row)
`$product_id` ID of the product added
`$quantity_added` Quantity added by this action
`$unit_price (float)` The line’s unit price, including variant price, options, tiers and role prices
`$args (array)` Extra details: optionitemquantity_id, content_id, source (details, list, link, cart_link, deconetwork or other), event_id, content_name and browser (true if the storefront script already fired AddToCart)

Fires in inc/classes/core/class-wp-easycart-meta.php · announce_add()

`wpeasycart_cart_updated` PRO Facebook & Instagram
Fires after the shopper’s cart changes, such as items added, removed or adjusted for stock, so tax services and integrations can refresh.

No parameters.

Fires in wpeasycart.php · load_ec_pre() +63 more places

`wpeasycart_cartitem_added` PRO
Fires after a new cart item row is inserted into the cart table.

**Parameters**
`$tempcart_id` ID of the new cart line (ec_tempcart row)

Fires in inc/classes/core/ec_db.php · add_to_cart() +5 more places

`wpeasycart_cartitem_deleted`
Fires after a cart item row is deleted, for example when stock runs out or an item is removed.

**Parameters**
`$tempcart_id` ID of the deleted cart line

Fires in inc/classes/core/ec_db.php · update_temp_cart_inventory() +3 more places

`wpeasycart_cartitem_deleting`
Fires just before a cart item row is deleted from the cart table.

**Parameters**
`$tempcart_id` ID of the cart line about to be deleted

Fires in inc/classes/core/ec_db.php · update_temp_cart_inventory() +4 more places

`wpeasycart_cartitem_updated`
Fires after an existing cart item is changed, such as its quantity being merged with a new add or reduced to available stock.

**Parameters**
`$tempcart_id` ID of the updated cart line

Fires in inc/classes/core/ec_db.php · update_temp_cart_inventory() +8 more places

`wpeasycart_checkout_details_after`
Fires in the checkout details template after the details columns, before the form closes.

No parameters.

Fires in design/layout/base-responsive-v3/ec_checkout_details.php +1 more place

`wpeasycart_checkout_fields`
Fires in the checkout at points where extra checkout fields can be output; the first argument names the section, such as contact.

**Parameters**
`$section (string)` Checkout section the fields belong to, such as ‘contact’
`$cartpage` The cart page object

Fires in design/layout/base-responsive-v3/ec_cart_information_v2.php +18 more places

`wpeasycart_checkout_protection_attack_ended`
Fires when checkout protection attack mode ends.

**Parameters**
`$summary (array)` Counts for the attack

Fires in inc/classes/core/class-wp-easycart-checkout-guard.php · end_attack()

`wpeasycart_checkout_protection_attack_started`
Fires when checkout protection attack mode starts, either manually or after a burst of declines.

**Parameters**
`(bool) $manual` True if the store owner started attack mode
`(int) $recent` Number of declines in the last 15 minutes

Fires in inc/classes/core/class-wp-easycart-checkout-guard.php · start_attack()

`wpeasycart_item_added_to_cart`
Fires after a product is added to the cart from the product details page, before the cart updated action.

**Parameters**
`$tempcart_id` ID of the cart line that was added
`$cart_id` ID of the cart session

Fires in inc/classes/cart/ec_cartpage.php · process_add_to_cart_v3()

`wpeasycart_order_notes_after`
Fires in the checkout right after the order notes box, where extra checkout content can be added.

**Parameters**
`$cartpage` The cart page object (only passed by the one-page checkout template)

Fires in design/layout/base-responsive-v3/ec_cart_information_v2.php +1 more place

`wpeasycart_order_success`
Fires when the checkout success page starts to display, before the order details are loaded.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_cart_success_page() +1 more place

`wpeasycart_payment_order_notes_after`
Fires on the payment review step of checkout, right after the shopper’s order notes and before the order totals heading.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart_payment.php

`wpeasycart_save_checkout_info_complete`
Fires after the checkout information step is saved through AJAX, once the cart and totals are loaded.

**Parameters**
`$cart` the cart object (ec_cart)
`$order_totals` the calculated order totals object
`$cartpage->shipping->get_selected_shipping_method()` the selected shipping method

Fires in wpeasycart.php · ec_ajax_save_checkout_info()

`wpeasycart_save_checkout_info_process`
Fires while the checkout information step is being saved, after the guest or account details are set and before the session is saved.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · process_save_checkout_info_helper()

`wpeasycart_save_checkout_shipping_process`
Fires when the classic checkout shipping method step is posted, so extensions can save extra fields from it.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · process_save_checkout_shipping()

`wpeasycart_shipping_after`
Fires on the checkout information page after the shipping section, before the checkout fields and order notes.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart_information_v2.php +1 more place

`wpeasycart_submit_order_complete`
Fires after the order is submitted and payment is processed in the checkout, before the shopper is sent to the success page.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · submit_square_quick_payment() +1 more place

`wpeasycart_submit_order_process`
Fires when Place order is posted, before any payment runs, so extensions can save what the payment step asked for.

No parameters.

Fires in wpeasycart.php · ec_ajax_cart_validate_stock() +1 more place

### Products

Grouped by what they are about

`wp_easycart_admin_ai_written`
Fires after Write with AI writes text for a product field in the product editor. Nothing is saved yet: the text goes back to the editor.

**Parameters**
`$field` (string) The field written, such as description, short_description or seo_title.
`$product_id` (int) The product id.

Fires in admin/inc/wp_easycart_admin_ai.php · ajax()

`wp_easycart_admin_ecv2_advanced_pricing_slideout_extras` PRO
Fires at the end of the product advanced-pricing slideout body in the admin product table, so extensions can add sections.

No parameters.

Fires in admin/inc/wp_easycart_admin_products_pro.php · render_ecv2_advanced_pricing_slideout()

`wp_easycart_admin_ecv2_price_editor_extra_sections`
Fires inside the admin product table’s price editor popover, before the footer buttons, so extra sections can be added.

**Parameters**
`$result` Product row being edited

Fires in admin/inc/wp_easycart_admin_product_table.php · print_price_editor_menu()

`wp_easycart_admin_ecv2_product_image_edit_trigger`
Fires after a product thumbnail is printed in the admin product list so an image edit trigger can be added.

**Parameters**
`$product_id` Product id
`'table' or 'card'` Which view is being shown: table row or card

Fires in admin/inc/wp_easycart_admin_product_table.php · print_product_image() +1 more place

`wp_easycart_admin_ecv2_render_advanced_pricing_slideout`
Fires when the admin product table prints its custom modals, to render the advanced pricing slideout.

No parameters.

Fires in admin/inc/wp_easycart_admin_product_table.php · print_custom_modals()

`wp_easycart_admin_ecv2_render_b2b_pricing_manager`
Fires when the admin product table prints its custom modals, to render the B2B pricing manager.

No parameters.

Fires in admin/inc/wp_easycart_admin_product_table.php · print_custom_modals()

`wp_easycart_admin_ecv2_render_image_manager`
Fires when the admin product table prints its custom modals, to render the image manager.

No parameters.

Fires in admin/inc/wp_easycart_admin_product_table.php · print_custom_modals()

`wp_easycart_admin_ecv2_render_variant_manager`
Fires when the admin product table prints its custom modals, to render the variant manager.

No parameters.

Fires in admin/inc/wp_easycart_admin_product_table.php · print_custom_modals()

`wp_easycart_admin_ecv2_render_volume_pricing_manager`
Fires when the admin product table prints its custom modals, to render the volume pricing manager.

No parameters.

Fires in admin/inc/wp_easycart_admin_product_table.php · print_custom_modals()

`wp_easycart_admin_ecv2_save_price_extras`
Fires when a product’s prices are saved from the admin price editor, letting PRO save its own POST data in the same request.

**Parameters**
`$product_id` Product id

Fires in admin/inc/wp_easycart_admin_product_table.php · ecv2_product_save_prices()

`wp_easycart_admin_product_advanced_option_row_end`
Fires for each advanced option row after the advanced option list is printed following an add or delete in the product editor.

**Parameters**
`$advanced_option` Advanced option row for the product (ec_option_to_product joined to ec_option)

Fires in admin/inc/wp_easycart_admin_products.php · ec_admin_ajax_product_details_add_advanced_option() +1 more place

`wp_easycart_admin_product_details_advanced_pricing_fields`
Fires in the Volume and B2B prices card of the product editor’s Pricing section so extensions can add fields.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_after_images`
Fires in the product editor’s Media section when WP EasyCart PRO prints its media panel the older way, so extensions can output image fields.

No parameters.

Fires in admin/template/products/products/product-details-v2.php +1 more place

`wp_easycart_admin_product_details_basic_fields`
Fires wherever the product editor prints its basic fields, so extensions can add fields: the Product details and Description cards in Basics, the Price card in Pricing, and the Page address and Manufacturer in the summary column.

No parameters.

Fires in admin/inc/wp_easycart_admin_details_products_v2.php · print_side_v2() +4 more places

`wp_easycart_admin_product_details_basic_start`
Fires at the start of the product editor’s Product details card in Basics, and again at the start of the Description card and of the Price card in Pricing.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-details-v2.php +2 more places

`wp_easycart_admin_product_details_buttons_pre`
Fires in the product editor header, before the View button, the ⋯ menu and Save.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_categories_fields`
Fires where the product editor prints the Categories field, so category fields can be added: the Organization card in the summary column, or the Storefront section for a product not yet created.

No parameters.

Fires in admin/inc/wp_easycart_admin_details_products_v2.php · print_side_v2() +1 more place

`wp_easycart_admin_product_details_customs_fields`
Fires in the product editor’s Shipping section, at Packs in under Package and in the Customs group, so customs and packing fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php +1 more place

`wp_easycart_admin_product_details_deconetwork_fields`
Fires in the Deconetwork card of the product editor’s Type settings section so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_downloads_fields`
Fires in the Digital Download card of the product editor’s Type settings section so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_featured_products_fields`
Fires in the Featured products card of the product editor’s Storefront section so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_general_options_fields`
Fires wherever the product editor prints its general option fields, so fields can be added: the Sort order and specials card in Storefront, the Purchase rules card in Type settings, and Who can see it and Show on the store page in the summary column.

No parameters.

Fires in admin/inc/wp_easycart_admin_details_products_v2.php · print_side_v2() +4 more places

`wp_easycart_admin_product_details_googlemerchant_fields`
Fires to print the Google Merchant feed attribute fields in the product editor’s Search & marketing section (Google Shopping tab); WP EasyCart PRO adds the fields.

No parameters.

Fires in admin/inc/wp_easycart_admin_details_products_v2.php · capture_google_merchant_fields() +2 more places

`wp_easycart_admin_product_details_images_pro_start` PRO
Fires at the start of WP EasyCart PRO’s media panel in the product editor’s Media section, before the Product gallery card.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-images-pro.php +1 more place

`wp_easycart_admin_product_details_menus_fields`
Fires in the Store menus card of the product editor’s Storefront section so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_modifiers_pro_start` PRO
Fires at the start of the Modifiers card that WP EasyCart PRO prints in the product editor’s Options & variants section.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-options-pro-v2.php +1 more place

`wp_easycart_admin_product_details_optionitem_quantity_fields`
Fires in the product editor’s Inventory section so per-variant stock and stock notification tools can be printed; whatever prints shows in a Variation Inventory card.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_options_pro_start` PRO
Fires at the start of the Option Sets card that WP EasyCart PRO prints in the product editor’s Options & variants section.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-options-pro-v2.php +1 more place

`wp_easycart_admin_product_details_order_completed_details_note_fields`
Fires in the Order details note of the product editor’s After purchase section (its My Account tab) so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_order_completed_email_note_fields`
Fires in the Order email note of the product editor’s After purchase section (its Order email tab) so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_order_completed_note_fields`
Fires in the Order confirmation page note of the product editor’s After purchase section (its Order confirmation page tab) so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_packaging_fields`
Fires in the Package group of the product editor’s Shipping section, with the weight and size fields, so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_pricing_fields`
Fires in the Cost and price display card of the product editor’s Pricing section so pricing fields can be added.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_pricing_start`
Fires in the product editor’s Pricing section after the Price card, before the Cost and price display card.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_qr_code`
Fires in the product editor’s ⋯ menu so the product’s QR code can be printed; the menu shows it behind a Product QR code item.

**Parameters**
`$is_new ? 0 : $product->product_id` Product id, or 0 for a new product

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_quantity_fields`
Fires in the Stock and order limits card of the product editor’s Inventory section so fields can be added.

**Parameters**
`$product` Product row

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_quantity_start`
Fires at the top of the product editor’s Inventory section, before the Stock and order limits card.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_sections_pre`
Fires on the admin product edit screen after the header and new-product notice, before the section rail and panels are printed.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_seo_fields`
Fires inside the Search engine listing card of the product editor’s Search & marketing section (Search engines tab), only when Yoast SEO is not handling the product’s SEO fields.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_shipping_fields`
Fires wherever the product editor prints its shipping fields, so extensions can add fields: the Backorders card in Inventory, and Ships to the customer, Charges and Where it goes in the Shipping section. A field you add shows under Where it goes.

No parameters.

Fires in admin/template/products/products/product-details-v2.php +3 more places

`wp_easycart_admin_product_details_short_description_fields`
Fires in the Short description card of the product editor’s Basics section so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php +1 more place

`wp_easycart_admin_product_details_specifications_fields`
Fires in the Specifications card of the product editor’s Basics section so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php +1 more place

`wp_easycart_admin_product_details_tags_fields`
Fires in the Badges and image effects card of the product editor’s Design section so fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_activity_end`
Fires at the end of the product editor’s Activity section (Insights), after the activity content.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_behavior_cards`
Fires at the end of the product editor’s Type settings section so extensions can print more purchase-rule cards (WP EasyCart for BlueCheck adds its age check card here). A card that saves with the editor’s Save button registers itself with ecdv2.register_section().

**Parameters**
`$product` The product being edited (object); it has no product_id yet for a new product.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_header_menu`
Fires in the product editor’s ⋯ menu, after the Documentation link, so extensions can add menu items.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_marketing_cards`
Fires in the product editor’s Search & marketing section so extensions can print more marketing cards, such as the Facebook & Instagram card and WP EasyCart PRO’s Email marketing card; they show in its Marketing tab.

**Parameters**
`$product` The product being edited (object); it has no product_id yet for a new product.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_media_pro`
Fires inside the product editor’s Media section when WP EasyCart PRO’s media panel is active, so PRO can print the Product gallery.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_options_pro`
Fires inside the product editor’s Options & variants section when WP EasyCart PRO’s options panel is active, so PRO can print the option sets, variations and modifiers.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_stock_history_pro`
Fires when the product editor’s Inventory section is drawn and the PRO stock history panel is enabled, so PRO can print the stock change history.

**Parameters**
`$this->product` The product being edited (object).

Fires in admin/inc/wp_easycart_admin_details_products_v2.php · print_stock_history_v2()

`wp_easycart_admin_product_details_variants_pro_start` PRO
Fires at the start of the Variations card in the product editor’s Options & variants section (WP EasyCart PRO), so a managing service can cover the card.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-options-pro-v2.php

`wp_easycart_admin_product_list_cell_{col}`
Fires when the admin product list prints a cell for a custom column; {col} is the column’s format value, so a callback prints that column’s cell content.

**Parameters**
`$result` The product row (object) from the list query, including the column’s own select.
`$col` The column definition (array).

Fires in admin/inc/wp_easycart_admin_product_table.php · print_cell_content()

`wp_easycart_ecv2_cart_link_card_end`
Fires at the end of the Cart Links card in the product editor’s Search & marketing section (Cart links tab).

No parameters.

Fires in admin/template/products/products/product-cart-links-card.php

`wp_easycart_ecv2_cart_link_card_modifiers`
Fires in the Cart Links card of the product editor’s Search & marketing section, before the Create Link button, so PRO can add modifier preselect inputs.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-cart-links-card.php

`wp_easycart_ecv2_cart_link_card_row_actions`
Fires for each existing cart link in the Cart Links card of the product editor’s Search & marketing section, after the Copy button, so extra row actions can be added.

**Parameters**
`$ecdv2_cl_link` The cart link record for this row (object).

Fires in admin/template/products/products/product-cart-links-card.php

`wp_easycart_inventory_tracking_changed` PRO
Fires after stock tracking is turned on or off for a product or a variant, from the admin inventory screen or the product editor’s variant table (WP EasyCart PRO).

**Parameters**
`$product_id` Product ID
`$oiq_id` Option item quantity ID, or 0 when the change applies to the product itself
`$tracked` 1 when tracking was turned on, 0 when turned off

Fires in admin/inc/wp_easycart_admin_inventory.php · ajax_set_qty() +1 more place

`wp_easycart_modifier_to_product_created` PRO
Fires after an option (modifier) is added to a product in the admin.

**Parameters**
`(int) $_POST['option_id']` Option ID
`(int) $_POST['product_id']` Product ID

Fires in admin/inc/wp_easycart_admin_products_pro.php · add_modifier()

`wp_easycart_modifier_to_product_deleted` PRO
Fires just before an option (modifier) link is removed from a product in the admin.

**Parameters**
`(int) $_POST['option_to_product_id']` ID of the option-to-product link being removed

Fires in admin/inc/wp_easycart_admin_products_pro.php · remove_modifier()

`wp_easycart_option_set_copies_merged`
Fires after the option builder merges products’ own copies of an option set back into one saved set.

**Parameters**
`$plan['id']` (int) The option set the copies were merged into.
`$done` (string\[\]) The products whose copy it replaced.

Fires in admin/inc/wp_easycart_admin_option_builder.php · merge()

`wp_easycart_option_set_forked`
Fires when an option set is saved for one product in the option builder and the product gets its own copy of a shared set (or keeps the copy it already owned).

**Parameters**
`$product_id` (int) The product id.
`$fork['option_id']` (int) The copy the product owns.
`$option_id` (int) The store’s set it was copied from.
`$fork['copied']` (bool) False when the product already owned the set.

Fires in admin/inc/wp_easycart_admin_option_builder.php · save_for_product()

`wp_easycart_option_to_product_created`
Fires after an option set is linked to a product: from the product editor’s options, assigning an option set to products, an import, duplicating a product, an AI assistant or the WP EasyCart API.

**Parameters**
`$option_id` (int) The option set id.
`$pid` (int) The product id it was linked to (the new product when duplicating).

Fires in admin/inc/wp_easycart_admin_option_editor_v2.php · ecv2_option_assign() +9 more places

`wp_easycart_option_to_product_deleted`
Fires after an option set is unlinked from a product in the admin.

**Parameters**
`$option_to_product_id` ID of the option-to-product link that was deleted (int)

Fires in admin/inc/wp_easycart_admin_products.php · delete_advanced_option()

`wp_easycart_optionitem_created`
Fires after an option item (choice) is created: saving or duplicating an option set in the admin, adding a choice in the product editor, an AI assistant or the WP EasyCart API.

**Parameters**
`$new_optionitem_id` ID of the new option item
`$option_id` ID of the option set it belongs to

Fires in admin/inc/wp_easycart_admin_option.php · duplicate_optionitem() +6 more places

`wp_easycart_optionitem_deleted`
Fires after an option item is deleted, in the admin (once per item for bulk deletes) or when a choice is removed through the option set writer (product editor, WP EasyCart API).

**Parameters**
`$optionitem_id` ID of the deleted option item
`$option_id` ID of the option set it belonged to

Fires in admin/inc/wp_easycart_admin_option.php · delete_optionitem() +2 more places

`wp_easycart_optionitem_deleting`
Fires just before an option item is deleted in the admin, once per item for bulk deletes.

**Parameters**
`$optionitem_id` ID of the option item about to be deleted
`$option_id` ID of the option set it belongs to

Fires in admin/inc/wp_easycart_admin_option.php · delete_optionitem() +1 more place

`wp_easycart_optionset_created`
Fires after an option set is created: new or duplicated in the admin, made for one product in the product editor (including a product’s own copy of a shared set), or through the WP EasyCart API.

**Parameters**
`$option_id` ID of the new option set (when duplicating, the code passes the ID of the last duplicated option item)

Fires in admin/inc/wp_easycart_admin_option.php · insert_option() +7 more places

`wp_easycart_optionset_deleted`
Fires after an option set is deleted through the safe delete process, once the set and its items are removed.

**Parameters**
`$option_id` ID of the deleted option set

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_option()

`wp_easycart_optionset_deleting`
Fires during safe deletion of an option set, after products are updated and before the set and its items are removed.

**Parameters**
`$option_id` ID of the option set about to be deleted

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_option()

`wp_easycart_optionset_updated`
Fires after an option set or one of its choices is saved: in the admin option editor, the product editor, an assignment to products, an AI assistant (and its Undo) or the WP EasyCart API.

**Parameters**
`$option_id` ID of the option set that changed

Fires in admin/inc/wp_easycart_admin_option_editor_v2.php · ecv2_option_assign() +12 more places

`wp_easycart_prior_price_set`
Fires after the merchant enters a product’s lowest price before a reduction.

**Parameters**
`$product_id` (int) The product id.
`$price` (float) The price entered.
`$start` (int) When the reduction began.

Fires in inc/classes/core/class-wp-easycart-price-history.php · set_prior()

`wp_easycart_pro_variants_saved` PRO
Fires after a batch of edits from the product editor’s variant table is saved.

**Parameters**
`$product_id` (int) The product id.
`$out` (array) The result: rows, cells, missing, locked, invalid and stock.
`$changes` (array) What was posted, variant id => fields.

Fires in admin/inc/wp_easycart_admin_product_variants_pro.php · save()

`wp_easycart_product_builder_created`
Fires after a product is created on the Add product page (or by an AI assistant through the same builder), before the page moves on to the product.

**Parameters**
`$product_id` (int) The new product id.
`$kind` (array) The product kind it was made as.
`$in` (array) What the page sent.

Fires in admin/inc/wp_easycart_admin_product_builder.php · create()

`wp_easycart_product_details_advanced_option_set_after`
Fires on the product details page after an advanced option set is displayed.

**Parameters**
`$optionset` Advanced option set object.
`$optionitems` Option items in that set.
`$this->product` The product being displayed.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wp_easycart_product_details_advanced_option_set_before`
Fires on the product details page before an advanced option set is displayed.

**Parameters**
`$optionset` Advanced option set object.
`$optionitems` Option items in that set.
`$this->product` The product being displayed.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wp_easycart_product_details_after_description`
Fires on the product details page after the product title area and short description block.

**Parameters**
`$this->product->product_id` Product id.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wp_easycart_product_details_after_description_below`
Fires on the product details page after the short description that is shown below the add to cart area.

**Parameters**
`$this->product->product_id` Product id.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wp_easycart_product_details_after_left_content_area`
Fires on the product details page after the left column holding the product images.

**Parameters**
`$product_id` Product id.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php +1 more place

`wp_easycart_product_details_after_title`
Fires on the product details page directly after the product title.

**Parameters**
`$product_id` Product id.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wp_easycart_product_details_after_title_divider`
Fires on the product details page directly after the divider line under the product title.

**Parameters**
`$product_id` Product id.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wp_easycart_product_details_before`
Fires when a product page sends its view events, once per product per request, in both the standard and Elementor layouts. An Elementor Product Tracking widget on the page can switch it off for its product.

**Parameters**
`$product` The product being displayed.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php +2 more places

`wp_easycart_product_details_end`
Fires at the end of the product details output, in both the standard and Elementor layouts.

**Parameters**
`$product` The product being displayed.

Fires in admin/elementor/modules/templates/class-wp-easycart-elementor-templates.php · render_product() +1 more place

`wp_easycart_product_details_image_holder_post`
Fires on the product details page right after the main product image, inside the image holder.

**Parameters**
`$product` The product being displayed.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php +1 more place

`wp_easycart_product_details_image_holder_pre`
Fires on the product details page before the main product image, inside the image holder.

**Parameters**
`$product` The product being displayed.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php +1 more place

`wp_easycart_product_details_post_add_to_cart`
Fires on the product details page after the add to cart controls, before the form closes.

**Parameters**
`$product_id` Product id.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wp_easycart_product_details_pre_add_to_cart`
Fires on the product details page and the add to cart shortcode just before the add to cart controls and their quantity error messages.

**Parameters**
`$product_id` Product id.

Fires in design/layout/base-responsive-v3/ec_add_to_cart_shortcode.php +2 more places

`wp_easycart_product_details_thumbnail_item`
Fires after each product image thumbnail is output in the product details gallery.

**Parameters**
`$product_image_id` Image slot name, such as image1 or image2.
`$this->product->product_id` Product id.
`$wpeasycart_addtocart_shortcode_rand` Number identifying this product block on the page.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php +39 more places

`wp_easycart_product_details_thumbnail_items_simple`
Fires in the product details gallery after the basic set of thumbnails is printed.

**Parameters**
`$this->product` The product being displayed.
`$wpeasycart_addtocart_shortcode_rand` Number identifying this product block on the page.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php +6 more places

`wp_easycart_product_image_holder_post`
Fires in a product listing item and the featured product layout right after the product image holder.

**Parameters**
`$product` The product object.

Fires in design/layout/base-responsive-v3/ec_product.php +1 more place

`wp_easycart_product_image_holder_pre`
Fires in a product listing item and the featured product layout at the start of the product image holder, before the product image link.

**Parameters**
`$product` The product object.

Fires in design/layout/base-responsive-v3/ec_product.php +1 more place

`wp_easycart_product_search_ai_saved`
Fires after a product’s Search AI attributes are saved in the admin.

**Parameters**
`$product_id` Product id.
`$attributes` The saved attribute values.

Fires in admin/inc/wp_easycart_admin_search_ai.php · ajax_save_product()

`wp_easycart_product_updated` PRO
Fires after a product is changed in the admin, for example by a stock quantity edit, tracking change or manufacturer assignment.

**Parameters**
`$product_id` Product id.

Fires in admin/inc/wp_easycart_admin_inventory.php · ajax_set_qty() +8 more places

`wp_easycart_product_yoast_seo_saved`
Fires after a product’s Yoast SEO fields are saved from the product details screen.

**Parameters**
`$product_id` Product id.
`$post_id` Id of the WordPress post linked to the product.
`$values` Submitted SEO values.

Fires in admin/inc/wp_easycart_admin_products.php · ec_admin_ajax_save_product_details_yoast_seo()

`wp_easycart_tabs_builtin_hidden` Tabs
Fires after a product’s Description or Specifications tab is hidden, or shown again, from the tab designer or the product’s Tabs card. Only the tab is hidden; the text stays on the product. It does not fire when the state did not change.

**Parameters**
`$product_id` (int) The product id.
`$builtin` (string) Which tab: description or specifications.
`$hidden` (bool) True when the tab is now hidden, false when it shows again.

Fires in includes/class-wp-easycart-tabs.php · set_builtin_hidden()

`wp_easycart_tabs_repeats_merged` Tabs
Fires when a Repeated tabs merge (Extensions › Tabs › Repeated tabs) finishes, after the copies of a tab typed or copied onto many products have been turned into one shared tab.

**Parameters**
`(int) $job['shared_id']` (int) The shared tab the copies became, or 0 when none was left because no product still had that version.
`$summary` (array) The finished job: mode, title, total, done, merged, removed, hidden, kept, skipped, message and more.

Fires in includes/class-wp-easycart-tabs-repeats.php · finish()

`wp_easycart_tabs_repeats_stopped` Tabs
Fires when a Repeated tabs merge ends before it finishes, because it was stopped or because the shared tab cannot list more products. Products already done keep the shared tab; the rest keep their own copy.

**Parameters**
`(int) $job['shared_id']` (int) The shared tab, or 0 when it was removed because no product used it yet.
`$summary` (array) The job as it stopped: mode, title, total, done, merged, removed, hidden, kept, skipped, message and more.

Fires in includes/class-wp-easycart-tabs-repeats.php · cancel() +1 more place

`wp_easycart_tabs_saved` Tabs
Fires after a product’s tab is saved in the Tabs extension.

**Parameters**
`$product_id` Product id.
`$tab_id` Tab id.

Fires in includes/class-wp-easycart-tabs.php · save_tab()

`wp_easycart_tabs_shared_saved` Tabs
Fires after a shared tab is saved in the Tabs extension.

**Parameters**
`$id` Shared tab id.

Fires in includes/class-wp-easycart-tabs-repeats.php · finish() +2 more places

`wp_easycart_updated_optionitem_quantity_value` PRO
Fires after the stock quantity of an option item combination is updated, including when a restock adjusts it.

**Parameters**
`$quantity` New quantity.
`$product_id` Product id.
`$optionitem_id_1` Option item 1 id.
`$optionitem_id_2` Option item 2 id.
`$optionitem_id_3` Option item 3 id.
`$optionitem_id_4` Option item 4 id.
`$optionitem_id_5` Option item 5 id.

Fires in inc/classes/core/ec_db.php · update_quantity_value() +1 more place

`wp_easycart_updated_product_stock` PRO
Fires after a product’s stock quantity is updated, including when an order restock adjusts it.

**Parameters**
`$product_id` Product id.
`$quantity` Stock quantity or the amount removed.

Fires in inc/classes/core/ec_db.php · update_product_stock() +1 more place

`wp_easycart_variants_rebuilt`
Fires after a product’s variants are rebuilt.

**Parameters**
`$product_id` Product id.
`self::$last` Summary of the rebuild: counts and row ids kept, moved, deleted and added.

Fires in inc/classes/core/class-wp-easycart-variants.php · rebuild()

`wp_easycart_view_product_list`
Fires when a product list is displayed to a shopper, so tracking code can record the list view.

**Parameters**
`$list` Product list object.
`$category_list` Category list (null in the Elementor archive).
`$menu_id` Menu id.
`$submenu_id` Submenu id.
`$subsubmenu_id` Sub-submenu id.
`$manufacturer_id` Manufacturer id or a placeholder.
`$group_id` Category id or a placeholder.
`$atts` Shortcode or widget settings.

Fires in admin/elementor/modules/shop/widgets/class-wp-easycart-elementor-shop-archive-widget.php · ec_track() +1 more place

`wpeasycart_addon_product_details_tab`
Fires where extensions add their own tab heading to the product details tabs.

**Parameters**
`$product_id` Product id.
`$rand` Number identifying this product block on the page.

Fires in wpeasycart.php · wp_easycart_product_tabs_capture_gaps() +3 more places

`wpeasycart_addon_product_details_tab_content`
Fires where extensions add the content panel for their own product details tab.

**Parameters**
`$product_id` Product id.
`$rand` Number identifying this product block on the page.

Fires in wpeasycart.php · wp_easycart_product_tabs_area() +3 more places

`wpeasycart_admin_product_details_general_saved`
Fires after a product’s general options are saved from the product details screen.

**Parameters**
`$product_id` Product id.

Fires in admin/inc/wp_easycart_admin_products.php · save_product_details_general_options()

`wpeasycart_admin_product_inserted`
Fires after a product is created: Quick add, the Add product page or the first Save in the product editor, an import or catalog sync, an AI assistant, or the WP EasyCart API.

**Parameters**
`$product_id` Product id.
`$model_number` Model number (SKU) of the new product.

Fires in admin/inc/wp_easycart_admin_products.php · save_new_quick_product() +3 more places

`wpeasycart_inquiry_sent`
Fires after a product inquiry form has been sent, before the shopper is redirected back to the product page.

**Parameters**
`$product` Product row; model_number is the chosen variant’s SKU when it has one
`$filter_options` The inquiry: name, email, message and options

Fires in inc/classes/cart/ec_cartpage.php · process_send_inquiry()

`wpeasycart_inventory_stock_changed` PRO
Fires after a product or variant stock quantity is changed (the admin, an AI assistant, the WP EasyCart API), so inventory logs and outside systems can record it.

**Parameters**
`$change (array)` Details of the change: product_id, optionitemquantity_id, old_quantity, new_quantity, delta, reason, source, note and user_id

Fires in admin/inc/wp_easycart_admin_products.php · save_product_details_quantities() +6 more places

`wpeasycart_post_sync_event`
Fires when the product and category post sync records an event in its log, such as a failed insert, a blocked delete or a repaired link.

**Parameters**
`$event` event key, such as insert_failed, update_failed, link_broken, link_repaired or delete_blocked
`$type` kind of store item being synced
`$entity_id` id of the store item
`$post_id` linked WordPress post id (0 if none)
`$detail` short text detail for the event

Fires in inc/classes/core/class-wp-easycart-post-sync.php · log()

`wpeasycart_pricepoints_updated`
Fires after the store’s price point filter list is saved in the admin.

No parameters.

Fires in admin/inc/wp_easycart_admin_pricepoint_v2.php · save()

`wpeasycart_product_activated`
Fires after a product is activated in the store, singly or in bulk.

**Parameters**
`$product_id` product id

Fires in admin/inc/wp_easycart_admin_product_table.php · ecv2_product_inline_update() +6 more places

`wpeasycart_product_added` PRO
Fires after a new product is created: Quick add, the Add product page or the first Save in the product editor, an import, an extension’s catalog sync, an AI assistant, the mobile app or the WP EasyCart API.

**Parameters**
`$product_id` id of the new product
`$model_number` the product’s model number (SKU)

Fires in admin/inc/wp_easycart_admin_products.php · save_new_quick_product() +6 more places

`wpeasycart_product_deactivated`
Fires after a product is deactivated in the store, singly or in bulk.

**Parameters**
`$product_id` product id

Fires in admin/inc/wp_easycart_admin_product_table.php · ecv2_product_inline_update() +6 more places

`wpeasycart_product_deleted` PRO
Fires after a product and its related rows are deleted: in the admin, singly or in bulk, when an import is undone, or through the WP EasyCart API.

**Parameters**
`$product_id` id of the deleted product

Fires in admin/inc/wp_easycart_admin_product_table.php · ecv2_product_bulk_delete() +5 more places

`wpeasycart_product_deleting`
Fires just before a product is deleted: in the admin, singly or in bulk, when an import is undone, or through the WP EasyCart API.

**Parameters**
`$product_id` id of the product about to be deleted

Fires in admin/inc/wp_easycart_admin_product_table.php · ecv2_product_bulk_delete() +3 more places

`wpeasycart_product_duplicated` PRO
Fires after a product is duplicated, so extensions can copy their own data to the new product.

**Parameters**
`(int) $newid` id of the new product (the copy)
`(int) $product_id` id of the product it was copied from

Fires in admin/inc/wp_easycart_admin_products.php · duplicate_product() +1 more place

`wpeasycart_product_restored`
Fires after a deleted product is restored from the admin undo snapshot.

**Parameters**
`$product_id` id of the restored product

Fires in admin/inc/wp_easycart_admin_products.php · restore_products()

`wpeasycart_product_updated` PRO Tabs
Fires after a product is changed: saved in the product editor, edited in the products list (inline, bulk or prices), added to or removed from a store menu, given a weight on the Shipping settings page, saved by an import, catalog sync, AI assistant or the WP EasyCart API, by the Tabs extension, or by the mobile app.

**Parameters**
`$product_id` product id
`$p->model_number` the product’s model number

Fires in admin/inc/wp_easycart_admin_menu_editor_v2.php · ecv2_menu_add_product() +14 more places

### Categories, menus and manufacturers

Grouped by what they are about

`wp_easycart_admin_category_editor_v2_cards`
Fires in the admin category editor after the built-in cards, before the Danger card, so extensions can add their own cards.

**Parameters**
`$c` Category row (ec_category object)

Fires in admin/template/products/categories/category-editor-v2.php

`wp_easycart_catalog_yoast_seo_saved`
Fires after Yoast SEO values for a catalog item are saved from the admin catalog screen, before the AJAX response is sent.

**Parameters**
`$type` The catalog record type, taken from the request.
`$id` ID of the catalog record.
`$post_id` ID of the WordPress post that stores the Yoast meta.
`$values` Array of Yoast meta keys and the values that were written.

Fires in admin/inc/wp_easycart_admin_catalog_v2.php · ecv2_catalog_save_yoast()

`wp_easycart_category_view`
Fires before the category view of the store is printed, or before featured categories are shown on the first page of a product list.

**Parameters**
`$this->group_id` The product group ID being viewed.
`$this->category_list` The category list object.
`$this->product_list` The product list object.

Fires in inc/classes/store/ec_storepage.php · display_category_view() +1 more place

`wp_easycart_smart_category_synced` PRO
Fires after a smart category’s product membership is synced.

**Parameters**
`(int) $category_id` Category id.
`(int) $added` Number of products added.
`(int) $removed` Number of products removed.

Fires in inc/classes/core/ec_smart_categories.php · after_change()

`wpeasycart_category_activated`
Fires after a category is activated in the admin, singly or in bulk.

**Parameters**
`$category_id (int)` ID of the activated category

Fires in admin/inc/wp_easycart_admin_category.php · deactivate_category() +1 more place

`wpeasycart_category_added` PRO
Fires after a new category is created, in the admin (added directly or by duplicating a category) or through the WP EasyCart API.

**Parameters**
`$category_id` ID of the new category (the new copy when duplicated)

Fires in admin/inc/wp_easycart_admin_category.php · duplicate_category() +4 more places

`wpeasycart_category_created_inline`
Fires after a category is created (or found existing) from the product details screen and assigned to the product.

**Parameters**
`$category_id` ID of the category
`$product_id` ID of the product it was assigned to
`$existed` Whether the category already existed

Fires in admin/inc/wp_easycart_admin_products.php · ec_admin_ajax_product_details_create_category()

`wpeasycart_category_deactivated`
Fires after a category is deactivated in the admin, singly or in bulk.

**Parameters**
`$category_id (int)` ID of the deactivated category

Fires in admin/inc/wp_easycart_admin_category.php · deactivate_category() +1 more place

`wpeasycart_category_deleted` PRO
Fires after a category is deleted, from the admin safe-delete tool or the mobile app API.

**Parameters**
`$category_id` ID of the deleted category

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_category() +1 more place

`wpeasycart_category_deleting`
Fires during a safe delete of a category, just before the category is removed and its children are re-parented or deleted.

**Parameters**
`$category_id` ID of the category being deleted

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_category()

`wpeasycart_category_item_added` PRO
Fires after a product is added to a category through the mobile app API.

**Parameters**
`$productid` ID of the product
`$categoryid` ID of the category

Fires in inc/amfphp/Amfphp/Services/ec_admin_categories.php · addcategoryitem()

`wpeasycart_category_item_deleted` PRO
Fires after a single category item link is deleted through the mobile app API.

**Parameters**
`$categoryitemid` ID of the deleted category item (ec_categoryitem row)

Fires in inc/amfphp/Amfphp/Services/ec_admin_categories.php · deleteindividualcategoryitem()

`wpeasycart_category_items_deleted` PRO
Fires after a product is removed from a category through the mobile app API.

**Parameters**
`$productid` ID of the product
`$categoryid` ID of the category

Fires in inc/amfphp/Amfphp/Services/ec_admin_categories.php · deletecategoryitem()

`wpeasycart_category_updated` PRO
Fires after a category is updated, in the admin (including when it is bulk set as featured) or through the WP EasyCart API.

**Parameters**
`$category_id` ID of the updated category

Fires in admin/inc/wp_easycart_admin_category.php · update_category() +14 more places

`wpeasycart_manufacturer_added`
Fires after a manufacturer is created: in the admin, by a new manufacturer name saved with a product, or through the WP EasyCart API.

**Parameters**
`$manufacturer_id` ID of the new manufacturer

Fires in admin/inc/wp_easycart_admin_manufacturer_table.php · ecv2_manufacturer_insert() +3 more places

`wpeasycart_manufacturer_deleted`
Fires after a manufacturer is deleted through the admin safe-delete tool.

**Parameters**
`$id` ID of the deleted manufacturer

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_manufacturer()

`wpeasycart_manufacturer_deleting`
Fires during a safe delete of a manufacturer, just before its products are reassigned and the manufacturer is removed.

**Parameters**
`$id` ID of the manufacturer being deleted

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_manufacturer()

`wpeasycart_manufacturer_updated`
Fires after a manufacturer is updated, in the admin (an inline name edit or a full save) or through the WP EasyCart API.

**Parameters**
`$id` ID of the updated manufacturer

Fires in admin/inc/wp_easycart_admin_manufacturer_table.php · ecv2_manufacturer_inline_update() +2 more places

`wpeasycart_menu_added`
Fires after a new menu item is created in the admin.

**Parameters**
`$id` ID of the new menu item
`$level` Menu level of the item (1, 2 or 3)

Fires in admin/inc/wp_easycart_admin_menu_table.php · ecv2_menu_create()

`wpeasycart_menu_deleted`
Fires after a menu item is deleted through the admin safe-delete tool.

**Parameters**
`$id` ID of the deleted menu item
`$level` Menu level of the item

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_menu()

`wpeasycart_menu_deleting`
Fires during a safe delete of a menu item, before its children and product paths are moved or removed.

**Parameters**
`$id` ID of the menu item being deleted
`$level` Menu level of the item

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_menu()

`wpeasycart_menu_relocated`
Fires after a menu item is moved to a new parent or level and its old rows have been deleted.

**Parameters**
`$map (array)` Map of old ‘level:id’ keys to the new level and ID of each moved item
`$level` Original menu level of the moved item
`$id` Original ID of the moved item

Fires in admin/inc/wp_easycart_admin_menu_table.php · ecv2_menu_relocate()

`wpeasycart_menu_updated`
Fires after a menu item is saved or moved in the admin.

**Parameters**
`$id` ID of the menu item
`$level` Menu level of the item

Fires in admin/inc/wp_easycart_admin_menu_editor_v2.php · ecv2_menu_save() +1 more place

`wpeasycart_product_to_category_added`
Fires after a product is added to a category in bulk from the admin.

**Parameters**
`$category_id` category id
`(int) $bulk_id` product id

Fires in admin/inc/wp_easycart_admin_category.php · bulk_add_category_product() +1 more place

`wpeasycart_product_to_category_deleted`
Fires just before a product is removed from a category in the admin, singly or in bulk.

**Parameters**
`$category_id` category id
`$product_id` product id

Fires in admin/inc/wp_easycart_admin_category.php · delete_category_product() +1 more place

### Orders

Grouped by what they are about

`wp_easycart_admin_ecv2_order_render_modals`
Fires after the admin order table’s built-in modals are printed, so extra order modals can be rendered.

**Parameters**
`$this->table_id` Id of the order table

Fires in admin/inc/wp_easycart_admin_order_table.php · print_custom_modals()

`wp_easycart_admin_order_created` PRO
Fires after an order is created with WP EasyCart PRO’s order builder: New order in the admin, an AI assistant, or an order made through the WP EasyCart API.

**Parameters**
`$order_id` Id of the new order
`$mode` How it was created: draft, awaiting or send

Fires in inc/classes/core/wp_easycart_order_builder_pro.php · create()

`wp_easycart_admin_order_date_updated`
Fires after an order’s date is changed from the admin order screen.

**Parameters**
`$order_id` Order id
`$storage_ts` New order date as a Unix timestamp in the storage timezone

Fires in admin/inc/wp_easycart_admin.php · wp_easycart_ecv2_save_order_date()

`wp_easycart_admin_order_details_after_customer_notes`
Fires on the admin order details screen after the customer notes, where the checkout fields card is shown.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_address1`
Fires on the admin order details screen after the billing address line 1.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_address2`
Fires on the admin order details screen after the billing address line 2.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_city`
Fires on the admin order details screen after the billing city, state and zip line.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_company_name`
Fires on the admin order details screen after the billing company name.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_country_name`
Fires on the admin order details screen after the billing country.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_name`
Fires on the admin order details screen after the billing name.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_phone`
Fires on the admin order details screen after the billing phone.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_after_title`
Fires on the admin order details screen at the start of the billing address block, after the title.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_billing_content_end`
Fires at the end of the billing address block on the admin order details screen, before the billing edit form is included.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_button_row_post`
Fires on the admin order details screen after the button-row-pre action, so plugins can output buttons that appear in the items More menu.

**Parameters**
`$this->order->order_id` Order id

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_button_row_pre`
Fires on the admin order details screen before the button-row-post action, so plugins can output buttons that appear in the items More menu.

**Parameters**
`$this->order->order_id` Order id

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_item`
Fires in each order line item on the admin order details screen after the subscription details, so extra item information can be printed.

**Parameters**
`$line_item` Order line item row

Fires in admin/template/orders/orders/order-item.php

`wp_easycart_admin_order_details_items_end`
Fires after the last line item on the admin order details screen.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_left_content_end`
Fires inside the order history wrapper on the admin order details screen, where activity entries are listed.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_line_item_end`
Fires at the end of each line item on the admin order details screen, near the edit and delete line buttons.

**Parameters**
`$line_item` Order line item row

Fires in admin/template/orders/orders/order-item.php

`wp_easycart_admin_order_details_shipping_after_address1`
Fires on the admin order details screen after the shipping address line 1.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_after_address2`
Fires on the admin order details screen after the shipping address line 2.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_after_city`
Fires on the admin order details screen after the shipping city, state and zip line.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_after_company_name`
Fires on the admin order details screen after the shipping company name.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_after_country_name`
Fires on the admin order details screen after the shipping country.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_after_name`
Fires on the admin order details screen after the shipping name.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_after_phone`
Fires on the admin order details screen after the shipping phone.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_after_title`
Fires on the admin order details screen at the start of the shipping address block, after the title.

**Parameters**
`$this->order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_shipping_content_end`
Fires at the end of the shipping address block on the admin order details screen, before the shipping edit form is included.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_details_totals_content_end`
Fires at the end of the totals card on the admin order details screen.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_fields_card_actions`
Fires in the header of the Checkout fields card on the admin order details screen so action buttons can be added.

**Parameters**
`$order` Order object
`$rows` Checkout field answers shown on the card (array)

Fires in inc/classes/core/class-wp-easycart-order-fields.php · admin_card()

`wp_easycart_admin_order_fields_card_end`
Fires at the end of the Checkout fields card on the admin order details screen.

**Parameters**
`$order` Order object
`$rows` Checkout field answers shown on the card (array)

Fires in inc/classes/core/class-wp-easycart-order-fields.php · admin_card()

`wp_easycart_admin_order_line_added` PRO
Fires after a line item is added to an existing order from the admin order screen.

**Parameters**
`$order_id` Order id
`$orderdetail_id` Id of the new order line

Fires in admin/inc/wp_easycart_admin_details_orders_pro_v2.php · ajax_order_add_line_full()

`wp_easycart_admin_order_list_cell_{col}`
Fires to print a custom column cell in the admin order list; {col} is the column format. Fires only for non-built-in columns.

**Parameters**
`$result` Order row
`$col` Column definition (array)

Fires in admin/inc/wp_easycart_admin_order_table.php · print_cell_content()

`wp_easycart_admin_order_source_card`
Fires in the Source card on the admin order screen, letting an extension print its own order source card.

**Parameters**
`$row` Order source row from order_row()
`$order` The order shown on the screen

Fires in inc/classes/core/class-wp-easycart-order-source.php · admin_card()

`wp_easycart_admin_order_status_box_right`
Fires in the order status area on the admin order details screen, next to the status control.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_admin_order_user_changed`
Fires after an order is reassigned to a different customer account in admin.

**Parameters**
`$order_id` Order id
`$user_id` Account id the order belongs to now (0 for a guest checkout)
`$previous_user_id` Account id it belonged to before (0 for a guest checkout)

Fires in admin/inc/wp_easycart_admin_orders.php · ec_admin_ajax_update_order_user() +1 more place

`wp_easycart_admin_orders_details_shipment`
Fires in the shipment fields grid of the ship order drawer on the admin order details screen.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_credit_note_issued` PRO
Fires after a credit note is issued for an invoice because the order was refunded.

**Parameters**
`$record` The ec_invoice row for the new credit note (object).
`$invoice` The invoice the credit note corrects (object).
`$order_id` ID of the order (int).

Fires in inc/classes/core/wp_easycart_invoices_pro.php · refunded()

`wp_easycart_credit_note_pdf_after`
Fires in the credit note PDF after the amounts table and before the closing block, so extra content can be added to the document.

**Parameters**
`$document` The credit note document object being built.

Fires in design/layout/base-responsive-v3/ec_credit_note_pdf.php

`wp_easycart_ecv2_order_details_customer_card`
Fires in the customer card of the admin order details screen, to print extra content such as lifetime stats and quick links, and again when the order’s customer account is changed.

**Parameters**
`$order` The order object being displayed

Fires in admin/inc/wp_easycart_admin_orders.php · ec_admin_ajax_update_order_user() +1 more place

`wp_easycart_ecv2_order_details_fulfillment_banner`
Fires while building the ‘next step’ fulfillment banner on the admin order details screen; output is captured and added to the banner.

**Parameters**
`$order` The order object
`$state` The order’s current fulfillment state

Fires in admin/inc/wp_easycart_admin_order_screen.php · next_panel_html()

`wp_easycart_ecv2_order_details_header_chips`
Fires in the header of the admin order details screen to print extra chips such as tags and insights, and again when the order’s customer account is changed.

**Parameters**
`$order` The order object being displayed

Fires in admin/inc/wp_easycart_admin_orders.php · ec_admin_ajax_update_order_user() +1 more place

`wp_easycart_ecv2_order_details_header_menu`
Fires at the end of the header actions menu on the admin order details screen, so extensions can add menu items.

**Parameters**
`$order` The order object being displayed

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_details_main_top`
Fires at the top of the main column of the admin order details screen, before the items and shipping card.

**Parameters**
`$order` The order object being displayed

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_details_modals`
Fires at the end of the admin order details screen so extensions can print their modal dialogs, such as tags, refund, fulfill and pickup.

**Parameters**
`$order` The order object being displayed

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_details_packages`
Fires in the items and shipping card of the admin order details screen to print the order’s packages, labels and tracking.

**Parameters**
`$order` Order row
`$fulfillment_state` Fulfillment state (string): fulfilled, partial, pickup, unfulfilled, digital or none

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_details_payment_meta`
Fires inside the coupon and gift card codes section of the payment drawer on the admin order details screen, so extensions can add payment meta fields.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_details_payment_panel`
Fires inside the payment method block of the admin order details screen so an extension can print its own payment panel in place of the default method line.

**Parameters**
`$order` The order object being displayed

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_details_print_menu`
Fires at the end of the print menu on the admin order details screen so extensions can add print or document links.

**Parameters**
`$order` Order row

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_details_timeline_pre`
Fires at the top of the Activity card body on the admin order details screen, before the order history list.

**Parameters**
`$order` The order object being displayed

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_ecv2_order_duplicate_fields`
Fires in the duplicate order slide-out in the admin, after the keep options section, so extensions can add fields.

No parameters.

Fires in admin/template/orders/orders/order-duplicate-slideout.php

`wp_easycart_ecv2_order_duplicated`
Fires after an order is duplicated from the admin, once the new order is created and its status logged.

**Parameters**
`$new_order_id` ID of the newly created order
`$order_id` ID of the original order that was duplicated
`$_POST` The submitted duplicate form data

Fires in admin/inc/wp_easycart_admin_order_table.php · ecv2_order_duplicate_create()

`wp_easycart_ecv2_order_fulfillment_cell_end`
Fires at the end of the fulfillment cell in the admin orders table. Kept for backward compatibility; newer code uses wp_easycart_ecv2_order_row_actions_start.

**Parameters**
`$result` The order row being printed
`$gate` Pro feature gate information for the order table

Fires in admin/inc/wp_easycart_admin_order_table.php · print_fulfillment_cell()

`wp_easycart_ecv2_order_quick_edit_fields`
Fires in the order quick edit slide-out in the admin, after the shipping section and before the notify section, so extensions can add fields.

No parameters.

Fires in admin/template/orders/orders/order-quick-edit-slideout.php

`wp_easycart_ecv2_order_quick_edit_saved`
Fires after an order’s quick edit is saved in the admin, once any shipping confirmation email has been sent.

**Parameters**
`$order_id` Order ID
`$status_id` Order status ID
`$expedited` Whether expedited shipping is set
`$method` Shipping method
`$carrier` Shipping carrier
`$tracking` Tracking number
`$email_sent` Whether a shipping email was sent (bool)

Fires in admin/inc/wp_easycart_admin_order_table.php · ecv2_order_quick_edit_save()

`wp_easycart_ecv2_order_row_actions_start`
Fires at the start of each order’s row actions area in the admin orders list (table row and card view), left of the row menu, so extensions can add row tools.

**Parameters**
`$result` The order row being printed
`ecv2_get_order_pro_gate()` Pro feature gate information for the order table

Fires in admin/inc/wp_easycart_admin_order_table.php · print_table_row() +1 more place

`wp_easycart_invoice_issued` PRO
Fires after an invoice record is issued for an order.

**Parameters**
`$record` The ec_invoice row (object)
`$order_id` Order ID (int)
`$source` What triggered the invoice (string): placed, paid, sent or manual

Fires in inc/classes/core/wp_easycart_invoices_pro.php · issue()

`wp_easycart_order_cancelled`
Fires after an order is cancelled.

**Parameters**
`$order_id` Order ID (int)
`$status_id` The order’s status ID now (int)
`$previous` The status ID before the change, 0 when unknown (int)

Fires in inc/classes/core/class-wp-easycart-fulfillment.php · cancelled()

`wp_easycart_order_changed`
Fires after the order writer changes an order, in the admin or through the WP EasyCart API, saying which part changed.

**Parameters**
`$order_id` (int) The order id.
`$what` (string) billing_address, shipping_address, contact, details or lines.

Fires in inc/classes/core/class-wp-easycart-order-writer.php · changed()

`wp_easycart_order_currency_relabelled`
Fires after orders recorded in another currency are relabelled with the store’s currency format.

**Parameters**
`$done` (int) Number of orders changed.
`$format` (array) The store’s currency format.

Fires in inc/classes/core/class-wp-easycart-order-currency.php · relabel_all()

`wp_easycart_order_delivered`
Fires when an order is delivered and moves to the Delivered status: every package it sent arrived, or the store marked it delivered. It fires once per delivery.

**Parameters**
`$order_id` Order ID (int)

Fires in inc/classes/core/class-wp-easycart-shipments.php · announce_delivered()

`wp_easycart_order_deposit_recorded`
Fires after a deposit is recorded on an order that is not fully paid yet, before wpeasycart_order_updated.

**Parameters**
`$order_id` (int) The order id.
`$paid` (float) The deposit amount.
`$args` (array) The same arguments as wp_easycart_order_marked_paid.

Fires in inc/classes/core/class-wp-easycart-order-pay.php · mark_paid()

`wp_easycart_order_detail_inserted`
Fires after an order line item (order detail row) is inserted, including subscription order lines.

**Parameters**
`$orderdetail_id` ID of the new order detail row
`$cart_item` The cart item or line object the row was created from

Fires in inc/classes/core/ec_db.php · insert_order_detail() +1 more place

`wp_easycart_order_details_order_bottom_information`
Fires at the end of the order information card on the admin order details screen, after the placed-from and terms details.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_order_details_order_date`
Fires in the header of the admin order details screen, right after the order date.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_order_details_order_information`
Fires in the customer section of the admin order details screen, before the contact edit form.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_order_details_refund_panel`
Fires at the top of the items and refund card on the admin order details screen, before the line items.

No parameters.

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_order_fulfillment_lines_added`
Fires when an order line is added to an order’s fulfillment tracking.

**Parameters**
`(int) $line->order_id` Order ID
`array( (int) $orderdetail_id )` IDs of the order lines added (array of ints)

Fires in inc/classes/core/class-wp-easycart-fulfillment.php · on_line_added()

`wp_easycart_order_lines_fulfillment_updated`
Fires after the fulfillment status of one or more order lines is updated.

**Parameters**
`(int) $order_id` Order ID
`$ids` Order detail (line) IDs that were updated (array of ints)
`$clean` What changed: fulfillment_status and fulfillment_ref (array)

Fires in inc/classes/core/class-wp-easycart-fulfillment.php · set_lines()

`wp_easycart_order_lines_refunded` PRO
Fires after a refund is processed for an order from the admin, listing the lines refunded, including a refund put back on the gift card the order used.

**Parameters**
`$order_id` (int) The order id.
`$refunded_lines` (array) orderdetail_id => quantity refunded now.
`(float) $refund_amount` (float) The amount refunded now (lines, shipping, tax and fees together), or the amount put back on the gift card.

Fires in admin/inc/wp_easycart_admin_details_orders_pro_v2.php · ajax_process_refund() +1 more place

`wp_easycart_order_made` PRO
Fires after an order is made through the WP EasyCart API with WP EasyCart PRO’s order writer, before the API answers with the order and its payment link.

**Parameters**
`$order_id` (int) The order id.
`$plan` (array) The checked order plan it was made from.

Fires in inc/classes/core/wp_easycart_order_writer_pro.php · create()

`wp_easycart_order_marked_paid`
Fires after an order is marked as paid, such as from the admin.

**Parameters**
`$order_id` Order ID (int)
`$args` Array with source, source_label, status, reference, amount, payment, date, receipt and balance (true for a payment toward the balance of an already paid order)

Fires in inc/classes/core/class-wp-easycart-order-pay.php · mark_paid()

`wp_easycart_order_ready_to_fulfill`
Fires once per order when it is paid and released to its fulfillment partners.

**Parameters**
`$order_id` Order ID (int)

Fires in inc/classes/core/class-wp-easycart-fulfillment.php · release()

`wp_easycart_order_receipt_resent`
Fires after a receipt email is resent for an order from the admin.

**Parameters**
`$order_id` Order ID

Fires in admin/inc/wp_easycart_admin_orders.php · ecv2_order_resend_receipt() +1 more place

`wp_easycart_order_stock_returned`
Fires after a cancelled order’s stock is put back: every line that took stock, less any units a refund already restocked. Happens only when the order had not shipped and Put stock back when an order is cancelled is on.

**Parameters**
`$order_id` (int) The order id.
`$returned` (int) Total units put back.

Fires in inc/classes/core/class-wp-easycart-order-returns.php · return_stock()

`wp_easycart_order_stock_taken`
Fires after an order’s lines that had not yet adjusted stock have their stock taken, whichever path asked (paid, approved, a pay link, Mark as paid, reopened after a cancel, or Take stock now on the order screen). It is the counterpart of wp_easycart_order_stock_returned.

**Parameters**
`$order_id` (int) The order id.
`$units` (int) Units taken (0 when a refund had already put every unit back).

Fires in inc/classes/core/class-wp-easycart-order-pay.php · take_stock()

`wp_easycart_order_transaction_recorded`
Fires after a payment or refund transaction is written to an order’s ledger.

**Parameters**
`(int) $order_id` Order ID
`(string) $type` Transaction type: payment or refund
`round( (float) $row['amount'], 2 )` Amount (negative for an adjustment)
`$row` Array with source, gateway, reference, reason and details

Fires in inc/classes/core/class-wp-easycart-order-ledger.php · write_if_unchanged()

`wp_easycart_order_withdrawal_handled`
Fires when staff click Mark as handled on an order’s EU withdrawal statement on the order screen.

**Parameters**
`(int) $record->order_id` (int) The order id.
`$statement` (array) The statement: withdrawal_id, order_id, order_ref, name, email, reason, note, whole, lines (orderdetail_id => units), source, status, submitted_at (UTC), in_time and deadline_at.

Fires in inc/classes/core/class-wp-easycart-withdrawals.php · mark_handled()

`wp_easycart_order_withdrawal_requested`
Fires after a customer’s EU withdrawal statement is saved on an order, from the withdrawal form or when staff click Attach on a statement that matched no order. Nothing on the order’s status, stock or money has changed; the store decides what to do.

**Parameters**
`(int) $order->order_id` (int) The order id.
`$request` (array) The statement: withdrawal_id, order_id, order_ref, name, email, reason, note, whole (bool), lines (orderdetail_id => units), source (account, link, page or admin), status, submitted_at (UTC), in_time (1 or 0) and deadline_at (UTC, or empty).

Fires in inc/classes/core/class-wp-easycart-withdrawals.php · submit() +1 more place

`wp_easycart_packing_slip_line_item`
Fires for each line item on the printable packing slip, after the item’s option and gift card details and before its quantity and prices.

**Parameters**
`$ec_ps_line` Order line item object.
`$document` The packing slip document being built.

Fires in design/layout/base-responsive-v3/ec_admin_packaging_slip.php

`wp_easycart_print_receipt_optionitems`
Fires for each line item on the printable receipt and the invoice PDF, after the item’s option and subscription details and before offer savings and prices.

**Parameters**
`$ec_pr_item` Order line item object (named $ec_in_item in the invoice PDF).

Fires in design/layout/base-responsive-v3/ec_account_print_receipt.php +1 more place

`wp_easycart_withdrawal_attached`
Fires after an EU withdrawal statement that matched no order is put on the order the store says it was for (in the admin or through the WP EasyCart API), just before wp_easycart_order_withdrawal_requested.

**Parameters**
`$withdrawal_id` (int) The statement id.
`$order_id` (int) The order id.
`$request` (array) The statement as described for hooks.

Fires in inc/classes/core/class-wp-easycart-withdrawals.php · attach()

`wp_easycart_withdrawal_dismissed`
Fires after an EU withdrawal statement that matched no order is dismissed (spam, or one the store handled by email).

**Parameters**
`$withdrawal_id` (int) The statement id.
`$request` (array) The statement as described for hooks.

Fires in inc/classes/core/class-wp-easycart-withdrawals.php · dismiss()

`wp_easycart_withdrawal_unmatched`
Fires after a withdrawal statement is saved whose typed order number and email match no order. It is kept with order id 0 so the store can attach it to the right order or dismiss it under Settings › Checkout › Withdrawal button (EU).

**Parameters**
`$request` (array) The statement, with the same keys as wp_easycart_order_withdrawal_requested; order_id is 0 and order_ref is the number as typed.

Fires in inc/classes/core/class-wp-easycart-withdrawals.php · submit()

`wpeasycart_account_order_details_right_top`
Fires at the top of the right column of the account order details page.

**Parameters**
`$this->order->order_id` Order id.
`$this->order` Order object.

Fires in design/layout/base-responsive-v3/ec_account_order_details.php

`wpeasycart_admin_order_billing_update` PRO
Fires when an admin updates an order’s billing address, before the change is saved.

**Parameters**
`$order_id` Order id.
`$billing_first_name` First name.
`$billing_last_name` Last name.
`$billing_company_name` Company.
`$billing_address_line_1` Address line 1.
`$billing_address_line_2` Address line 2.
`$billing_city` City.
`$billing_state` State.
`$billing_country` Country.
`$billing_zip` Postal code.
`$billing_phone` Phone.

Fires in admin/inc/wp_easycart_admin_orders_pro.php · update_billing_address()

`wpeasycart_admin_order_customer_notes_update`
Fires when an admin updates an order’s customer notes, before the change is saved.

**Parameters**
`$order_id` Order id.
`$order_customer_notes` New customer notes text.

Fires in admin/inc/wp_easycart_admin_orders.php · update_notes()

`wpeasycart_admin_order_shipping_update` PRO
Fires when an admin updates an order’s shipping address, before the change is saved.

**Parameters**
`$order_id` Order id.
`$shipping_first_name` First name.
`$shipping_last_name` Last name.
`$shipping_company_name` Company.
`$shipping_address_line_1` Address line 1.
`$shipping_address_line_2` Address line 2.
`$shipping_city` City.
`$shipping_state` State.
`$shipping_country` Country.
`$shipping_zip` Postal code.
`$shipping_phone` Phone.

Fires in admin/inc/wp_easycart_admin_orders_pro.php · update_shipping_address()

`wpeasycart_admin_order_{type}_update`
Fires when an order’s address is changed, on the admin order screen or through the WP EasyCart API. {type} is the address type, billing or shipping.

**Parameters**
`$order_id` Order id.
`$values['first_name']` First name.
`$values['last_name']` Last name.
`$values['company_name']` Company.
`$values['address_line_1']` Address line 1.
`$values['address_line_2']` Address line 2.
`$values['city']` City.
`$values['state']` State.
`$values['country']` Country.
`$values['zip']` Postal code.
`$values['phone']` Phone.

Fires in inc/classes/core/class-wp-easycart-order-writer.php · set_address()

`wpeasycart_full_order_refund` PRO API plugin Zapier
Fires after an order is fully refunded: in the admin, the mobile app, the WP EasyCart API, or a payment gateway’s refund notice such as a Stripe webhook.

**Parameters**
`$order_id` ID of the refunded order

Fires in wpeasycart.php · wp_easycart_stripe_charge_refunded() +15 more places

`wpeasycart_order_deleted` PRO
Fires after an order and its related rows are deleted in the admin, singly or in bulk.

**Parameters**
`$order_id` ID of the deleted order

Fires in admin/inc/wp_easycart_admin_orders.php · delete_order() +2 more places

`wpeasycart_order_deleting`
Fires just before an order is deleted in the admin, singly or in bulk.

**Parameters**
`$order_id` ID of the order about to be deleted

Fires in admin/inc/wp_easycart_admin_orders.php · delete_order() +1 more place

`wpeasycart_order_detail_line_added` PRO
Fires after an admin adds a line item to an existing order.

**Parameters**
`$order_id` ID of the order
`$orderdetail_id` ID of the new order line (ec_orderdetail row)

Fires in admin/inc/wp_easycart_admin_details_orders_pro_v2.php · ajax_order_add_line_full() +1 more place

`wpeasycart_order_detail_line_delete` PRO
Fires just before an admin deletes a line item from an order.

**Parameters**
`$order_id` ID of the order
`$orderdetail_id` ID of the order line being deleted

Fires in admin/inc/wp_easycart_admin_orders_pro.php · delete_line_item()

`wpeasycart_order_detail_line_update` PRO
Fires just before an admin’s edits to an order line item are saved, with the new values.

**Parameters**
`$order_id` ID of the order
`$orderdetail_id` ID of the order line
`$title` New line title
`$model_number` New model number
`$quantity` New quantity
`$unit_price` New unit price
`$total_price` New line total
`$giftcard_id` Gift card ID on the line
`$gift_card_email` Gift card recipient email
`$gift_card_from_name` Gift card sender name
`$gift_card_to_name` Gift card recipient name
`$gift_card_message` Gift card message
`$optionitem_name_1` Name of option choice 1
`$optionitem_name_2` Name of option choice 2
`$optionitem_name_3` Name of option choice 3
`$optionitem_name_4` Name of option choice 4
`$optionitem_name_5` Name of option choice 5

Fires in admin/inc/wp_easycart_admin_orders_pro.php · edit_line_item()

`wpeasycart_order_inserted`
Fires after a new order and its line items are saved during checkout, whether or not the payment is complete.

**Parameters**
`$order_id` ID of the new order
`$cart` The cart object the order was built from
`$order_totals` The order totals object
`$user` The customer object placing the order
`$payment_type` Payment type used for the order

Fires in inc/classes/core/ec_order.php · submit_order() +1 more place

`wpeasycart_order_paid` PRO
Fires when an order becomes paid, such as after a successful payment, a webhook confirmation or an admin status change to a paid status.

**Parameters**
`$order_id` ID of the paid order

Fires in wpeasycart.php · wp_easycart_webhook_catch() +22 more places

`wpeasycart_order_restored`
Fires after each deleted order is restored (undone) in the admin.

**Parameters**
`$order_id` ID of the restored order

Fires in admin/inc/wp_easycart_admin_orders.php · restore_orders()

`wpeasycart_order_shipped` PRO ShipStation
Fires after an order is set to the shipped status, from the admin or when a shipment is recorded.

**Parameters**
`$order_id` ID of the shipped order

Fires in admin/inc/wp_easycart_admin_orders.php · set_order_status() +4 more places

`wpeasycart_order_status_added`
Fires after a custom order status is added in the admin.

**Parameters**
`$status_id` ID of the new order status

Fires in admin/inc/wp_easycart_admin_order_statuses.php · add_order_status()

`wpeasycart_order_status_deleted`
Fires after a custom order status is deleted (archived) in the admin.

**Parameters**
`$status_id` ID of the deleted order status

Fires in admin/inc/wp_easycart_admin_order_statuses.php · archieve_order_status()

`wpeasycart_order_status_update` PRO ShipStation
Fires after an order’s status changes, including from webhooks, refunds and shipments.

**Parameters**
`$order_id` ID of the order
`$status` The new order status ID
`$previous` The previous order status ID, passed where it is known

Fires in wpeasycart.php · wp_easycart_stripe_charge_refunded() +26 more places

`wpeasycart_order_status_updated`
Fires after an order status definition (its name, color or paid flag) is edited in the admin.

**Parameters**
`$status_id` ID of the edited order status

Fires in admin/inc/wp_easycart_admin_order_statuses.php · update_order_status() +1 more place

`wpeasycart_order_success_pre`
Fires when a completed order is confirmed for the current shopper, with the order row and its details available.

**Parameters**
`$order_id` order id (int)
`$order_row` order database row (object)
`$order->orderdetails` the order’s line item rows

Fires in wpeasycart.php · wpeasycart_order_completed()

`wpeasycart_order_updated` PRO ShipStation
Fires after an order is changed: customer notes, status, addresses, contact or shipping and tracking details in the admin or the WP EasyCart API, a recorded deposit or balance, or a corrected payment.

**Parameters**
`$order_id` id of the order that changed (int)

Fires in admin/inc/wp_easycart_admin_order_screen.php · ajax_pinned_note() +32 more places

`wpeasycart_partial_order_refund` PRO API plugin Zapier
Fires when an order is partially refunded: in the admin, the mobile app, the WP EasyCart API, or a payment gateway’s refund notice such as a Stripe webhook.

**Parameters**
`$order_id` order id
`$amount` amount refunded in this action (0 when only the status changed)
`$new_total` total amount refunded on the order after this refund (float)

Fires in wpeasycart.php · wp_easycart_stripe_charge_refunded() +11 more places

`wpeasycart_print_receipt_order_notes_after`
Fires near the bottom of a printed receipt or invoice PDF, before the closing lines, so extra content can be added.

**Parameters**
`$order_id` order id

Fires in design/layout/base-responsive-v3/ec_account_print_receipt.php +1 more place

`wpeasycart_tracking_info_update` ShipStation
Fires just before an order’s shipping method, carrier and tracking number are saved in the admin.

**Parameters**
`$order_id` order id
`$use_expedited_shipping` 1 if expedited shipping is used (int)
`$shipping_method` shipping method name
`$shipping_carrier` carrier name
`$tracking_number` tracking number

Fires in admin/inc/wp_easycart_admin_order_screen.php · write_tracking() +4 more places

### Customers and accounts

Grouped by what they are about

`wp_easycart_account_order_card`
Fires inside each order card on the My Account orders list, after the date, item count and total, so extensions can add a line to the card.

**Parameters**
`$order` (ec_orderdisplay) The order.

Fires in design/layout/base-responsive-v3/ec_account_order_card.php

`wp_easycart_admin_subscriber_list_cell_{col}`
Fires when the admin subscriber list prints a cell for a custom column; {col} is the column’s format value, so a callback prints that column’s cell content.

**Parameters**
`$result` The subscriber’s row (object).
`$col` The column definition (array).

Fires in admin/inc/wp_easycart_admin_subscriber_table.php · print_cell_content()

`wp_easycart_admin_user_card_kpis`
Fires inside each customer card on the admin customer list, before the card footer, so PRO can print the orders, spend and lifecycle KPI strip.

**Parameters**
`$result` The customer row (object).
`$this` The admin user table instance.

Fires in admin/inc/wp_easycart_admin_user_table.php · print_card()

`wp_easycart_admin_user_details_loaded`
Fires after the admin customer details screen has loaded a customer and their default billing and shipping addresses.

**Parameters**
`$this` The admin customer details object, holding the user, billing_info and shipping_info.

Fires in admin/inc/wp_easycart_admin_details_user.php · init_data()

`wp_easycart_admin_user_details_v2_activity`
Fires in the Activity panel of the admin customer details screen when PRO’s activity panel is available, so PRO can print the live activity.

**Parameters**
`$this` The admin customer details object.

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_addresses_pro`
Fires at the end of the Addresses panel on the admin customer details screen, after the billing and shipping address sections.

**Parameters**
`$this` The admin customer details object.

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_advanced_pro`
Fires in the Advanced panel of the admin customer details screen, after the Data Export section and before the Danger Zone.

**Parameters**
`$this` The admin customer details object.

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_general_meta`
Fires after the general readouts, such as Last Login, in the General panel of the admin customer details screen for an existing customer.

**Parameters**
`$user` The customer being edited (object).

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_header_meta`
Fires in the header line of the admin customer details screen, after the email, role and ID, for an existing customer.

**Parameters**
`$user` The customer being edited (object).

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_menu`
Fires in the header menu of the admin customer details screen, after the Export Customer CSV link, so extensions can add menu items.

**Parameters**
`$user` The customer being edited (object).

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_notes_pro`
Fires at the top of the Notes panel on the admin customer details screen, before the Admin Notes section.

**Parameters**
`$this` The admin customer details object.

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_prefs_pro`
Fires at the end of the Tax & Preferences panel on the admin customer details screen, after the VAT registration field.

**Parameters**
`$this` The admin customer details object.

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_details_v2_wordpress_account`
Fires in the WordPress account area of the General panel on the admin customer details screen, where the linked WordPress user is shown.

**Parameters**
`$user` The customer (object).
`$wp_user` The linked WordPress user (WP_User), or false when none is linked.

Fires in admin/template/users/users/user-details-v2.php

`wp_easycart_admin_user_list_views` PRO
Fires above the customer list table, on both the Accounts list and the PRO Guest Checkouts list, so PRO can print an Accounts / Guest Checkouts view switcher.

No parameters.

Fires in admin/template/users/users/user-list.php +1 more place

`wp_easycart_admin_user_quick_edit_fields`
Fires at the end of the fields in the customer quick edit slideout, after the Send Password Reset Email button.

No parameters.

Fires in admin/template/users/users/quick-edit-user-slideout.php

`wp_easycart_checkout_account_made`
Fires when an order that needs an account creates one for a new customer, before the order is saved. The customer chooses the account’s password after paying.

**Parameters**
`$user_id` (int) The new account id.
`$order` (ec_order|null) The order about to be saved.

Fires in inc/classes/core/class-wp-easycart-checkout-signup.php · before_order()

`wp_easycart_login_success_account`
Fires on the account dashboard page right after a shopper logs in, when the URL carries account_success=login_success.

No parameters.

Fires in admin/elementor/wp-easycart-elementor-account-dashboard-messages-widget.php +2 more places

`wp_easycart_order_connected`
Fires after a customer claims a guest order into their store account.

**Parameters**
`$order_id` Order ID (int)
`$user_id` ID of the store account (ec_user) the order now belongs to (int)

Fires in inc/classes/account/ec_accountpage.php · process_order_claim()

`wp_easycart_page_access_role_renamed`
Fires after Limit Access rules are updated to follow a renamed customer role.

**Parameters**
`$out` (array) old and new role names, rules (post ids updated) and content (post ids whose members-only shortcodes or blocks still name the old role).

Fires in inc/classes/core/class-wp-easycart-page-access.php · rename_role()

`wp_easycart_page_access_saved`
Fires after a post’s Limit Access rule is saved.

**Parameters**
`$post_id` (int) The post id.
`$rule` (array) The saved rule.

Fires in inc/classes/core/class-wp-easycart-page-access.php · save_rule()

`wp_easycart_payment_method_added`
Fires after a customer adds a card on My Account’s Payment methods page.

**Parameters**
`$user` (ec_user) The customer.
`$pm` (string) The Stripe payment method id.
`$result` (array) The result: moved, failed and default.

Fires in inc/classes/core/class-wp-easycart-payment-methods.php · add()

`wp_easycart_payment_method_default_changed`
Fires after a customer changes their default card on My Account’s Payment methods page.

**Parameters**
`$user` (ec_user) The customer.
`$pm` (string) The Stripe payment method id of the new default.

Fires in inc/classes/core/class-wp-easycart-payment-methods.php · set_default()

`wp_easycart_payment_method_removed`
Fires after a customer removes a card on My Account’s Payment methods page.

**Parameters**
`$user` (ec_user) The customer.
`$pm` (string) The Stripe payment method id removed.
`$moved` (array) Subscriptions moved to another card before the removal.

Fires in inc/classes/core/class-wp-easycart-payment-methods.php · remove()

`wp_easycart_privacy_erased`
Fires after a customer’s store data is erased through the WordPress personal data eraser, so extensions can remove copies held elsewhere.

**Parameters**
`$email` Email address of the erased customer.

Fires in inc/classes/core/class-wp-easycart-privacy.php · erase_personal_data()

`wp_easycart_recaptcha_keys_tested`
Fires when the saved reCAPTCHA keys pass the Test keys check in Settings › Accounts, after the pass is recorded and before the success message is sent back.

**Parameters**
`$json['hostname']` (string) The site Google says the box was ticked on, or empty when Google sent none.

Fires in admin/inc/wp_easycart_admin_recaptcha.php · ajax_test()

`wp_easycart_user_activity_logged`
Fires after a customer activity entry is logged.

**Parameters**
`$activity_id` Id of the new activity row.
`$user_id` Customer id.
`$type` Activity type.
`$args` Extra details about the activity.

Fires in inc/classes/core/ec_user_activity.php · log()

`wp_easycart_user_imported`
Fires after a customer is created or updated by the customer import.

**Parameters**
`$uid` Customer id.
`'create' or 'update'` Whether the customer was created or updated.

Fires in admin/inc/wp_easycart_admin_user_import.php · apply() +1 more place

`wp_easycart_usersync_access_granted` Enable WP Users
Fires after a WordPress user is granted a role by User Sync.

**Parameters**
`(int) $wp_user->ID` WordPress user id.
`$role` Role granted.
`$source` What granted it, such as order:N, sub:N or store_role:label.

Fires in includes/class-wp-easycart-usersync-roles.php · grant()

`wp_easycart_usersync_access_revoked` Enable WP Users
Fires after a role is removed from a WordPress user by User Sync.

**Parameters**
`(int) $wp_user->ID` WordPress user id.
`$role` Role removed.
`$source` What granted the role.

Fires in includes/class-wp-easycart-usersync-roles.php · revoke()

`wp_easycart_wordpress_user_email_copied`
Fires after a WordPress user’s email change is copied to the linked store account.

**Parameters**
`$store_user_id` Store customer id.
`$email` New email.
`$old_email` Previous email.

Fires in inc/classes/core/class-wp-easycart-wordpress-users.php · wp_profile_update()

`wp_easycart_wordpress_user_linked`
Fires after a WordPress user is linked to a store account.

**Parameters**
`$wp_user_id` WordPress user id.
`$store_user_id` Store customer id.
`$how` How it was linked: made, email, confirmed, admin, login or wordpress.

Fires in inc/classes/core/class-wp-easycart-wordpress-users.php · link()

`wp_easycart_wordpress_user_store_account_created`
Fires after a store account is created for a WordPress user.

**Parameters**
`$store_user_id` New store customer id.
`$wp_user` WordPress user object.

Fires in inc/classes/core/class-wp-easycart-wordpress-users.php · resolve_store_account()

`wp_easycart_wordpress_user_unlinked`
Fires after a WordPress user is unlinked from a store account.

**Parameters**
`(int) $wp_user_id` WordPress user id.
`$store_user_id` Store customer id.

Fires in inc/classes/core/class-wp-easycart-wordpress-users.php · unlink_store()

`wpeasycart_account_added` PRO Zapier
Fires after a customer account is created: at checkout, at subscription sign-up, from the account page’s sign-up form, when a customer is added in the admin, or through the WP EasyCart API.

**Parameters**
`$user_id` (int) The new customer id.
`$wpec_email` (string) The customer’s email.
`$_POST['ec_contact_password']` (string) The password the customer entered.
`'subscription'` (string) Where the account was created: checkout, subscription, register or admin. The mobile app API passes only the first three values.

Fires in wpeasycart.php · ec_ajax_subscription_create_account() +9 more places

`wpeasycart_account_deleted` PRO
Fires after a customer account is deleted.

**Parameters**
`$id` Customer id.

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_customer() +3 more places

`wpeasycart_account_deleting`
Fires just before a customer account is deleted.

**Parameters**
`$id` Customer id.

Fires in admin/inc/wp_easycart_admin_safe_delete.php · execute_customer() +2 more places

`wpeasycart_account_links`
Fires in the My Account menu after the dashboard link (at the top of the menu in the older layout), so links can be added.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_navigation() +1 more place

`wpeasycart_account_links_after_billing`
Fires in the My Account menu after the Billing information link.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_navigation() +1 more place

`wpeasycart_account_links_after_password`
Fires in the My Account menu after the Change password link.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_navigation() +1 more place

`wpeasycart_account_links_after_personal`
Fires in the My Account menu after the Basic information link.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_navigation() +1 more place

`wpeasycart_account_links_after_shipping`
Fires in the My Account menu after the Shipping information link, or where it would be when the store does not ship.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_navigation() +1 more place

`wpeasycart_account_links_after_subscriptions`
Fires in the My Account menu after the subscriptions link, or where it would be when the store has no subscriptions.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_navigation() +1 more place

`wpeasycart_account_links_end`
Fires at the end of the My Account menu, after the Sign out link.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_navigation() +1 more place

`wpeasycart_account_login_post`
Fires after the account login page is displayed.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_login_page()

`wpeasycart_account_note_added` PRO
Fires after an admin adds a note to a customer account.

**Parameters**
`$user_id` Customer id.
`$note` Note text.

Fires in admin/inc/wp_easycart_admin_user_pro.php · add_user_note()

`wpeasycart_account_page_pre`
Fires on the account page before it is displayed, when the customer is not forced to a login or password page.

No parameters.

Fires in inc/classes/account/ec_accountpage.php · display_account_page()

`wpeasycart_account_personal_information_fields`
Fires in the account personal information form, above the buttons, so extensions can add fields.

**Parameters**
`$this` Account page object (null in the Elementor widget).

Fires in admin/elementor/wp-easycart-elementor-account-personal-widget.php +2 more places

`wpeasycart_account_pre_login_failed_redirect`
Fires when a customer login fails, just before the shopper is redirected back with a login failed error.

**Parameters**
`$email` Email entered.
`$password` Password entered.

Fires in inc/classes/account/ec_accountpage.php · process_login()

`wpeasycart_account_restored`
Fires after a deleted customer account is restored.

**Parameters**
`$user_id` Restored customer id.

Fires in admin/inc/wp_easycart_admin_safe_delete.php · restore() +1 more place

`wpeasycart_account_top`
Fires at the top of the account page, after any error and success messages.

No parameters.

Fires in admin/elementor/modules/account/includes/class-wp-easycart-elementor-account.php · print_account_top() +1 more place

`wpeasycart_account_updated` PRO Zapier
Fires after a customer account changes: edited, approved or merged in the admin, updated by the customer in My Account, given addresses at checkout or after an order, or changed through the WP EasyCart API.

**Parameters**
`$user_id` (int) The customer id.
`true` (bool) Passed as true when checkout or a new order saved the account’s addresses; not passed otherwise.

Fires in admin/inc/wp_easycart_admin_details_user_v2.php · ecudv2_user_approve() +10 more places

`wpeasycart_activation_email_resent`
Fires after an admin resends the account activation email to a pending customer.

**Parameters**
`$user->email` Customer email.

Fires in admin/inc/wp_easycart_admin_users.php · resend_activation() +3 more places

`wpeasycart_admin_login_as_user`
Fires when an admin logs in as a customer, before the switch, for audit use.

**Parameters**
`(int) $user->user_id` Customer id.
`get_current_user_id()` Id of the admin acting.

Fires in admin/inc/wp_easycart_admin_users.php · login_as_user()

`wpeasycart_admin_user_anonymized` PRO
Fires after an admin anonymizes a customer account, once the personal data has been cleared.

**Parameters**
`$user_id` ID of the anonymized customer (ec_user.user_id)

Fires in admin/inc/wp_easycart_admin_user_details_pro_v2.php · ecudv2_user_anonymize()

`wpeasycart_admin_user_anonymizing` PRO
Fires just before an admin anonymizes a customer account, while the original email is still stored.

**Parameters**
`$user_id` ID of the customer being anonymized (ec_user.user_id)
`(string) $user->email` The customer’s email address before anonymizing

Fires in admin/inc/wp_easycart_admin_user_details_pro_v2.php · ecudv2_user_anonymize()

`wpeasycart_admin_user_merged` PRO
Fires after an admin merges one customer account into another, once orders, subscriptions and other records have moved.

**Parameters**
`$source_id` ID of the customer account that was merged away
`$target_id` ID of the customer account that received the records

Fires in admin/inc/wp_easycart_admin_user_details_pro_v2.php · ecudv2_user_merge()

`wpeasycart_admin_user_updated`
Fires after a customer record is changed in the admin, by an inline edit in the customer list, a bulk edit or Quick Edit.

**Parameters**
`$user_id` (int) The updated customer (ec_user.user_id).
`array( $field => $value )` (array) The changed fields, column name => new value; empty for an account only an extension changed in a bulk edit.

Fires in admin/inc/wp_easycart_admin_user_table.php · ecv2_user_inline_update() +3 more places

`wpeasycart_change_password_top`
Fires at the top of the change password form on the account page, so extra fields or notices can be added.

No parameters.

Fires in admin/elementor/wp-easycart-elementor-account-password-widget.php +1 more place

`wpeasycart_custom_verify_new_password_failed`
Fires when a new password is rejected by a custom validator (the wpeasycart_custom_verify_new_password filter) during a password reset or password change.

**Parameters**
`$new_password` The rejected new password, unsanitized

Fires in inc/classes/account/ec_accountpage.php · process_reset_password() +2 more places

`wpeasycart_dashboard_bottom`
Fires at the bottom of the My Account dashboard, after the recent orders and the email, billing and shipping details.

No parameters.

Fires in design/layout/base-responsive-v3/ec_account_dashboard.php

`wpeasycart_dashboard_recent_order_item`
Fires for each item in the recent orders list on the customer account dashboard, so extra content can be added after the item title.

**Parameters**
`$order_item` The order item (order detail display) object being shown

Fires in admin/elementor/wp-easycart-elementor-account-dashboard-orders-widget.php +1 more place

`wpeasycart_dashboard_top`
Fires at the top of the My Account dashboard, after the welcome line and before the recent orders.

No parameters.

Fires in design/layout/base-responsive-v3/ec_account_dashboard.php

`wpeasycart_insert_subscriber`
Fires when an email address is about to be added to the newsletter subscriber list.

**Parameters**
`$email` Subscriber email address
`$first_name` Subscriber first name
`$last_name` Subscriber last name

Fires in inc/classes/core/ec_db.php · insert_subscriber()

`wpeasycart_login_failed`
Fires when a customer login attempt fails, on the account page or in the cart login.

**Parameters**
`$email` Email address entered on the failed login

Fires in inc/classes/account/ec_accountpage.php · process_login() +1 more place

`wpeasycart_login_success` PRO
Fires after a customer signs in successfully, including when an admin uses Login as Customer.

**Parameters**
`$email` Email address of the signed in customer

Fires in admin/inc/wp_easycart_admin_users.php · login_as_user() +3 more places

`wpeasycart_logout`
Fires when a signed in customer logs out, from the account page or the cart.

**Parameters**
`$user_id (int)` ID of the customer who is logging out

Fires in inc/classes/account/ec_accountpage.php · process_logout() +1 more place

`wpeasycart_password_changed`
Fires after a customer’s store password is changed, either through the password reset form or the account password update.

**Parameters**
`$user_id` store customer id
`$password_hash` the new hashed password

Fires in inc/classes/account/ec_accountpage.php · process_reset_password() +2 more places

`wpeasycart_password_rehashed`
Fires after a customer’s stored password hash is upgraded to a newer hash during a successful login.

**Parameters**
`$user_id` store customer id
`$rehashed` the new password hash

Fires in inc/classes/core/ec_db.php · get_user_login()

`wpeasycart_password_reset_complete`
Fires after a customer completes the password reset form and the new password hash is saved.

**Parameters**
`$user->user_id` store customer id

Fires in inc/classes/account/ec_accountpage.php · process_reset_password() +1 more place

`wpeasycart_password_reset_forced`
Fires when the merchant forces a password reset on a store customer account.

**Parameters**
`(int) $store_user_id` store customer id

Fires in inc/classes/core/class-wp-easycart-wordpress-users.php · password_reset_forced()

`wpeasycart_password_reset_requested`
Fires after a password reset email is sent to a customer who requested one.

**Parameters**
`$user->user_id` store customer id

Fires in inc/classes/account/ec_accountpage.php · process_retrieve_password()

`wpeasycart_password_set`
Fires whenever a store customer’s password is set, so it can be carried to a linked WordPress user.

**Parameters**
`$store_user_id` store customer id (int)
`$password` the password as typed, slashed the way WordPress forms post it
`$context` how it was set: change, reset, or admin

Fires in inc/classes/core/class-wp-easycart-wordpress-users.php · password_set()

`wpeasycart_password_updated`
Fires after a signed-in customer changes their password on the My Account password page, once the current password was verified.

**Parameters**
`$user_id` store customer id

Fires in inc/classes/account/ec_accountpage.php · process_update_password()

`wpeasycart_pre_login_attempt`
Fires just before a login attempt is checked against the store’s customer accounts, from My Account or checkout.

**Parameters**
`$email` email address entered

Fires in inc/classes/account/ec_accountpage.php · process_login() +1 more place

`wpeasycart_pre_login_password_display`
Fires just before the password field is displayed on the store login form.

No parameters.

Fires in admin/elementor/wp-easycart-elementor-account-login-widget.php +6 more places

`wpeasycart_pre_password_display`
Fires just before the new password field is displayed on the account change password form.

No parameters.

Fires in admin/elementor/wp-easycart-elementor-account-password-widget.php +5 more places

`wpeasycart_user_added`
Fires after a new customer is created by the admin customer import.

**Parameters**
`$uid` id of the new customer

Fires in admin/inc/wp_easycart_admin_user_import.php · apply()

`wpeasycart_user_role_added`
Fires after a new customer role is created, in the admin or through the WP EasyCart API.

**Parameters**
`$id` id of the new role

Fires in inc/classes/core/class-wp-easycart-role-writer.php · create()

`wpeasycart_user_role_deleted`
Fires after a customer role is deleted, in the admin or through the WP EasyCart API.

**Parameters**
`$id` id of the deleted role

Fires in inc/classes/core/class-wp-easycart-role-writer.php · delete()

`wpeasycart_user_role_deleting`
Fires just before a customer role is deleted, in the admin or through the WP EasyCart API.

**Parameters**
`$id` id of the role about to be deleted

Fires in inc/classes/core/class-wp-easycart-role-writer.php · delete()

`wpeasycart_user_role_renamed`
Fires when a customer role is saved under a new name, after its customers, role prices and admin access have moved to the new name; update anything else that stored the old name here. WP EasyCart PRO rewrites its Customer role offer conditions on it.

**Parameters**
`$id` (int) The role id (ec_role.role_id).
`$label` (string) The new role name.
`$renamed_from` (string) The old role name.

Fires in inc/classes/core/class-wp-easycart-role-writer.php · update()

`wpeasycart_user_role_updated`
Fires after a customer role is saved or its admin access is toggled, in the admin or through the WP EasyCart API.

**Parameters**
`$id` role id

Fires in admin/inc/wp_easycart_admin_user_role_table.php · ecv2_role_toggle_access() +1 more place

`wpeasycart_user_updated`
Fires after a customer is updated by the admin import or when their role is changed.

**Parameters**
`$uid` customer id

Fires in admin/inc/wp_easycart_admin_user_import.php · apply() +4 more places

### Subscriptions

Grouped by what they are about

`wp_easycart_admin_product_details_subscription_fields`
Fires in the Subscription card of the product editor’s Type settings section so recurring billing fields can be added.

No parameters.

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_subscription_details_basic_fields` PRO
Fires in the Subscription Information section of the admin subscription details screen so PRO can print the basic fields.

No parameters.

Fires in admin/template/orders/subscriptions/subscriptions-details.php

`wp_easycart_admin_subscription_details_customer_info_fields` PRO
Fires in the Customer Information section of the admin subscription details screen so PRO can print the customer fields.

No parameters.

Fires in admin/template/orders/subscriptions/subscriptions-details.php

`wp_easycart_admin_subscription_details_paypal_info_fields` PRO
Fires in the PayPal information section of the admin subscription details screen so PRO can print PayPal-specific subscription fields.

No parameters.

Fires in admin/template/orders/subscriptions/subscriptions-details.php

`wp_easycart_admin_subscription_details_product_info_fields` PRO
Fires in the Product Information section of the admin subscription details screen so PRO can print the product fields.

No parameters.

Fires in admin/template/orders/subscriptions/subscriptions-details.php

`wp_easycart_admin_subscription_details_stripe_info_fields` PRO
Fires in the Stripe Information section of the admin subscription details screen so PRO can print Stripe-specific subscription fields.

No parameters.

Fires in admin/template/orders/subscriptions/subscriptions-details.php

`wp_easycart_admin_subscription_details_subscription_terms_fields` PRO
Fires in the Subscription Terms & Dates section of the admin subscription details screen so PRO can print the terms and date fields.

No parameters.

Fires in admin/template/orders/subscriptions/subscriptions-details.php

`wp_easycart_admin_subscription_plans_details`
Fires when the subscription plans admin page is showing the add-new or edit plan form, so PRO can print the plan details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_subscription_plans.php · load_subscription_plans_list()

`wp_easycart_admin_subscription_plans_details_basic_fields` PRO
Fires in the Subscription Plan Setup section of the subscription plan edit form so PRO can print the basic plan fields.

No parameters.

Fires in admin/template/products/subscriptions/subscription-plans-details.php

`wp_easycart_admin_subscription_plans_list`
Fires when the subscription plans admin page shows the plan list rather than the add-new or edit form.

No parameters.

Fires in admin/inc/wp_easycart_admin_subscription_plans.php · load_subscription_plans_list()

`wp_easycart_admin_subscriptions_details`
Fires when the subscriptions admin page is showing the add-new or edit subscription form, so PRO can print the subscription details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_subscriptions.php · load_subscriptions_list()

`wp_easycart_admin_subscriptions_list`
Fires when the subscriptions admin page shows the subscription list rather than the details form.

No parameters.

Fires in admin/inc/wp_easycart_admin_subscriptions.php · load_subscriptions_list()

`wp_easycart_cart_subscription_after_grand_total`
Fires in the subscription checkout totals right after the grand total row, before the sign-up fee notice.

**Parameters**
`$product` The subscription product being purchased (object).

Fires in design/layout/base-responsive-v3/ec_cart_subscription.php +1 more place

`wp_easycart_plan_group_to_list` PRO
Fires after a pricing table is turned into a Change plan list.

**Parameters**
`$plan_id` (int) The pricing table (plan group) id.
`$product_ids` (int\[\]) The products its tiers held.

Fires in inc/classes/core/wp_easycart_plan_groups_pro.php · to_list()

`wp_easycart_product_details_subscription_button_onclick`
Fires inside the onclick attribute of a subscription sign-up button, so callbacks can echo JavaScript that runs before the button’s own handler.

**Parameters**
`$product` The subscription product.

Fires in admin/elementor/modules/product-buy/includes/class-wp-easycart-product-buy-area.php · render() +2 more places

`wp_easycart_product_subscription_button`
Fires inside the opening tag of the sign-up link for a subscription product in product listings, so callbacks can echo extra HTML attributes.

**Parameters**
`$product` The subscription product.

Fires in design/layout/base-responsive-v3/ec_product.php +3 more places

`wp_easycart_product_subscription_qv_button`
Fires inside the opening tag of the subscription link in the product quick view, so callbacks can echo extra HTML attributes.

**Parameters**
`$product` The subscription product.

Fires in design/layout/base-responsive-v3/ec_product.php +1 more place

`wp_easycart_stripe_subscription_onchange`
Fires inside the Stripe card field’s change handler on the subscription checkout page, so callbacks can echo JavaScript.

**Parameters**
`$product` The subscription product.

Fires in design/layout/base-responsive-v3/ec_cart_subscription.php

`wp_easycart_subscription_account_made`
Fires when a subscription purchase creates an account that has no password yet.

**Parameters**
`$user_id` (int) The new account id.

Fires in inc/classes/core/class-wp-easycart-subscription-signup.php · mark_pending()

`wp_easycart_subscription_admin_action` PRO
Fires after an admin changes a subscription from the subscriptions list, such as changing its plan or canceling it.

**Parameters**
`$subscription_id` Subscription id.
`$action` Action taken: change_plan, cancel_period_end or cancel_now.
`$details` Extra details, such as the old and new plan or the refund flag (array).

Fires in admin/inc/wp_easycart_admin_subscription_table.php · ecv2_sub_change_plan() +3 more places

`wp_easycart_subscription_cancel_changed`
Fires after the subscription writer cancels a subscription now, at the end of its period, or resumes it, with who asked.

**Parameters**
`$id` (int) The subscription id.
`$args['when']` (string) now, period_end or resume.
`$status` (string) The status now.
`$args['source']` (string) Who asked, such as api or admin.

Fires in inc/classes/core/class-wp-easycart-subscription-writer.php · announce()

`wp_easycart_subscription_card_changed`
Fires after a customer moves a subscription to another card.

**Parameters**
`$subscription_id` (int) The subscription id.
`$payment_method` (string) The Stripe payment method id.
`$card` (array|null) The card: brand, last4, exp_month and exp_year.

Fires in inc/classes/core/class-wp-easycart-subscription-cards.php · apply()

`wp_easycart_subscription_change_cancelled`
Fires when an open plan change or a waiting price move on a subscription is cancelled: by the customer in My Account, by a newer change, by the store, or because the subscription is ending.

**Parameters**
`$subscription_id` (int) The ec_subscription id.
`$change_id` (int) The ec_subscription_change row id.
`$reason` (string) cancelled (the customer cancelled it), replaced (a newer change took its place), store (the store’s own change, Stop moving on a price move, or the schedule released in Stripe) or ended (the subscription is being cancelled or will not renew).

Fires in inc/classes/core/class-wp-easycart-subscription-changes.php · release_for() +8 more places

`wp_easycart_subscription_change_scheduled`
Fires after a subscription plan change is set to apply at the next renewal, through a Stripe subscription schedule, instead of now.

**Parameters**
`$ctx['row']->subscription_id` (int) The ec_subscription id.
`$ctx['product']->product_id` (int) The product the subscription moves to.
`$phase->end_date` (int) When the change applies: the end of the current billing period (timestamp).
`$out['change_id']` (int) The ec_subscription_change row id.

Fires in inc/classes/core/class-wp-easycart-subscription-changes.php · schedule_change()

`wp_easycart_subscription_ended`
Fires when Stripe reports a subscription has ended and the store has canceled it and sent the ended email.

**Parameters**
`$subscription` Subscription object.
`$user` Store customer.
`$webhook_data` Stripe webhook data.

Fires in wpeasycart.php · wp_easycart_webhook_catch()

`wp_easycart_subscription_modifier_post_db_insert`
Fires after an advanced option chosen for a subscription order is saved to the database.

**Parameters**
`$order_option_id` Id of the saved order option row.
`$advanced_option` The advanced option that was saved.

Fires in inc/classes/core/ec_db.php · insert_subscription_order()

`wp_easycart_subscription_plan_changed`
Fires after a Stripe subscription moves to another product or quantity and the store’s subscription record is updated: a change from My Account or the account form, the store’s change in WP EasyCart PRO, a scheduled change reaching its renewal, or a price move.

**Parameters**
`$subscription_id` (int) The ec_subscription id.
`$product_id` (int) The product it is on now.
`$previous_product_id` (int) The product it was on (the same product when only the quantity or the price changed).
`$context` (array) Keys quantity, previous_quantity, interval_changed (how often it bills changed), source (customer, admin, price_move or an extension’s name), stripe_subscription_id and stripe_price_id; changes made through the plan change engine add change_id and when (now or renewal).

Fires in inc/classes/core/class-wp-easycart-subscription-changes.php · apply_local() +1 more place

`wp_easycart_subscription_price_move_scheduled`
Fires after a subscriber is emailed the price change notice and their move to the product’s current price is recorded for a later renewal, from the Price changes card of WP EasyCart PRO’s plan group editor.

**Parameters**
`(int) $row->subscription_id` (int) The ec_subscription id.
`$out['change_id']` (int) The ec_subscription_change row id.
`$at` (int) The renewal the new price starts at (timestamp).
`$old_unit` (float) The price paid now, per unit.
`$new_unit` (float) The new price, per unit.

Fires in inc/classes/core/class-wp-easycart-subscription-changes.php · move_price()

`wp_easycart_subscription_reactivated`
Fires when a Stripe payment webhook brings a failed or canceled subscription back to Active.

**Parameters**
`$subscription` Subscription object.
`$webhook_data` Stripe webhook data.

Fires in wpeasycart.php · wp_easycart_webhook_catch()

`wp_easycart_subscription_refunded` PRO
Fires after a Stripe refund is issued while canceling a subscription from the admin.

**Parameters**
`$id` Subscription id.
`$charge` Stripe charge id.
`$amt` Amount refunded.

Fires in admin/inc/wp_easycart_admin_subscription_table.php · ecv2_sub_cancel()

`wp_easycart_subscription_renewal_consent_recorded`
Fires after an order keeps the customer’s separate yes to automatic renewal (the renewal box on the subscription page).

**Parameters**
`$order_id` (int) The order id.
`$yes` (array) text, agreed_at (UTC) and product_id.

Fires in inc/classes/core/class-wp-easycart-renewal-consent.php · record()

`wp_easycart_subscription_started`
Fires after a new subscription is created at checkout.

**Parameters**
`$subscription_id` Id of the new subscription.

Fires in inc/classes/cart/ec_cartpage.php · submit_stripe_quick_subscription() +1 more place

`wp_easycart_subscription_status_synced`
Fires after a Stripe webhook updates a subscription’s status in the store.

**Parameters**
`$subscription_row` The subscription row before the change.
`$status_map[ $webhook_data->status ]` The new WP EasyCart status.
`$webhook_data` Stripe webhook data.

Fires in wpeasycart.php · wp_easycart_webhook_catch()

`wp_easycart_subscription_top`
Fires at the top of the subscription checkout page, before the subscription form.

**Parameters**
`$product` The subscription product.

Fires in design/layout/base-responsive-v3/ec_cart_subscription.php

`wp_easycart_subscription_upcoming_payment`
Fires after Stripe warns of an upcoming subscription payment and the store sends the upcoming payment email.

**Parameters**
`$subscription` Subscription object.
`$user` Store customer.
`$webhook_data` Stripe webhook data.

Fires in wpeasycart.php · wp_easycart_webhook_catch()

`wpeasycart_account_subscription_details_after`
Fires at the end of the account subscription details page.

**Parameters**
`$ec_sub` Subscription object.

Fires in design/layout/base-responsive-v3/ec_account_subscription_details.php

`wpeasycart_account_subscription_details_before`
Fires on the account subscription details page, before the subscription information.

**Parameters**
`$ec_sub` Subscription object.

Fires in design/layout/base-responsive-v3/ec_account_subscription_details.php

`wpeasycart_cart_subscription_updated`
Fires when the subscription page or its AJAX totals are built, after the product’s weight and quantity are set for shipping and before shipping is calculated.

**Parameters**
`$product` (object) The subscription product.
`$subscription_quantity` (int) The quantity of the subscription.
`$ship_weight_total` (float) The total shipping weight.

Fires in wpeasycart.php · wp_easycart_subscription_output_ajax_totals() +4 more places

`wpeasycart_custom_subscription_order_email`
Fires instead of the built-in mailer when the store email method is custom, so a custom handler can send the subscription trial start or trial ending email.

**Parameters**
`$from` From email address (order from email option)
`$to` Subscriber email address
`$bcc` BCC email addresses option
`$subject` Email subject
`$message` Email body

Fires in inc/classes/core/ec_subscription.php · send_trial_start_email() +3 more places

`wpeasycart_subscription_canceled` PRO
Fires after a subscription is canceled by the merchant, in the admin or through the WP EasyCart API.

**Parameters**
`$subscription->subscription_id` subscription id

Fires in inc/classes/core/class-wp-easycart-subscription-writer.php · announce() +4 more places

`wpeasycart_subscription_cancelled`
Fires when a customer cancels their own subscription from My Account.

**Parameters**
`$this->user->user_id` store customer id
`$subscription_id` subscription id

Fires in inc/classes/account/ec_accountpage.php · process_cancel_subscription()

`wpeasycart_subscription_deleting` PRO
Fires just before a subscription is deleted in the admin, singly or in bulk.

**Parameters**
`$subscription_id` id of the subscription about to be deleted

Fires in admin/inc/wp_easycart_admin_subscription_table.php · ecv2_sub_delete() +2 more places

`wpeasycart_subscription_first_order_inserted`
Fires after the first order for a new subscription is created at checkout.

**Parameters**
`$order_id` id of the new order

Fires in inc/classes/cart/ec_cartpage.php · submit_stripe_quick_subscription_payment() +1 more place

`wpeasycart_subscription_page_plan_choices`
Fires at the top of the subscription checkout page, right after wp_easycart_subscription_top, so WP EasyCart PRO can print a plan group tier’s Monthly / Yearly billing choice and its switch-to-yearly offer.

**Parameters**
`$product` (object) The ec_product being subscribed to.

Fires in design/layout/base-responsive-v3/ec_cart_subscription.php

`wpeasycart_subscription_paid`
Fires when a Stripe webhook reports a paid subscription renewal and the order is recorded.

**Parameters**
`$order_id` order id for the paid renewal

Fires in wpeasycart.php · wp_easycart_webhook_catch()

`wpeasycart_subscription_plan_added` PRO
Fires after a new subscription plan is created in the admin.

**Parameters**
`$subscription_plan_id` id of the new plan

Fires in admin/inc/wp_easycart_admin_subscription_plan_table.php · ecv2_plan_create() +1 more place

`wpeasycart_subscription_plan_deleted` PRO
Fires after a subscription plan is deleted in the admin.

**Parameters**
`$subscription_plan_id` id of the deleted plan

Fires in admin/inc/wp_easycart_admin_subscription_plan_table.php · ecv2_plan_delete() +1 more place

`wpeasycart_subscription_plan_deleting` PRO
Fires just before a subscription plan is deleted in the admin.

**Parameters**
`$subscription_plan_id` id of the plan about to be deleted

Fires in admin/inc/wp_easycart_admin_subscription_plan_table.php · ecv2_plan_delete() +1 more place

`wpeasycart_subscription_plan_restored` PRO
Fires for each subscription plan put back with Undo after it was deleted from the Subscription Plans list, once the plan and its products’ links to it are restored; WP EasyCart PRO uses it to bring a plan group’s products back.

**Parameters**
`(int) $p['subscription_plan_id']` (int) The restored plan id.

Fires in admin/inc/wp_easycart_admin_subscription_plan_table.php · ecv2_plan_restore()

`wpeasycart_subscription_plan_updated` PRO
Fires after a subscription plan is saved or switched on or off in the admin, or when WP EasyCart PRO’s plan group editor saves its plans.

**Parameters**
`$id` (int) The subscription plan id.

Fires in admin/inc/wp_easycart_admin_plan_group_editor_v2.php · ecv2_plan_group_convert() +5 more places

`wpeasycart_subscription_updated` PRO
Fires after a subscription is changed by the merchant, such as a product swap, a Stripe sync or a scheduled cancel, in the admin or through the WP EasyCart API.

**Parameters**
`$subscription_id` subscription id

Fires in inc/classes/core/class-wp-easycart-subscription-writer.php · announce() +6 more places

### Shipping

Grouped by what they are about

`wp_easycart_cart_shipping_post_methods`
Fires on the checkout shipping method page right after the list of shipping methods.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart_shipping_method.php

`wp_easycart_display_shipping_method_post`
Fires after the checkout shipping method step has been displayed.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_shipping_method()

`wp_easycart_display_shipping_method_pre`
Fires before the checkout shipping method step is displayed.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_shipping_method()

`wp_easycart_live_rate_pre_rates`
Fires when live-rate shipping options are being built, before the rates are listed.

No parameters.

Fires in inc/classes/core/ec_shipping.php · get_live_based_shipping_options()

`wp_easycart_method_rate_pre_rates`
Fires when method-based shipping options are being built, before the rates are listed.

No parameters.

Fires in inc/classes/core/ec_shipping.php · get_method_based_shipping_options()

`wp_easycart_order_packages_saved`
Fires after an order’s packages are saved.

**Parameters**
`$order_id` Order ID

Fires in inc/classes/core/class-wp-easycart-shipments.php · save_packages() +1 more place

`wp_easycart_order_shipment_added`
Fires after a shipment (package) with its tracking is recorded for an order, before the shipping email is sent.

**Parameters**
`$order_id` Order ID (int)
`$shipment_id` Package ID (0 before the database update) (int)
`$args` What was recorded (array)

Fires in inc/classes/core/class-wp-easycart-shipments.php · record()

`wp_easycart_order_shipment_tracking`
Fires when a package’s tracking status is updated.

**Parameters**
`(int) $row->order_id` Order ID
`(int) $shipment_id` Package ID
`$status` Tracking status (string), such as delivered
`(string) $detail` The carrier’s status text

Fires in inc/classes/core/class-wp-easycart-shipments.php · track()

`wp_easycart_order_shipment_voided`
Fires after a package’s shipment is voided.

**Parameters**
`(int) $row->order_id` Order ID
`(int) $shipment_id` Package ID
`$row` The package row as it was before it was voided (object)

Fires in inc/classes/core/class-wp-easycart-shipments.php · void()

`wp_easycart_order_shipping_groups_recorded`
Fires after an order’s shipping groups (one per shipping provider) are recorded.

**Parameters**
`$order_id` Order ID (int)
`$entries` One entry per provider (array)

Fires in inc/classes/core/class-wp-easycart-shipping-groups.php · record()

`wp_easycart_shipping_email_after_tracking`
Fires in the shipping confirmation email after the tracking information block.

**Parameters**
`$ec_ship_order` Order being shipped.

Fires in design/layout/base-responsive-v3/ec_shipping_email.php

`wp_easycart_shipping_print_custom_shipping_options`
Fires in place of the built-in shipping options when the wp_easycart_shipping_should_print_custom_options filter returns true, so a callback can print its own options.

No parameters.

Fires in inc/classes/core/ec_shipping.php · print_store_shipping_options()

`wp_easycart_shipping_receipt_saved`
Fires after a package’s shipping receipt changes on an order: its fields are saved, or its photo is saved or deleted.

**Parameters**
`$order_id` (int) The order id.
`$shipment_id` (int) The package id.
`$what` (string) What changed: fields, photo or photo_deleted.

Fires in inc/classes/core/class-wp-easycart-shipping-receipts.php · changed()

`wp_easycart_shippo_label_bought` Shippo
Fires after a shipping label is bought through Shippo.

**Parameters**
`$order_id` Order id.
`(int) $shipment_id` Package id.
`$transaction` Shippo transaction data (array).

Fires in includes/class-wp-easycart-shippo-labels.php · buy()

`wp_easycart_shippo_order_sent` Shippo
Fires after an order is sent to Shippo successfully.

**Parameters**
`$order_id` Order id.
`$shippo_id` Shippo’s id for the order.
`$result['body']` Response body from Shippo.

Fires in includes/class-wp-easycart-shippo-orders.php · send()

`wp_easycart_shipstation_key_refused` ShipStation
Fires each time ShipStation refuses the store’s API key (HTTP 401, 402 or 403), after the key’s state for the settings page is recorded. The extension uses it to end the classic connection on a dead API v1 key once ShipStation has read the store feed.

**Parameters**
`$version` (string) Which key was refused: v1 or v2.
`(int) $code` (int) The HTTP status ShipStation answered: 401, 402 or 403.

Fires in includes/class-wp-easycart-shipstation-api.php · remember()

`wp_easycart_shipstation_order_touched` ShipStation
Fires when an order changes in a way ShipStation should see.

**Parameters**
`$order_id` Order id.

Fires in includes/class-wp-easycart-shipstation.php · touch()

`wp_easycart_shipstation_stock_updated` ShipStation
Fires after a product or option combination’s stock is updated from a ShipStation inventory sync.

**Parameters**
`(int) $row->product_id` Product id.
`(int) $stock[ $sku ]` New stock quantity (int).

Fires in includes/class-wp-easycart-shipstation-inventory.php · sync() +1 more place

`wp_easycart_stamps_label_bought` Stamps.com
Fires after a shipping label is bought through Stamps.com.

**Parameters**
`$order_id` Order id.
`(int) $shipment_id` Package id.
`$label` Stamps.com response data (array).

Fires in includes/class-wp-easycart-stamps-labels.php · buy()

`wp_easycart_weights_converted`
Fires after every saved weight (products, variants, option choices, boxes, weight-based shipping rates and orders’ recorded weights) is converted from one unit to another. Extensions convert their own stored weights here.

**Parameters**
`$from` (string) The old unit: lb, kg, oz or g.
`$to` (string) The new unit: lb, kg, oz or g.
`$factor` (float) What each weight was multiplied by.
`$changed` (array) Rows changed, by kind.

Fires in inc/classes/core/class-wp-easycart-packages.php · convert_weights()

`wpeasycart_shipping_rate_added` PRO
Fires after a shipping rate is added, in the admin (including live carrier rates) or by an AI assistant changing the carrier services (and its Undo).

**Parameters**
`$id` id of the new shipping rate

Fires in admin/inc/wp_easycart_admin_shipping_rates_v2.php · ajax_add() +3 more places

`wpeasycart_shipping_rate_deleting` PRO
Fires just before a shipping rate is deleted, in the admin or by an AI assistant changing the carrier services (and its Undo).

**Parameters**
`$id` id of the shipping rate about to be deleted

Fires in admin/inc/wp_easycart_admin_shipping_rates_v2.php · ajax_delete() +3 more places

`wpeasycart_shippingrate_deleted`
Fires for each shipping rate after all live carrier rates are cleared for a carrier from the store status screen.

**Parameters**
`(int) $id` id of the deleted shipping rate

Fires in admin/inc/wp_easycart_admin_store_status.php · ajax_clear_carrier_rates()

`wpeasycart_shippingrate_deleting`
Fires for each shipping rate just before all live carrier rates are cleared for a carrier from the store status screen.

**Parameters**
`(int) $id` id of the shipping rate about to be deleted

Fires in admin/inc/wp_easycart_admin_store_status.php · ajax_clear_carrier_rates()

`wpeasycart_zone_added`
Fires after a new shipping zone is created in the admin.

**Parameters**
`$zone_id` id of the new zone

Fires in admin/inc/wp_easycart_admin_shipping_settings_v2.php · ajax_zone_add()

`wpeasycart_zone_deleted`
Fires after a shipping zone is deleted in the admin.

**Parameters**
`$zone_id` id of the deleted zone

Fires in admin/inc/wp_easycart_admin_shipping_settings_v2.php · ajax_zone_delete()

`wpeasycart_zone_deleting`
Fires just before a shipping zone is deleted in the admin.

**Parameters**
`$zone_id` id of the zone about to be deleted

Fires in admin/inc/wp_easycart_admin_shipping_settings_v2.php · ajax_zone_delete()

`wpeasycart_zone_location_added`
Fires after a place (country or state) is added to a shipping zone in the admin shipping settings.

**Parameters**
`$item_id (int)` ID of the new zone-to-location row.

Fires in admin/inc/wp_easycart_admin_shipping_settings_v2.php · ajax_zone_item_add()

`wpeasycart_zone_location_deleted`
Fires after a zone-to-location row is deleted, either individually or as part of deleting a whole zone.

**Parameters**
`$item_id (int)` ID of the deleted zone-to-location row.

Fires in admin/inc/wp_easycart_admin_shipping_settings_v2.php · ajax_zone_delete() +1 more place

`wpeasycart_zone_location_deleting`
Fires just before a zone-to-location row is deleted, either individually or as part of deleting a whole zone.

**Parameters**
`$item_id (int)` ID of the zone-to-location row about to be deleted.

Fires in admin/inc/wp_easycart_admin_shipping_settings_v2.php · ajax_zone_delete() +1 more place

`wpeasycart_zone_updated`
Fires after a shipping zone is renamed in the admin shipping settings.

**Parameters**
`$zone_id (int)` ID of the renamed zone.

Fires in admin/inc/wp_easycart_admin_shipping_settings_v2.php · ajax_zone_rename()

### Taxes and fees

Grouped by what they are about

`wp_easycart_admin_fee_details`
Fires on the admin fees page when adding or editing a fee, to render the fee details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_fee.php · load_fee_list()

`wp_easycart_admin_fee_details_basic_fields` PRO
Fires inside the Flex-Fee Setup section of the fee details form in admin so fields can be added.

No parameters.

Fires in admin/template/settings/fee/fee-details.php

`wp_easycart_admin_fee_list`
Fires on the admin fees page, when not adding or editing, to render the fee list.

No parameters.

Fires in admin/inc/wp_easycart_admin_fee.php · load_fee_list()

`wp_easycart_admin_product_details_tax_fields`
Fires in the Tax card of the product editor’s Pricing section so tax fields can be added.

No parameters.

Fires in admin/inc/wp_easycart_admin_details_products_v2.php · print_tax_section_v2() +4 more places

`wp_easycart_avatax_exemption_claimed` AvaTax
Fires when a customer claims a tax exemption with an order, after the claim is saved against the order.

**Parameters**
`$order_id` (int) The order id.
`$exemption_id` (int) The exemption claim id.
`$mode` (string) How the store handles claims: honor, review or approval.

Fires in includes/class-wp-easycart-avatax-exemptions.php · order_inserted()

`wp_easycart_avatax_exemption_reviewed` AvaTax
Fires after a tax exemption claim on an order is approved or rejected.

**Parameters**
`$order_id` (int) The order id.
`$status` (string) approved or rejected.
`$exemption_id` (int) The exemption claim id.

Fires in includes/class-wp-easycart-avatax-exemptions.php · review()

`wp_easycart_eu_vat_rates_filled`
Fires after WP EasyCart fills in the EU VAT rates.

**Parameters**
`$mode` (string) oss or home.
`$home_rate` (float|null) The single rate used in home mode.

Fires in inc/classes/core/class-wp-easycart-vat.php · fill_eu()

`wp_easycart_order_pay_fees_added`
Fires when Flex-Fees are added to an order paid from its pay link, for the way it was paid.

**Parameters**
`$order_id` (int) The order id.
`$fees` (array) The fees added, each with label, rate and amount.

Fires in inc/classes/core/class-wp-easycart-order-pay.php · complete()

`wp_easycart_tax_setup_applied`
Fires after the recommended tax settings are applied.

**Parameters**
`$rec` (array) The recommendation.
`$changes` (array) What changed.

Fires in inc/classes/core/class-wp-easycart-tax-setup.php · apply()

`wp_easycart_tax_setup_undone`
Fires after the last applied tax recommendation is undone and the earlier settings are put back.

**Parameters**
`$snap` (array) The snapshot of settings put back.

Fires in inc/classes/core/class-wp-easycart-tax-setup.php · undo()

`wpeasycart_cart_subscription_pre_tax`
Fires while totals are calculated for a subscription product, just before tax services set up the subscription for tax.

**Parameters**
`$product` The subscription product object
`$subscription_quantity` Quantity of the subscription
`$shipping_total` Shipping total for the subscription
`$handling_total` Handling total for the subscription
`$discount_amount` Discount amount applied to the subscription

Fires in wpeasycart.php · wp_easycart_subscription_output_ajax_totals() +4 more places

`wpeasycart_country_added`
Fires after a country is added in the admin.

**Parameters**
`$id_cnt` ID of the new country (ec_country.id_cnt)

Fires in admin/inc/wp_easycart_admin_country.php · insert_country() +2 more places

`wpeasycart_country_deleted`
Fires after a country is deleted in the admin, singly or in bulk.

**Parameters**
`$id_cnt` ID of the deleted country

Fires in admin/inc/wp_easycart_admin_country.php · delete_country() +2 more places

`wpeasycart_country_deleting`
Fires just before a country is deleted in the admin, singly or in bulk.

**Parameters**
`$id_cnt` ID of the country about to be deleted

Fires in admin/inc/wp_easycart_admin_country.php · delete_country() +2 more places

`wpeasycart_country_updated`
Fires after a country is updated, in the admin (including bulk enabling for shipping) or through the WP EasyCart API.

**Parameters**
`$id_cnt` ID of the updated country

Fires in admin/inc/wp_easycart_admin_country.php · update_country() +5 more places

`wpeasycart_fee_added` PRO
Fires after a flex fee is created in the admin.

**Parameters**
`$fee_id` ID of the new fee (ec_fee.fee_id)

Fires in admin/inc/wp_easycart_admin_fee_pro.php · insert_fee() +3 more places

`wpeasycart_fee_deleted` PRO
Fires after a flex fee is deleted in the admin, singly or in bulk.

**Parameters**
`$fee_id` ID of the deleted fee

Fires in admin/inc/wp_easycart_admin_fee_pro.php · delete_fee() +2 more places

`wpeasycart_fee_deleting` PRO
Fires just before a flex fee is deleted in the admin, singly or in bulk.

**Parameters**
`$fee_id` ID of the fee about to be deleted

Fires in admin/inc/wp_easycart_admin_fee_pro.php · delete_fee() +2 more places

`wpeasycart_fee_updated` PRO
Fires after an existing flex fee is updated in the admin.

**Parameters**
`$fee_id` ID of the updated fee

Fires in inc/classes/core/ec_tax.php · rename_fee_role() +2 more places

`wpeasycart_state_added`
Fires after a state or region is added to a country in the admin.

**Parameters**
`$id` id of the new state or region

Fires in admin/inc/wp_easycart_admin_country_table.php · save_region() +2 more places

`wpeasycart_state_deleted`
Fires after a state or region is deleted in the admin, singly or in bulk.

**Parameters**
`$id_sta` id of the deleted state or region

Fires in admin/inc/wp_easycart_admin_states.php · delete_states() +1 more place

`wpeasycart_state_deleting`
Fires just before a state or region is deleted in the admin, singly or in bulk.

**Parameters**
`(int) $s->id_sta` id of the state or region about to be deleted

Fires in admin/inc/wp_easycart_admin_country_table.php · ecv2_region_delete() +2 more places

`wpeasycart_state_updated`
Fires after a state or region is saved or its ship-to setting is toggled, in the admin or through the WP EasyCart API.

**Parameters**
`$id` state or region id

Fires in admin/inc/wp_easycart_admin_country_table.php · save_region() +4 more places

`wpeasycart_taxrate_added`
Fires after a tax rate is added: in the admin, on the Taxes settings page, by an AI assistant (and its Undo) or through the WP EasyCart API.

**Parameters**
`$id` id of the new tax rate

Fires in admin/inc/wp_easycart_admin_tax_v2.php · ajax_rate_add() +6 more places

`wpeasycart_taxrate_deleted`
Fires after a tax rate is deleted: in the admin, on the Taxes settings page, by an AI assistant (and its Undo) or through the WP EasyCart API.

**Parameters**
`$id` id of the deleted tax rate

Fires in admin/inc/wp_easycart_admin_tax_v2.php · ajax_rate_delete() +6 more places

`wpeasycart_taxrate_deleting`
Fires just before a tax rate is deleted: in the admin, on the Taxes settings page, by an AI assistant (and its Undo) or through the WP EasyCart API.

**Parameters**
`$id` id of the tax rate about to be deleted

Fires in admin/inc/wp_easycart_admin_tax_v2.php · ajax_rate_delete() +6 more places

`wpeasycart_taxrate_updated`
Fires after a tax rate is changed: in the admin, on the Taxes settings page, by an AI assistant (and its Undo) or through the WP EasyCart API.

**Parameters**
`$id` tax rate id

Fires in admin/inc/wp_easycart_admin_tax_v2.php · ajax_rate_update() +8 more places

### Payments

Grouped by what they are about

`wp_easycart_admin_order_details_payments`
Fires on the admin order details screen in the payments area, letting extensions print payment details.

**Parameters**
`$this->order` Order row
`$wpec_pay_sum` Payment summary from wp_easycart_order_payments::summary() (array)

Fires in admin/template/orders/orders/order-details.php

`wp_easycart_bank_details_saved`
Fires after the store’s bank details (the ones shown to shoppers who pay by bank transfer) are saved.

**Parameters**
`$out` (array) The saved scheme and fields.

Fires in inc/classes/core/class-wp-easycart-bank-details.php · save()

`wp_easycart_cart_payment_payment_methods_end`
Fires on the checkout payment page after the payment method boxes have been printed, for orders that need payment.

**Parameters**
`$this` The cart page object (the $cartpage object in the v2 template).

Fires in design/layout/base-responsive-v3/ec_cart_payment.php +1 more place

`wp_easycart_display_payment_post`
Fires after the checkout payment step, including the PayPal Express payment step, has been displayed.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_payment() +1 more place

`wp_easycart_display_payment_pre`
Fires before the checkout payment step, including the PayPal Express payment step, is displayed.

No parameters.

Fires in inc/classes/cart/ec_cartpage.php · display_payment() +1 more place

`wp_easycart_display_stripe_payment_pre`
Fires on the checkout payment page just before the Stripe card field is printed, when Stripe or Stripe Connect is the payment processor.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart_payment.php

`wp_easycart_invoice_paid`
Fires after an order is marked paid: from a Stripe invoice payment on the cart page, or from the order’s pay link.

**Parameters**
`$invoice_id / $order_id` The ID of the order that was paid

Fires in inc/classes/cart/ec_cartpage.php · submit_stripe_invoice_payment() +2 more places

`wp_easycart_order_pay_complete`
Fires after an order is paid from its pay link, including payments toward the balance of an already paid order.

**Parameters**
`$order_id` Order ID (int)
`$payment` Payment details such as gateway, status, method and transaction; amount and balance (true) are added when it paid the balance of an already paid order (array)

Fires in inc/classes/core/class-wp-easycart-order-pay.php · complete() +1 more place

`wp_easycart_order_payment_corrected`
Fires after a payment recorded on an order is corrected or removed, before wpeasycart_order_updated.

**Parameters**
`$order_id` (int) The order id.
`$payment_id` (int) The payment (ec_order_transaction id).
`$done['old']` (float) Its amount before.
`$done['new']` (float) Its amount now; 0 when removed.
`$done` (array) What was done: moved (the status the order moved to, or 0), previous, note.

Fires in inc/classes/core/class-wp-easycart-order-payments.php · correct()

`wp_easycart_order_payment_recorded`
Fires after a payment is recorded against an order.

**Parameters**
`(int) $order_id` Order ID
`round( (float) $amount, 2 )` Amount paid (float)
`(array) $args` source (approved, pay_link, admin or an extension’s own), source_label, gateway, reference and balance (true for a payment toward the balance of an already paid order)

Fires in inc/classes/core/class-wp-easycart-order-payments.php · announce()

`wp_easycart_payment_gateway_mode`
Fires after a payment gateway is switched between test and live mode on the Payments admin screen.

**Parameters**
`$key` Gateway key.
`(bool) $test` True when the gateway is now in test mode, false when live.
`$gw` Gateway definition array (label, settings keys and role).

Fires in admin/inc/wp_easycart_admin_payment_v2.php · set_mode()

`wp_easycart_payment_gateway_saved`
Fires after a payment gateway’s settings are saved by the Payments admin screen’s AJAX save.

**Parameters**
`$key` Gateway key.
`$values` Submitted setting values.
`$gw` Gateway definition array (label, settings keys and role).

Fires in admin/inc/wp_easycart_admin_payment_v2.php · ajax_gateway_save()

`wp_easycart_payment_gateway_toggled`
Fires after a payment gateway is switched on or off on the Payments admin screen.

**Parameters**
`$key` Gateway key.
`(bool) $on` True when the gateway is now enabled.
`$gw` Gateway definition array (label, settings keys and role).

Fires in admin/inc/wp_easycart_admin_payment_v2.php · set_enabled()

`wp_easycart_paypal_standard_updated`
Fires after the PayPal Standard or PayPal Express settings are saved in the admin.

No parameters.

Fires in admin/inc/wp_easycart_admin_payments.php · update_paypal() +1 more place

`wp_easycart_square_apple_pay_checked`
Fires after Apple Pay’s domain set-up runs for a live Square store.

**Parameters**
`$state` (array) The result of the set-up.

Fires in inc/classes/gateway/class-wp-easycart-square-apple-pay.php · run()

`wp_easycart_stripe_payment_method_complete`
Fires after a Stripe payment method update is completed at checkout, in the AJAX request that confirms it.

**Parameters**
`$cartpage->cart` The cart object.
`$cartpage->order_totals` The order totals object.

Fires in wpeasycart.php · ec_ajax_update_payment_complete()

`wp_easycart_third_party_paid`
Fires after a third-party order is marked paid from what its third-party gateway reported.

**Parameters**
`$order_id` (int) The order id.
`$args` (array) The payment details: gateway, label, amount, currency, reference and more.

Fires in inc/classes/core/class-wp-easycart-third-party-payment.php · paid()

`wpeasycart_live_gateway_updated` PRO
Fires after a live payment gateway connection is saved, such as connecting Stripe or Square through the admin.

**Parameters**
`$payment_process_method (string)` The store’s current payment process method option, such as stripe_connect or square

Fires in admin/inc/wp_easycart_admin_payment_v2.php · set_enabled() +4 more places

`wpeasycart_manual_billing_updated`
Fires after the manual payment settings, Bill later (Pay by bank transfer), are saved.

**Parameters**
`$use_direct_deposit (int)` Value of the direct deposit option, 1 when manual billing is on

Fires in admin/inc/wp_easycart_admin_payment_v2.php · save_manual() +2 more places

`wpeasycart_order_complete`
Fires after checkout places an order that is not paid yet, such as a third-party payment waiting for its notification, instead of wpeasycart_order_paid.

**Parameters**
`$order_id` (int) The new order id.
`$order_status` (int) The order’s status id.

Fires in inc/classes/cart/ec_cartpage.php · submit_v2_free_quick_payment() +4 more places

`wpeasycart_order_pay_before_button`
Fires on the order pay link page before the payment methods are shown.

**Parameters**
`$order` The order being paid

Fires in design/layout/base-responsive-v3/ec_order_pay.php

`wpeasycart_payment_failed` PRO
Fires when a payment fails, just before the pending order is removed.

**Parameters**
`$this->order->order_id` order id about to be removed (the order_id property)
`(string) $this->process_result` the gateway’s answer or failure code, such as paypal_capture_failed
`$order_gateway` payment gateway name
`$this` the order object (ec_order)

Fires in inc/classes/cart/ec_cartpage.php · process_submit_order() +2 more places

`wpeasycart_payment_processed_successfully`
Fires after a card payment is accepted by the gateway, either approved or held for review, and the order status is set.

**Parameters**
`$this->payment` the payment gateway object
`$this->user` the customer user object

Fires in inc/classes/core/ec_order.php · submit_order() +1 more place

`wpeasycart_stripe_webhook`
Fires after a Stripe webhook event has been handled, with the event details.

**Parameters**
`$webhook_id` Stripe event id
`$webhook_type` Stripe event type
`$webhook_data` the event data object

Fires in wpeasycart.php · wp_easycart_webhook_catch()

`wpeasycart_stripe_webhook_order_refunded`
Fires after a Stripe refund has been recorded on an order, from a charge refunded event.

**Parameters**
`$order_id` order id

Fires in wpeasycart.php · wp_easycart_stripe_charge_refunded() +1 more place

`wpeasycart_third_party_checkout_box`
Fires in the third-party checkout button area of the cart, after the built-in options like Affirm, so extensions can add a button.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart_invoice.php +2 more places

`wpeasycart_third_party_payment_updated` PRO
Fires after the selected third-party payment method is changed in the admin.

**Parameters**
`$third_party` key of the selected third-party gateway (0 if none)

Fires in admin/inc/wp_easycart_admin_payment_v2.php · turn_off_retired() +6 more places

### Email and notifications

Grouped by what they are about

`wp_easycart_document_branding_saved`
Fires after branding settings for a document type and profile (such as receipts or invoices) are saved.

**Parameters**
`$type` The document type (string).
`$id` The profile ID (string).
`$clean` The sanitized branding values that were saved (array).

Fires in inc/classes/core/class-wp-easycart-documents.php · save_branding()

`wp_easycart_document_email_links`
Fires in the receipt and shipping emails where links to download the order’s documents can be printed.

**Parameters**
`'receipt'` The email type, receipt or shipping (string).
`(int) $this->order_id` ID of the order (int).
`$is_admin ? 'admin' : 'customer'` Who receives the email: admin or customer (string).

Fires in design/layout/base-responsive-v3/ec_cart_email_receipt.php +1 more place

`wp_easycart_document_profile_deleted`
Fires after a document profile (such as a receipt or invoice layout profile) is deleted.

**Parameters**
`$type` The document type (string).
`$id` The ID of the deleted profile (string).

Fires in inc/classes/core/class-wp-easycart-documents.php · delete_profile()

`wp_easycart_document_profile_saved`
Fires after a document profile (such as a receipt or invoice layout profile) is saved.

**Parameters**
`$type` The document type (string).
`$id` The profile ID (string).
`$values` The profile values that were saved (array).

Fires in inc/classes/core/class-wp-easycart-documents.php · save_profile()

`wp_easycart_email_logged`
Fires after an email attempt is recorded in the email log.

**Parameters**
`$id` ID of the new email log row (int)
`$status` Send status, such as sent or failed
`$transport` Transport used to send the email
`$type` Email type
`$order_id` Related order ID

Fires in inc/classes/core/ec_email.php · record()

`wp_easycart_email_receipt_optionitems`
Fires inside each item of the order receipt and invoice emails, after the item’s details, so extensions can add detail rows for the item.

**Parameters**
`$ec_invoice_item` The order line item object (the receipt template passes $ec_receipt_item)

Fires in design/layout/base-responsive-v3/ec_cart_email_invoice.php +2 more places

`wp_easycart_email_receipt_pre_items`
Fires in the receipt and refund emails before the items list, so extensions can print whole table rows into the email.

**Parameters**
`$this->order_id` Order ID
`$is_admin` Whether the email is the admin copy

Fires in design/layout/base-responsive-v3/ec_cart_email_receipt.php +1 more place

`wp_easycart_email_receipt_top`
Fires at the top of the receipt and invoice emails, so extensions can print whole table rows into the email.

**Parameters**
`$this->order_id` Order ID
`$is_admin` Whether the email is the admin copy

Fires in design/layout/base-responsive-v3/ec_cart_email_invoice.php +2 more places

`wp_easycart_gift_receipt_after`
Fires at the end of the gift receipt document, before the closing footer.

**Parameters**
`$document` The gift receipt document object

Fires in design/layout/base-responsive-v3/ec_gift_receipt.php

`wp_easycart_gift_receipt_line_item`
Fires inside each line item of the gift receipt document, after the item’s options.

**Parameters**
`$ec_gr_line` The order line item
`$document` The gift receipt document object

Fires in design/layout/base-responsive-v3/ec_gift_receipt.php

`wp_easycart_invoice_email_after`
Fires at the end of the invoice email document, before the closing footer.

**Parameters**
`$document` The invoice email document object

Fires in design/layout/base-responsive-v3/ec_invoice_email.php

`wp_easycart_invoice_email_line_item`
Fires inside each line item of the invoice email, after the item’s options.

**Parameters**
`$ec_ie_line` The order line item
`$document` The invoice email document object

Fires in design/layout/base-responsive-v3/ec_invoice_email.php

`wp_easycart_invoice_pdf_after`
Fires at the end of the invoice PDF document, before the closing footer.

**Parameters**
`$document` The invoice PDF document object

Fires in design/layout/base-responsive-v3/ec_invoice_pdf.php

`wp_easycart_order_email_receipt_after_success_lines`
Fires in the receipt and refund emails right after the opening success lines, so extensions can add content.

**Parameters**
`$this` The order display object building the email

Fires in design/layout/base-responsive-v3/ec_cart_email_receipt.php +1 more place

`wp_easycart_packing_slip_after`
Fires at the end of the packing slip document, before the closing footer.

**Parameters**
`$document` The packing slip document object

Fires in design/layout/base-responsive-v3/ec_admin_packaging_slip.php

`wp_easycart_subscriber_changed`
Fires when a newsletter subscriber is subscribed, unsubscribed or updated, at most once per address and state in a request.

**Parameters**
`$email` (string) The subscriber’s email address.
`$state` (string) subscribed, unsubscribed or updated.
`$context` (array) subscriber_id, first_name, last_name, old_email (when the address changed) and source (where the change came from).

Fires in inc/classes/core/class-wp-easycart-subscribers.php · fire()

`wp_easycart_subscription_reminder_sent`
Fires after the reminder run (daily, or Send due reminders now in the email settings) emails a subscriber a renewal reminder or a free trial ending reminder.

**Parameters**
`(int) $row->subscription_id` (int) The ec_subscription id.
`$item['kind']` (string) renewal or trial.
`(int) $check['at']` (int) The renewal or the trial end the reminder is about (timestamp).

Fires in inc/classes/core/class-wp-easycart-subscription-reminders.php · process()

`wpeasycart_custom_admin_inquiry_email`
Fires instead of the built-in mailer when the store email method is custom, so a custom handler can send the admin’s product inquiry email.

**Parameters**
`$from` From email address (order from email option)
`$inquiry_email` Email address of the shopper who sent the inquiry
`$store_email` Store email address to notify
`$admin_subject` Subject of the admin email
`$admin_message` Body of the admin email

Fires in inc/classes/cart/ec_cartpage.php · process_send_inquiry()

`wpeasycart_custom_forgot_password_email`
Fires instead of the built-in mailer when the store email method is custom, so a custom handler can send the forgot password email.

**Parameters**
`$from` From email address (password from email option)
`$email` Recipient customer email
`$cc` Empty string, unused
`$subject` Email subject
`$message` Email body

Fires in admin/inc/wp_easycart_admin_users.php · send_password_reset_email() +1 more place

`wpeasycart_custom_inquiry_email`
Fires instead of the built-in mailer when the store email method is custom, so a custom handler can send the shopper’s copy of a product inquiry.

**Parameters**
`$from` From email address (order from email option)
`$inquiry_email` Email address of the shopper who sent the inquiry
`$store_email` Store email address
`$subject` Email subject
`$message` Email body

Fires in inc/classes/cart/ec_cartpage.php · process_send_inquiry()

`wpeasycart_custom_order_claim_email`
Fires instead of the built-in mailer when the store email method is custom, so a custom handler can send the order claim (Connect order link) email.

**Parameters**
`$from` From email address (password from email option)
`$order_email` Recipient email address
`$cc` Empty string, unused
`$title` Email subject
`$message` Email body

Fires in inc/classes/account/ec_accountpage.php · send_order_claim_email()

`wpeasycart_custom_order_email` PRO
Fires instead of the built-in mailer when the store’s email method is custom, so your handler can send the order receipt, an invoice or another order email; it fires once for the customer’s address and again for the order’s extra email address.

**Parameters**
`stripslashes( get_option( 'ec_option_order_from_email' ) )` (string) The order from email address.
`$custom_to` (string) The recipient addresses.
`$admin_to` (string) The store’s copy addresses, or empty.
`$customer_title` (string) The email subject.
`$message` (string) The email body.
`$customer_attachments` (array) Attachments.

Fires in admin/inc/wp_easycart_admin_orders.php · send_customer_shipping_email() +8 more places

`wpeasycart_custom_refund_email`
Fires instead of the built-in mailer when the store’s email method is custom, so your handler can send the refund email; it fires once for the customer’s address and again for the order’s extra email address.

**Parameters**
`stripslashes( get_option( 'ec_option_order_from_email' ) )` (string) The order from email address.
`$custom_to` (string) The recipient addresses.
`$admin_to` (string) The store’s copy addresses, or empty.
`$customer_title` (string) The email subject.
`$message` (string) The email body.

Fires in inc/classes/account/ec_orderdisplay.php · send_refund_email() +1 more place

`wpeasycart_custom_register_verification_email`
Fires instead of the built-in mailer when the store email method is custom, so a custom handler can send the account verification email.

**Parameters**
`$from` From email address (password from email option)
`$email` Recipient email address
`$cc` Empty string, unused
`$subject` Email subject
`$message` Email body

Fires in wpeasycart.php · wp_easycart_send_activation_email()

`wpeasycart_custom_store_email`
Fires when the email transport is set to custom, so a listener can deliver any store email itself.

**Parameters**
`$from` From email address
`$to` Recipient email address
`$cc` Empty string, unused
`$subject` Email subject
`$message` Email body
`$attachments (array)` File attachments

Fires in inc/classes/core/ec_email.php · deliver()

`wpeasycart_email_receipt_line_item`
Fires for each line item in the receipt or invoice email, where extra detail rows (table rows) can be added under the item.

**Parameters**
`$model_number` Model number of the order item
`$orderdetail_id` ID of the order detail row (order line)

Fires in design/layout/base-responsive-v3/ec_cart_email_invoice.php +3 more places

`wpeasycart_email_receipt_order_notes_after`
Fires in the receipt and refund emails after the order notes, before the closing lines of the message.

**Parameters**
`$order_id` ID of the order

Fires in design/layout/base-responsive-v3/ec_cart_email_receipt.php +1 more place

`wpeasycart_remove_subscriber`
Fires just before an email address is removed from the newsletter subscriber list, from the admin or the store.

**Parameters**
`$email` subscriber email address

Fires in admin/inc/wp_easycart_admin_subscriber_table.php · ecv2_subscriber_bulk() +1 more place

`wpeasycart_subscriber_added`
Fires after an email address is added to the newsletter subscriber list: from a signup form or popup, or when a subscriber is added or restored in the admin.

**Parameters**
`$newsletter_email` (string) The subscriber’s email address.
`$newsletter_name` (string) The subscriber’s name, if given.

Fires in wpeasycart.php · load_ec_pre() +3 more places

`wpeasycart_subscriber_deleted`
Fires after a subscriber is deleted from the subscribers admin table.

**Parameters**
`$email` subscriber email address
`(int) $r['subscriber_id']` subscriber id

Fires in admin/inc/wp_easycart_admin_subscriber_table.php · ecv2_subscriber_bulk()

`wpeasycart_subscriber_deleting`
Fires just before a subscriber is deleted from the subscribers admin table.

**Parameters**
`(int) $r['subscriber_id']` subscriber id

Fires in admin/inc/wp_easycart_admin_subscriber_table.php · ecv2_subscriber_bulk()

`wpeasycart_subscriber_updated`
Fires after a subscriber’s email or name is edited inline in the admin.

**Parameters**
`$id` subscriber id

Fires in admin/inc/wp_easycart_admin_subscriber_table.php · ecv2_subscriber_inline_update()

### Offers and coupons

Grouped by what they are about

`wp_easycart_admin_coupon_details`
Fires on the admin coupons page when adding or editing a coupon, to render the coupon details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_coupons.php · load_coupons_list()

`wp_easycart_admin_coupon_details_stepfour_fields` PRO
Fires inside the Step Four section of the admin coupon details form so fields can be added.

No parameters.

Fires in admin/template/marketing/coupons/coupon-details.php

`wp_easycart_admin_coupon_details_stepone_fields` PRO
Fires inside the Step One section of the admin coupon details form so fields can be added.

No parameters.

Fires in admin/template/marketing/coupons/coupon-details.php

`wp_easycart_admin_coupon_details_stepthree_fields` PRO
Fires inside the Step Three section of the admin coupon details form so fields can be added.

No parameters.

Fires in admin/template/marketing/coupons/coupon-details.php

`wp_easycart_admin_coupon_details_steptwo_fields` PRO
Fires inside the Step Two section of the admin coupon details form so fields can be added.

No parameters.

Fires in admin/template/marketing/coupons/coupon-details.php

`wp_easycart_admin_coupon_list`
Fires on the admin coupons page, when not adding or editing a coupon, to render the coupon list.

No parameters.

Fires in admin/inc/wp_easycart_admin_coupons.php · load_coupons_list()

`wp_easycart_admin_offers_hub`
Fires when the admin Offers hub page loads, so the hub can be rendered.

No parameters.

Fires in admin/inc/wp_easycart_admin_offers.php · load_offers_hub()

`wp_easycart_admin_product_details_v2_offers_end`
Fires at the end of the product editor’s Offers section (Insights), after the offers list.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_admin_product_details_v2_offers_pro`
Fires when the product editor’s Offers section (Insights) is drawn and the PRO offers panel is enabled, so PRO can print the live offers list.

**Parameters**
`$this->product` The product being edited (object).

Fires in admin/inc/wp_easycart_admin_details_products_v2.php · print_offers_v2()

`wp_easycart_admin_promotion_details`
Fires when the promotions admin page is showing the add-new or edit promotion form, so PRO can print the promotion details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_promotions.php · load_promotions_list()

`wp_easycart_admin_promotion_details_stepfour_fields` PRO
Fires in step four of the promotion edit form, where the discount amount is set, so PRO can print those fields.

No parameters.

Fires in admin/template/marketing/promotions/promotion-details.php

`wp_easycart_admin_promotion_details_stepone_fields` PRO
Fires in step one of the promotion edit form, where the name and start and end dates are set, so PRO can print those fields.

No parameters.

Fires in admin/template/marketing/promotions/promotion-details.php

`wp_easycart_admin_promotion_details_stepthree_fields` PRO
Fires in step three of the promotion edit form, where the products or price threshold are chosen, so PRO can print those fields.

No parameters.

Fires in admin/template/marketing/promotions/promotion-details.php

`wp_easycart_admin_promotion_details_steptwo_fields` PRO
Fires in step two of the promotion edit form, where the promotion type is chosen, so PRO can print those fields.

No parameters.

Fires in admin/template/marketing/promotions/promotion-details.php

`wp_easycart_admin_promotion_list`
Fires when the promotions admin page shows the promotions list rather than the add-new or edit form.

No parameters.

Fires in admin/inc/wp_easycart_admin_promotions.php · load_promotions_list()

`wp_easycart_coupon_created` PRO
Fires after a coupon is created in the admin, whether or not it was a duplicate.

**Parameters**
`$promocode_id` ID of the coupon (promo code).

Fires in admin/inc/wp_easycart_admin_coupons_pro.php · insert_coupon()

`wp_easycart_coupon_deleted` PRO
Fires after a coupon has been deleted from the admin and from Stripe when Stripe is the processor.

**Parameters**
`$promocode_id` ID of the deleted coupon (promo code).

Fires in admin/inc/wp_easycart_admin_coupons_pro.php · delete_coupon()

`wp_easycart_coupon_deleting` PRO
Fires just before a coupon is deleted from the database in the admin.

**Parameters**
`$promocode_id` ID of the coupon (promo code) about to be deleted.

Fires in admin/inc/wp_easycart_admin_coupons_pro.php · delete_coupon()

`wp_easycart_coupon_updated` PRO
Fires after a coupon has been updated in the admin and synced to Stripe when Stripe is the processor.

**Parameters**
`$promocode_id` ID of the updated coupon (promo code).

Fires in admin/inc/wp_easycart_admin_coupons_pro.php · update_coupon()

`wp_easycart_offer_code_applied` PRO
Fires after an offer code is applied to a shopper’s cart session.

**Parameters**
`$offer` The offer object
`$code` The code that was applied
`$session_id` The cart session ID

Fires in inc/classes/core/ec_offer_engine.php · apply_code()

`wp_easycart_offer_code_deleted` PRO
Fires after an offer code is deleted.

**Parameters**
`(int) $offer_code_id` The deleted offer code ID
`(int) $offer_id` The offer it belonged to
`(string) $code` The code text

Fires in inc/classes/core/ec_offer_bootstrap.php · wp_easycart_offers_fire_code_deleted()

`wp_easycart_offer_code_removed` PRO
Fires after an offer code is removed from a shopper’s cart session.

**Parameters**
`$code` The removed code (sanitized)
`$session_id` The cart session ID

Fires in inc/classes/core/ec_offer_engine.php · remove_code()

`wp_easycart_offer_codes_changed` PRO
Fires when an offer’s list of codes changes, including when a new offer is made with codes, once per offer per request.

**Parameters**
`(int) $offer_id` The offer whose codes changed

Fires in inc/classes/core/ec_offer_bootstrap.php · wp_easycart_offers_fire_codes_changed() +1 more place

`wp_easycart_offer_codes_deactivated` PRO
Fires after an offer’s codes are deactivated.

**Parameters**
`$offer_id` Offer ID
`$result` What deactivate() returned (array)

Fires in inc/classes/core/ec_offer_codes.php · deactivate()

`wp_easycart_offer_codes_imported` PRO
Fires after codes are imported into an offer, or generated for it.

**Parameters**
`$offer_id` Offer ID
`$result` What import() returned (array); for generated codes it holds added and generated
`$args` The import’s arguments (array), including its source

Fires in inc/classes/core/ec_offer_codes.php · import() +1 more place

`wp_easycart_offer_codes_moved` PRO
Fires after codes are moved from one offer to another.

**Parameters**
`$from_offer_id` Offer the codes came from
`$to_offer_id` Offer the codes went to
`$moved` How many codes were moved (int)
`$which` Which codes were moved (string): available or all

Fires in inc/classes/core/ec_offer_codes.php · move()

`wp_easycart_offer_created` PRO
Fires after a new offer is created, once per offer per request, after its row is written (WP EasyCart PRO).

**Parameters**
`$offer_id` (int) The offer id.

Fires in inc/classes/core/ec_offer_bootstrap.php · wp_easycart_offers_fire_created()

`wp_easycart_offer_deleted` PRO
Fires after an offer is deleted. Offers with redemptions are archived instead and fire wp_easycart_offer_saved.

**Parameters**
`(int) $offer_id` The deleted offer ID

Fires in inc/classes/core/ec_offer_bootstrap.php · wp_easycart_offers_fire_deleted()

`wp_easycart_offer_deleting` PRO
Fires just before an offer is deleted, from the Offers list or through the WP EasyCart API, while all its rows are still there (WP EasyCart PRO).

**Parameters**
`$offer_id` (int) The offer id.

Fires in inc/classes/core/wp_easycart_offer_writer.php · remove()

`wp_easycart_offer_order_placed` PRO
Fires after an order is placed and its offer results are processed.

**Parameters**
`$order_id` Order ID
`$result` The offer engine result for the order (object), including any pending rewards

Fires in inc/classes/core/ec_offer_integration.php · order_placed()

`wp_easycart_offer_redemptions_recorded` PRO
Fires after offer redemptions for an order are recorded and the cart’s applied codes are cleared.

**Parameters**
`$order_id` Order ID
`$result` The offer engine result for the order

Fires in inc/classes/core/ec_offer_engine.php · record_redemptions()

`wp_easycart_offer_redemptions_reversed` PRO
Fires after an order’s offer redemptions are reversed, when the order is canceled or fully refunded.

**Parameters**
`$order_id` Order ID

Fires in inc/classes/core/ec_offer_engine.php · reverse_redemptions()

`wp_easycart_offer_reward_code` PRO
Fires after a next-order reward code is created for a customer as an offer reward.

**Parameters**
`$order` The order object
`$code` The new reward code
`(int) $reward['next_order_offer_id']` ID of the offer the code belongs to

Fires in inc/classes/core/ec_offer_integration.php · deliver_reward()

`wp_easycart_offer_reward_giftcard` PRO
Fires after a gift card is created as an offer reward for an order.

**Parameters**
`$order` The order object
`$giftcard_id` The new gift card code
`(float) $reward['value']` The gift card amount

Fires in inc/classes/core/ec_offer_integration.php · deliver_reward()

`wp_easycart_offer_saved` PRO
Fires after an offer is saved (including being archived), once per offer per request.

**Parameters**
`(int) $offer_id` The offer ID

Fires in inc/classes/core/ec_offer_bootstrap.php · wp_easycart_offers_fire_saved()

`wp_easycart_offer_subscription_redeemed` PRO
Fires after an offer code is redeemed on a subscription order.

**Parameters**
`(int) $order->order_id` Order ID
`(int) $offer->offer_id` Offer ID
`(int) $code_row->offer_code_id` Offer code ID
`(string) $code_row->code` The code text

Fires in inc/classes/core/ec_offer_subscriptions.php · record()

`wp_easycart_offers_loaded` PRO
Fires once the Pro offers system has finished loading its classes and registering hooks.

No parameters.

Fires in inc/classes/core/ec_offer_bootstrap.php · wp_easycart_offers_bootstrap()

`wpeasycart_promotion_added` PRO
Fires after a new promotion is saved in the admin.

**Parameters**
`$promotion_id` id of the new promotion

Fires in admin/inc/wp_easycart_admin_promotions_pro.php · insert_promotion()

`wpeasycart_promotion_deleted` PRO
Fires after a promotion is deleted in the admin, singly or in bulk.

**Parameters**
`$promotion_id` id of the deleted promotion

Fires in admin/inc/wp_easycart_admin_promotions_pro.php · delete_promotion() +1 more place

`wpeasycart_promotion_deleting` PRO
Fires just before a promotion is deleted in the admin, singly or in bulk.

**Parameters**
`$promotion_id` id of the promotion about to be deleted

Fires in admin/inc/wp_easycart_admin_promotions_pro.php · delete_promotion() +1 more place

`wpeasycart_promotion_updated` PRO
Fires after an existing promotion is updated in the admin.

**Parameters**
`$promotion_id` promotion id

Fires in admin/inc/wp_easycart_admin_promotions_pro.php · update_promotion()

### Reviews

Grouped by what they are about

`wp_easycart_admin_product_details_v2_reviews_end`
Fires at the end of the product editor’s Reviews section (Insights), after the reviews list.

**Parameters**
`$product` The product being edited (object).

Fires in admin/template/products/products/product-details-v2.php

`wp_easycart_review_approval_changed`
Fires after a review is shown or hidden through the review writer, after the older review hooks, with who asked.

**Parameters**
`$review_id` (int) The review id.
`$approved` (bool) Whether it is shown now.
`$source` (string) Who asked, such as admin, product_editor or api.

Fires in inc/classes/core/class-wp-easycart-review-writer.php · set_approved()

`wp_easycart_review_created`
Fires after a review is added from code through the review writer (the WP EasyCart API), after wpeasycart_review_added.

**Parameters**
`$review_id` (int) The review id.
`$source` (string) Who asked, such as api.

Fires in inc/classes/core/class-wp-easycart-review-writer.php · create()

`wpeasycart_custom_review_email`
Fires instead of the built-in mailer when the store email method is custom, so a custom handler can send a review request email.

**Parameters**
`$from` From email address
`$to` Recipient email address
`$subject` Email subject
`$message` Email body

Fires in inc/classes/core/ec_reviews.php · send_mail()

`wpeasycart_review_added`
Fires after a new product review is saved, from the storefront or through the WP EasyCart API, before the store notification email is sent.

**Parameters**
`$review_id` id of the new review

Fires in inc/classes/core/class-wp-easycart-review-writer.php · create() +1 more place

`wpeasycart_review_approved`
Fires after a review is approved, in the admin (singly or in bulk), the product editor or through the WP EasyCart API.

**Parameters**
`$review_id` review id

Fires in inc/classes/core/class-wp-easycart-review-writer.php · set_approved()

`wpeasycart_review_deleted`
Fires after a review is deleted through the review writer, in the admin or through the WP EasyCart API.

**Parameters**
`$review_id` (int) The review id.
`$row` (array) The review as it was.
`$source` (string) Who asked, such as admin or api.

Fires in inc/classes/core/class-wp-easycart-review-writer.php · delete()

`wpeasycart_review_deleting`
Fires just before a review is deleted, in the admin (singly or in bulk) or through the WP EasyCart API.

**Parameters**
`$review_id` id of the review about to be deleted

Fires in admin/inc/wp_easycart_admin_reviews.php · bulk_delete_review() +1 more place

`wpeasycart_review_processed`
Fires after a new review has been processed by the reviews engine (verified purchase, moderation rules) and its updated fields are saved.

**Parameters**
`$review_id` review id
`$update` array of review columns that were updated

Fires in inc/classes/core/ec_reviews.php · on_review_submitted()

`wpeasycart_review_replied`
Fires after the merchant’s reply to a review is saved or cleared.

**Parameters**
`(int) $review_id` review id
`$text` the sanitized reply text (empty when the reply was removed)

Fires in inc/classes/core/ec_reviews.php · set_reply()

`wpeasycart_review_status_updated`
Fires after a review’s approved status is changed: in the admin reviews list, the product editor or through the WP EasyCart API.

**Parameters**
`$review_id` review id
`$approved` 1 if approved, 0 if not (int)

Fires in inc/classes/core/class-wp-easycart-review-writer.php · set_approved()

`wpeasycart_review_submitted`
Fires once for each new customer review saved, before wpeasycart_review_added, so the reviews engine can claim request links and apply moderation.

**Parameters**
`$review_id` id of the new review

Fires in inc/classes/core/ec_db.php · submit_customer_review()

`wpeasycart_review_unapproved`
Fires after a review is unapproved, in the admin (singly or in bulk), the product editor or through the WP EasyCart API.

**Parameters**
`$review_id` review id

Fires in inc/classes/core/class-wp-easycart-review-writer.php · set_approved()

`wpeasycart_review_updated`
Fires after a review is changed: an approve toggle or a saved edit in the admin, or an approval change from the product editor or the WP EasyCart API.

**Parameters**
`(int) $id` review id

Fires in admin/inc/wp_easycart_admin_review_table.php · ecv2_review_save() +1 more place

### Reports and analytics

Grouped by what they are about

`wp_easycart_admin_reports_order_sources`
Fires when the reports page is ready to print the Sales by source card, so PRO can print it.

No parameters.

Fires in inc/classes/core/class-wp-easycart-order-source.php · reports_card()

`wp_easycart_dashboard_reports_links_end`
Fires at the end of the report download list in the dashboard export modal, so extra report download rows can be added.

No parameters.

Fires in admin/template/dashboard.php

`wp_easycart_dashboard_reports_links_start`
Fires at the start of the report download list in the dashboard export modal, so extra report download rows can be added.

No parameters.

Fires in admin/template/dashboard.php

`wp_easycart_order_source_saved`
Fires after an order’s source attribution (where the order came from) is saved.

**Parameters**
`$order_id` Order ID
`$row` The source values saved on the order (array)

Fires in inc/classes/core/class-wp-easycart-order-source.php · stamp()

`wp_easycart_product_views_sent`
Fires after a product page’s view events are sent (the product view hook, Meta Pixel, Reports, Google Analytics, structured data), with the parts sent this time.

**Parameters**
`$done` (array) The parts sent now: hook, meta, reports, ga4 or schema.
`$product` (ec_product) The product.
`$args` (array) The send() arguments.

Fires in inc/classes/core/class-wp-easycart-product-views.php · send()

`wp_easycart_reports_filters_post`
Fires at the end of the filter bar on the Reports dashboard, after the built-in filters.

No parameters.

Fires in admin/template/dashboard.php

`wp_easycart_reports_filters_pre`
Fires at the start of the filter bar on the Reports dashboard, before the built-in filters.

No parameters.

Fires in admin/template/dashboard.php

`wp_easycart_store_activity_daily_done`
Fires after the daily store activity housekeeping finishes.

No parameters.

Fires in inc/classes/core/class-wp-easycart-store-activity.php · daily()

### Admin screens and settings

Grouped by what they are about

`wp_easycart_admin_abandon_cart_load`
Fires when the admin Abandoned Carts page loads, so the page content can be rendered.

No parameters.

Fires in admin/inc/wp_easycart_admin_abandon_cart.php · load_abandon_cart()

`wp_easycart_admin_ai_assistant_steps`
Fires on the AI assistants settings page where the set-up steps of an assistant added through the wp_easycart_admin_ai_assistants filter are printed, so you can print its steps.

**Parameters**
`$key` (string) The assistant key.

Fires in admin/inc/wp_easycart_admin_ai_assistants.php · print_assistant_steps()

`wp_easycart_admin_dashboard_post`
Fires at the end of the admin dashboard page, after the reports content and before its scripts.

No parameters.

Fires in admin/template/dashboard.php

`wp_easycart_admin_dashboard_pre_chart`
Fires at the top of the admin dashboard page, before the reports chart is set up.

No parameters.

Fires in admin/template/dashboard.php

`wp_easycart_admin_ecv2_render_modals`
Fires after an admin V2 list table prints its built-in modals, and before the toast container.

**Parameters**
`$this->table_id` Id of the table being printed

Fires in admin/inc/wp_easycart_admin_table_v2.php · print_table()

`wp_easycart_admin_head_navigation`
Fires inside the Help dropdown in the admin top bar so extra links can be added.

No parameters.

Fires in admin/template/admin-frame.php

`wp_easycart_admin_inventory_cell_{col}`
Fires to print a custom column cell in the admin inventory table; {col} is the column name. Only fires when a callback is attached.

**Parameters**
`$result` Inventory row for the product or variant
`$this->pro_enabled` Whether PRO is enabled (bool)

Fires in admin/inc/wp_easycart_admin_inventory_table.php · print_cell_content()

`wp_easycart_admin_inventory_qty_pop`
Fires inside the quantity adjustment popover in the admin inventory table so extra fields, such as a reason, can be added.

**Parameters**
`$result` Inventory row
`$this->pro_gate` PRO gate details for the feature (array)

Fires in admin/inc/wp_easycart_admin_inventory_table.php · print_quantity_cell()

`wp_easycart_admin_inventory_row_menu`
Fires inside the row action menu of the admin inventory table, only when PRO is enabled, so menu items can be added.

**Parameters**
`$result` Inventory row

Fires in admin/inc/wp_easycart_admin_inventory_table.php · print_row_actions()

`wp_easycart_admin_inventory_toolbar`
Fires in the admin inventory page toolbar so PRO buttons such as Import, Activity and Alerts can be added.

**Parameters**
`$this->pro_gate` PRO gate details (array)

Fires in admin/inc/wp_easycart_admin_inventory_table.php · print_page_header()

`wp_easycart_admin_left_navigation`
Fires inside the admin sidebar navigation so menu items can be added.

No parameters.

Fires in admin/template/admin-frame.php

`wp_easycart_admin_location_details`
Fires on the admin locations page when adding or editing a location, to render the location details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_location.php · load_location_list()

`wp_easycart_admin_location_list`
Fires on the admin locations page, when not adding or editing, to render the location list after the tabs.

No parameters.

Fires in admin/inc/wp_easycart_admin_location.php · load_location_list()

`wp_easycart_admin_messages`
Fires at the top of the admin content area so notices and messages can be printed.

No parameters.

Fires in admin/template/admin-frame.php

`wp_easycart_admin_mobile_navigation`
Fires after the admin shell content, so the mobile navigation can be printed.

No parameters.

Fires in admin/template/admin-frame.php

`wp_easycart_admin_readiness_acknowledged`
Fires after a store readiness checklist item is marked as acknowledged, or the acknowledgement is taken back, on the store status screen.

**Parameters**
`$key` The readiness item key that was acknowledged.
`$on ? 1 : 0` 1 when the item was acknowledged, 0 when the acknowledgement was removed.

Fires in admin/inc/wp_easycart_admin_store_status.php · set_acknowledged()

`wp_easycart_admin_registration_dev_sites`
Fires on the Registration & activation page where a license’s development sites are shown: below the intro when no license is attached to this site, and below the license card when one is. WP EasyCart PRO prints its Development sites card here.

**Parameters**
`$status` (string) deactivated (no license on this site) or activated (the licensed view), passed as a literal at each call.

Fires in admin/template/registration/registration-status-v2.php +1 more place

`wp_easycart_admin_shell_content`
Fires inside the main content area of the WP EasyCart admin shell, after admin messages, so the current admin page can print its content.

No parameters.

Fires in admin/template/admin-frame.php

`wp_easycart_admin_upsell_popup`
Fires at the top of the WP EasyCart admin shell, before the license renewal popup, so the upsell popup markup can be printed.

No parameters.

Fires in admin/template/admin-frame.php

`wp_easycart_admin_wizard_content`
Fires inside the main card of the setup wizard shell so the current wizard step can print its content.

No parameters.

Fires in admin/template/settings/wizard/wizard-frame.php

`wp_easycart_admin_wizard_navigation`
Fires in the setup wizard shell after the header bar and before the wizard content grid, so the step navigation can be printed.

No parameters.

Fires in admin/template/settings/wizard/wizard-frame.php

`wp_easycart_ecv2_cart_link_drawer_fields`
Fires inside the cart link builder drawer in the admin, between the product items section and the ‘When the link is opened’ section, so extensions can add fields.

No parameters.

Fires in admin/template/marketing/cart-links/cart-links.php

`wp_easycart_ecv2_cart_link_drawer_items_end`
Fires at the end of the Product section of the cart link builder drawer, right after the product items list.

No parameters.

Fires in admin/template/marketing/cart-links/cart-links.php

`wp_easycart_ecv2_cart_link_enqueue`
Fires at the end of enqueueing the admin scripts and styles for the cart links page, so extensions can enqueue their own assets.

No parameters.

Fires in admin/inc/wp_easycart_admin_cart_links.php · enqueue_assets()

`wp_easycart_ecv2_cart_link_page_end`
Fires at the end of the cart links admin page, after the links table and pagination and before the builder drawer markup.

No parameters.

Fires in admin/template/marketing/cart-links/cart-links.php

`wp_easycart_ecv2_cart_link_row_contents`
Fires inside the product summary cell of each row of the cart links table, after the product names are printed.

**Parameters**
`$link` Cart link row object (cart_link_id, url, summary, item_count, destination, use_count and so on)

Fires in admin/inc/wp_easycart_admin_cart_links.php · print_link_row()

`wp_easycart_ecv2_cart_link_row_menu`
Fires inside each cart link row’s actions menu, after the Edit and Copy link items, so extensions can add menu items.

**Parameters**
`$link` Cart link row object

Fires in admin/inc/wp_easycart_admin_cart_links.php · print_link_row()

`wp_easycart_ecv2_cart_link_row_uses`
Fires inside the ‘uses’ cell of each cart link row, right after the use count is printed.

**Parameters**
`$link` Cart link row object

Fires in admin/inc/wp_easycart_admin_cart_links.php · print_link_row()

`wp_easycart_ecv2_cart_link_saved_banner`
Fires in the banner shown after a cart link is created or updated, after the Copy link button, so extensions can add banner buttons.

**Parameters**
`$ecv2_cl_saved_link` The cart link object that was just saved

Fires in admin/template/marketing/cart-links/cart-links.php

`wp_easycart_extension_page_{sub}`
Renders a custom extension admin page. {sub} is the extension page slug from the URL; the hook fires when an extension registers a callback for that slug.

No parameters.

Fires in admin/inc/wp_easycart_admin_extensions.php · render_page()

`wp_easycart_extensions_page_notice`
Fires above the catalog on the Extensions admin page so notices can be printed.

No parameters.

Fires in admin/template/extensions/extensions-v2.php

`wp_easycart_extensions_refresh`
Fires when Refresh or Check again on the Extensions page asks for a fresh check, after WP EasyCart forgets its kept answers about the license, WP EasyCart Premium and the extensions catalog; clear your own cached answers here. WP EasyCart PRO forgets its Premium availability answer and license data on it.

No parameters.

Fires in admin/inc/wp_easycart_admin_extensions.php · forget_cached_answers()

`wp_easycart_main_nav_left_end`
Fires at the end of the admin left navigation, so extensions can add navigation items.

No parameters.

Fires in admin/template/left_nav.php

`wp_easycart_pro_license_key_recovered` PRO
Fires after WP EasyCart PRO saves a license key that WP EasyCart Connect sent back for a store licensed by its site address with no key saved, from the background check scheduled by an administrator’s admin page load.

No parameters.

Fires in license/wp_easycart_license_recovery.php · run()

`wp_easycart_process_get_form_action`
Fires in the admin when a request carries ec_admin_form_action in the query string and the user is an administrator or store manager.

No parameters.

Fires in admin/inc/wp_easycart_admin_actions.php · process_action()

`wp_easycart_process_post_form_action`
Fires in the admin when a form post carries ec_admin_form_action and the user is an administrator or store manager.

No parameters.

Fires in admin/inc/wp_easycart_admin_actions.php · process_action()

`wp_easycart_settings_elementor_status`
Fires after the Elementor status panel is printed in the store settings.

No parameters.

Fires in admin/template/settings/elementor.php · ecst_elementor_render_status() +1 more place

`wp_easycart_settings_history_recorded`
Fires after a batch of setting changes is recorded in the settings history (the changes the Settings home lists with Undo).

**Parameters**
`$batch` (string) The batch id.
`$source` (string) Where the changes were made, such as setup-checkout.
`$rows` (array) The rows recorded.

Fires in admin/inc/wp_easycart_settings_history.php · commit()

`wp_easycart_settings_home_after_groups`
Fires after all setting groups are printed on the store settings home screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_settings_home.php · render()

`wp_easycart_settings_home_before_groups`
Fires before the setting groups are printed on the store settings home screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_settings_home.php · render()

`wp_easycart_settings_page_after_sections`
Fires after all sections of a store settings page are rendered.

**Parameters**
`$page` Settings page definition array.

Fires in admin/inc/wp_easycart_admin_settings_page_v2.php · render()

`wp_easycart_settings_page_before`
Fires before the body of a store settings page is rendered, after the page header and health banner.

**Parameters**
`$page` Settings page definition array.

Fires in admin/inc/wp_easycart_admin_settings_page_v2.php · render()

`wp_easycart_settings_page_enqueue`
Fires while enqueueing scripts and styles for a store settings page, so extensions can add their own assets.

**Parameters**
`$slug` Settings page slug.
`$page` Settings page definition array.

Fires in admin/inc/wp_easycart_admin_settings_page_v2.php · enqueue_early()

`wp_easycart_settings_saved`
Fires after each setting is saved: from a store settings page, a setup step on the Settings home, or an Undo from the settings history.

**Parameters**
`$key` Option name.
`$clean` Sanitized new value.
`$old` Previous value.
`$slug` Settings page slug.

Fires in admin/inc/wp_easycart_admin_settings_page_v2.php · apply_value()

`wp_easycart_setup_wizard_location_saved`
Fires after the setup wizard saves the store’s location step.

**Parameters**
`$country` (string) The ISO country code chosen.
`$previous_country` (string) The country saved before (” on a first run).
`$currency` (string) The ISO 4217 currency code chosen.

Fires in admin/inc/wp_easycart_admin_setup_wizard.php · process_location_submit()

`wp_easycart_store_clock_set`
Fires after WP EasyCart changes the WordPress time zone to the store’s own (the store clock fix). The whole site follows the new zone.

**Parameters**
`$zone` (string) The new time zone.
`$before` (mixed) The old timezone_string value.

Fires in inc/classes/core/class-wp-easycart-store-clock.php · set()

`wp_easycart_upsell_after`
Fires at the end of an upgrade prompt box shown for a locked feature in the admin.

**Parameters**
`$ecv2_upsell` Upsell definition array.

Fires in admin/template/upgrade/upgrade-screen.php

`wp_easycart_upsell_locked_page_end`
Fires at the end of a locked feature’s preview page in the admin.

**Parameters**
`$e` Locked feature definition array.

Fires in admin/inc/wp_easycart_admin_upsell.php · print_locked_page()

`wpeasycart_admin_demo_data_installed`
Fires after the demo data is installed from the initial setup screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_initial_setup.php · install_demo_data()

`wpeasycart_admin_load_complete`
Fires after the WP EasyCart admin files are loaded.

No parameters.

Fires in admin/admin-init.php

`wpeasycart_admin_load_init`
Fires at the start of loading the WP EasyCart admin files.

No parameters.

Fires in admin/admin-init.php

`wpeasycart_admin_store_status`
Fires inside the Diagnostics screen (Store status) where the status cards are printed; add-ons hook it to add their own cards.

No parameters.

Fires in admin/template/status/store-status/settings.php

`wpeasycart_admin_usage_tracking_accepted`
Fires after the store owner accepts usage tracking and the tracking option is saved.

No parameters.

Fires in wpeasycart.php · wp_easycart_tracking_option_changed()

`wpeasycart_deactivated`
Fires when the store owner deactivates the plugin through the deactivation feedback dialog.

No parameters.

Fires in admin/inc/wp_easycart_admin.php · ec_admin_ajax_custom_deactivate()

`wpeasycart_order_details_shipping_address_pre`
Fires on the admin order screen after the Ship to card, so add-ons can print their own cards such as accounting or fulfillment partner cards.

**Parameters**
`$order` The order row object

Fires in admin/template/orders/orders/order-details.php

`wpeasycart_order_details_shipping_address_pre_ship_to`
Fires on the admin order screen just before the Ship to card is printed.

**Parameters**
`$order` The order row object

Fires in admin/template/orders/orders/order-details.php

`wpeasycart_page_options_updated`
Fires after the store page display options are saved from the admin screen.

No parameters.

Fires in wpeasycart.php · ec_ajax_save_page_options() +8 more places

`wpeasycart_perpage_added`
Fires after a new products-per-page choice is added to the store settings list.

**Parameters**
`(int) $wpdb->insert_id` id of the new per-page value

Fires in admin/inc/wp_easycart_admin_perpage_v2.php · add()

`wpeasycart_perpage_deleting`
Fires before a products-per-page choice is deleted from the store settings list.

**Parameters**
`(int) $id` id of the per-page value being removed

Fires in admin/inc/wp_easycart_admin_perpage_v2.php · remove()

`wpeasycart_store_status_bubble_list_end`
Fires at the end of the Extensions card on the store status screen, so add-ons can print their own status bubbles.

No parameters.

Fires in admin/template/license-status.php

`wpeasycart_store_status_bubble_list_start`
Fires at the start of the Extensions card on the store status screen, so add-ons can print their own status bubbles.

No parameters.

Fires in admin/template/license-status.php

### Storefront templates and design

Grouped by what they are about

`wp_easycart_add_to_cart_click_before`
Fires inside the add-to-cart button’s onclick handler on product listings, letting you output JavaScript that runs when the button is clicked.

**Parameters**
`$product->product_id` Product id

Fires in design/layout/base-responsive-v3/ec_product.php +5 more places

`wp_easycart_add_to_cart_js_validation_end`
Fires inside the add-to-cart JavaScript validation function, letting you output JavaScript that runs before the function returns its errors.

**Parameters**
`$product->product_id` Product id

Fires in design/layout/base-responsive-v3/ec_add_to_cart_shortcode.php +2 more places

`wp_easycart_after_add_to_cart_button`
Fires on the product details page right after the Add to Cart button area, before the out-of-stock message.

**Parameters**
`$product` The product being displayed (object).

Fires in design/layout/base-responsive-v3/ec_product.php +1 more place

`wp_easycart_after_quick_add_to_cart_button`
Fires in the product quick view, right after the quick add to cart button area.

**Parameters**
`$product` The product being displayed (object).

Fires in design/layout/base-responsive-v3/ec_product.php +1 more place

`wp_easycart_cart_fit_measured`
Fires after a measurement of the cart page’s width for the active theme is kept, from a store manager’s visit or the admin’s check.

**Parameters**
`$new` (array) The measurement that was kept.

Fires in inc/classes/core/class-wp-easycart-cart-fit.php · record()

`wp_easycart_checkout_summary_end`
Fires at the end of the classic checkout’s order summary column, inside its wrapper, on the details, shipping and payment steps.

**Parameters**
`$cartpage` (ec_cartpage) The checkout.
`$step` (string) The step showing the summary: checkout_info, checkout_shipping or checkout_payment.

Fires in design/layout/base-responsive-v3/ec_checkout_summary.php

`wp_easycart_order_detail_item_optionitems`
Fires in each item of the account order details page, after the item’s options, so extensions can print more option details.

**Parameters**
`$order_item` The order line item being displayed

Fires in design/layout/base-responsive-v3/ec_account_order_details_item_display.php

`wp_easycart_order_details_header_right`
Fires at the start of the actions row above an order on the account order details page, before the Pay now link.

**Parameters**
`$this->order` The order object being displayed

Fires in design/layout/base-responsive-v3/ec_account_order_details.php

`wp_easycart_product_view_claims`
Fires when a product details page starts, before any view event goes out. An Elementor Product Tracking widget in the product’s template claims the product here, so it decides the page’s view events.

**Parameters**
`$this->product` (ec_product) The product.
`$this->atts` (array) The shortcode attributes.

Fires in inc/classes/store/ec_storepage.php · display_product_details_page()

`wp_easycart_tabs_builtins_saved` Tabs
Fires after the look of WP EasyCart’s own tabs (Description, Specifications and Customer reviews) is changed in the tab designer: their icon, name, summary line or review count. The look applies to every product.

**Parameters**
`$all` (array) Every built-in tab’s look, keyed description, specifications and reviews; each holds icon, name, summary and count.

Fires in includes/class-wp-easycart-tabs.php · save_builtins()

`wpeasycart_after_product_title`
Fires in the product listing item template right after the product title, so extra content can be added under the title.

**Parameters**
`$product` The product object being displayed

Fires in design/layout/base-responsive-v3/ec_product.php +3 more places

`wpeasycart_cart_item_row_pre`
Fires in the cart template before each cart item row is output.

**Parameters**
`$cartitem` The cart item object for this row
`$cartitem_index (int)` Position of the item in the cart

Fires in design/layout/base-responsive-v3/ec_cart.php +2 more places

`wpeasycart_cart_post_minimum_notice`
Fires in the cart template just after the backorder message, where a minimum order notice can be shown.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart.php +2 more places

`wpeasycart_cart_top_left`
Fires at the top of the left column of the cart page, before the backorder message and item table.

**Parameters**
`$cartpage` The cart page object (passed as $this or $cartpage depending on the template)

Fires in design/layout/base-responsive-v3/ec_cart.php +2 more places

`wpeasycart_checkout_button_ahref`
Fires inside the opening tag of the cart page checkout button link, so extra HTML attributes can be echoed onto it.

No parameters.

Fires in design/layout/base-responsive-v3/ec_cart.php +2 more places

`wpeasycart_order_detail_line_item`
Fires for each item in the account order details template, where extra detail can be added under the item.

**Parameters**
`$model_number` Model number of the order item
`$orderdetail_id` ID of the order line

Fires in design/layout/base-responsive-v3/ec_account_order_details_item_display.php

`wpeasycart_order_details_after_basic_info`
Fires on the account order details page after the basic order information, where extra rows can be added.

**Parameters**
`$order` The order display object

Fires in design/layout/base-responsive-v3/ec_account_order_details.php

`wpeasycart_order_details_after_billing`
Fires on the account order details page after the billing address block.

**Parameters**
`$order` The order display object

Fires in design/layout/base-responsive-v3/ec_account_order_details.php

`wpeasycart_order_details_after_shipping`
Fires on the account order details page after the shipping address block.

**Parameters**
`$order` The order display object

Fires in design/layout/base-responsive-v3/ec_account_order_details.php

`wpeasycart_order_details_after_totals`
Fires on the account order details page after the order totals.

**Parameters**
`$order` The order display object

Fires in design/layout/base-responsive-v3/ec_account_order_details.php

`wpeasycart_order_detials_order_notes_after`
Fires on the account order details page after the customer’s order notes.

**Parameters**
`$order` The order display object

Fires in design/layout/base-responsive-v3/ec_account_order_details.php

`wpeasycart_pre_customer_reviews_tab`
Fires in the product details tab list just before the customer reviews tab, so extensions can add their own tab.

**Parameters**
`$product_id` product id
`$rand` random id of this product display, used in tab element ids

Fires in wpeasycart.php · wp_easycart_product_tabs_capture_gaps() +3 more places

`wpeasycart_pre_description_tab`
Fires in the product details tab list just before the description tab, so extensions can add their own tab.

**Parameters**
`$product_id` product id
`$rand` random id of this product display, used in tab element ids

Fires in wpeasycart.php · wp_easycart_product_tabs_capture_gaps() +3 more places

`wpeasycart_pre_specifications_tab`
Fires in the product details tab list just before the specifications tab, so extensions can add their own tab.

**Parameters**
`$product_id` product id
`$rand` random id of this product display, used in tab element ids

Fires in wpeasycart.php · wp_easycart_product_tabs_capture_gaps() +3 more places

`wpeasycart_product_description_top`
Fires at the top of the product details page, before the option sets are set up.

**Parameters**
`$this->product->product_id` product id

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wpeasycart_product_details_buy_column`
Fires in the product page’s buy column, below Add to cart and the short description, so extensions can print there (WP EasyCart Tabs puts its tabs here when the store picks Beside the photos).

**Parameters**
`$this->product` (ec_product) The product.
`$wpeasycart_addtocart_shortcode_rand` (int|string) The id of this product block on the page.
`$this->atts` (array) The shortcode attributes, or an empty array.

Fires in design/layout/base-responsive-v3/ec_product_details_page.php

`wpeasycart_product_details_tabs_area`
Fires where the product page’s tab area goes when an extension has taken it over (wpeasycart_product_details_tabs_takeover); print the whole area. If nothing is printed, the classic tab list is drawn instead.

**Parameters**
`$product` (ec_product) The product.
`$rand` (int|string) The tab list’s id on this page.
`$panels` (array) The built-in panels by key (key, title, count, html), plus addon_tabs and addon_panels: what other code printed on the classic tab hooks.
`$atts` (array) Shortcode attributes.

Fires in wpeasycart.php · wp_easycart_product_tabs_area()

`wpeasycart_sidebar_position1`
Fires at the top of the product page filter sidebar, right after the clear filters button.

**Parameters**
`$this` the product page object (ec_productpage)

Fires in design/layout/base-responsive-v3/ec_product_page.php

`wpeasycart_sidebar_position2`
Fires in the product page filter sidebar after the first categories block and before the category filters.

**Parameters**
`$this` the product page object (ec_productpage)

Fires in design/layout/base-responsive-v3/ec_product_page.php

`wpeasycart_sidebar_position3`
Fires in the product page filter sidebar after the category filters and before the option filters.

**Parameters**
`$this` the product page object (ec_productpage)

Fires in design/layout/base-responsive-v3/ec_product_page.php

`wpeasycart_sidebar_position4`
Fires in the product page filter sidebar after the option filters and before the categories block that shows when it is not listed first.

**Parameters**
`$this` the product page object (ec_productpage)

Fires in design/layout/base-responsive-v3/ec_product_page.php

`wpeasycart_sidebar_position5`
Fires in the product page filter sidebar after the later categories block and before the price point filters.

**Parameters**
`$this` the product page object (ec_productpage)

Fires in design/layout/base-responsive-v3/ec_product_page.php

`wpeasycart_sidebar_position6`
Fires at the end of the product page filter sidebar, after the last filter block.

**Parameters**
`$this` the product page object (ec_productpage)

Fires in design/layout/base-responsive-v3/ec_product_page.php

`wpeasycart_subscription_summary_choices`
Fires under the subscription item’s title in the subscription page’s order summary, once in the mobile summary and once in the desktop one. WP EasyCart prints the plan’s choices (billing, the usage level) here.

**Parameters**
`$product` (ec_product) The subscription product.
`$copy` (string) Which summary: mobile or desktop.

Fires in design/layout/base-responsive-v3/ec_cart_subscription.php +1 more place

`wpeasycart_success_page_content_bottom`
Fires at the bottom of the order confirmation page, after the products’ order notes.

**Parameters**
`$order_id` order id
`$order` the order display object (ec_orderdisplay)

Fires in design/layout/base-responsive-v3/ec_cart_success.php

`wpeasycart_success_page_content_middle`
Fires on the order confirmation page after the order’s details and addresses, before the products’ order notes; gift orders, checkout answers and the withdrawal button print here. With the order summary turned off, it fires after the thank-you card.

**Parameters**
`$order_id` order id
`$order` the order display object (ec_orderdisplay)

Fires in design/layout/base-responsive-v3/ec_cart_success.php +1 more place

`wpeasycart_success_page_content_top`
Fires at the top of the order confirmation page, before any payment notice and the thank-you card.

**Parameters**
`$order_id` order id
`$order` the order display object (ec_orderdisplay)

Fires in design/layout/base-responsive-v3/ec_cart_success.php

### Pickup and scheduling

Grouped by what they are about

`wp_easycart_admin_schedule_details`
Fires when the schedule admin page is showing the add-new or edit schedule form, so PRO can print the schedule details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_schedule.php · load_schedule_list()

`wp_easycart_admin_schedule_details_basic_fields` PRO
Fires in the Schedule Setup section of the schedule edit form so PRO can print the basic schedule fields.

No parameters.

Fires in admin/template/settings/schedule/schedule-details.php

`wp_easycart_admin_schedule_list`
Fires when the schedule admin page shows the schedule list rather than the add-new or edit form.

No parameters.

Fires in admin/inc/wp_easycart_admin_schedule.php · load_schedule_list()

`wpeasycart_location_added` PRO
Fires after a store location is created in the admin.

**Parameters**
`$location_id` ID of the new location (ec_location.location_id)

Fires in admin/inc/wp_easycart_admin_location_pro.php · insert_location()

`wpeasycart_location_deleted` PRO
Fires after a store location is deleted in the admin, singly or in bulk.

**Parameters**
`$location_id` ID of the deleted location

Fires in admin/inc/wp_easycart_admin_location_pro.php · delete_location() +2 more places

`wpeasycart_location_deleting` PRO
Fires just before a store location is deleted in the admin, singly or in bulk.

**Parameters**
`$location_id` ID of the location about to be deleted

Fires in admin/inc/wp_easycart_admin_location_pro.php · delete_location() +2 more places

`wpeasycart_location_updated` PRO
Fires after a store location is updated in the admin.

**Parameters**
`$location_id` ID of the updated location

Fires in admin/inc/wp_easycart_admin_location_pro.php · update_location()

`wpeasycart_schedule_added` PRO
Fires after a new pickup or ordering schedule is created, in the admin or by an AI assistant setting the store hours (WP EasyCart PRO).

**Parameters**
`$schedule_id` id of the new schedule

Fires in admin/inc/wp_easycart_admin_schedule_pro.php · insert_schedule() +4 more places

`wpeasycart_schedule_deleted` PRO
Fires after a schedule is deleted, in the admin (singly or in bulk) or when an AI assistant’s store hours change is undone.

**Parameters**
`$schedule_id` id of the deleted schedule

Fires in admin/inc/wp_easycart_admin_schedule_pro.php · delete_schedule() +3 more places

`wpeasycart_schedule_deleting` PRO
Fires just before a schedule is deleted, in the admin (singly or in bulk) or when an AI assistant’s store hours change is undone.

**Parameters**
`$schedule_id` id of the schedule about to be deleted

Fires in admin/inc/wp_easycart_admin_schedule_pro.php · delete_schedule() +3 more places

`wpeasycart_schedule_updated` PRO
Fires after a schedule is saved or its open or closed channel is toggled, in the admin or by an AI assistant setting the store hours (and its Undo).

**Parameters**
`$id` schedule id

Fires in admin/inc/wp_easycart_admin_schedule_table.php +3 more places

### Downloads and gift cards

Grouped by what they are about

`wp_easycart_admin_downloads_details`
Fires on the admin downloads page when adding or editing a download, to render the details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_downloads.php · load_downloads_list()

`wp_easycart_admin_downloads_details_basic_fields` PRO
Fires inside the download details form in admin so extra basic fields can be added.

No parameters.

Fires in admin/template/orders/downloads/downloads-details.php

`wp_easycart_admin_downloads_list`
Fires on the admin downloads page, when not adding or editing, to render the downloads list.

No parameters.

Fires in admin/inc/wp_easycart_admin_downloads.php · load_downloads_list()

`wp_easycart_admin_giftcard_details`
Fires on the admin gift cards page when adding or editing a gift card, to render the details screen.

No parameters.

Fires in admin/inc/wp_easycart_admin_giftcards.php · load_giftcards_list()

`wp_easycart_admin_giftcard_list`
Fires on the admin gift cards page, when not adding or editing, to render the gift card list.

No parameters.

Fires in admin/inc/wp_easycart_admin_giftcards.php · load_giftcards_list()

`wp_easycart_customer_upload_failed`
Fires when a customer file upload is rejected, before the failure is logged.

**Parameters**
`$reason` The reason code for the rejection (string).
`$name` The sanitized name of the uploaded file (string).
`$detail` Technical detail about the failure (string).

Fires in inc/classes/core/class-wp-easycart-customer-uploads.php · failed()

`wp_easycart_giftcard_code_changed` PRO
Fires after a gift card’s code is changed, in the admin or through the WP EasyCart API, and its order history is moved to the new code.

**Parameters**
`$old` The previous gift card code
`$row['giftcard_id']` The new gift card code

Fires in inc/classes/core/wp_easycart_giftcard_writer.php · update()

`wp_easycart_giftcard_created` PRO
Fires after a gift card is created, in the admin or through the WP EasyCart API.

**Parameters**
`$giftcard_id` Gift card code

Fires in admin/inc/wp_easycart_admin_giftcard_table.php +2 more places

`wp_easycart_giftcard_deleted` PRO
Fires after a gift card is deleted, in the admin (once per card for bulk deletes) or through the WP EasyCart API.

**Parameters**
`$giftcard_id` Code of the deleted gift card

Fires in admin/inc/wp_easycart_admin_giftcards_pro.php · delete_gift_card() +2 more places

`wp_easycart_giftcard_deleting` PRO
Fires just before a gift card is deleted, in the admin (once per card for bulk deletes) or through the WP EasyCart API.

**Parameters**
`$giftcard_id` Code of the gift card about to be deleted

Fires in admin/inc/wp_easycart_admin_giftcards_pro.php · delete_gift_card() +2 more places

`wp_easycart_giftcard_updated` PRO
Fires after a gift card is updated or its balance is adjusted, in the admin or through the WP EasyCart API.

**Parameters**
`$giftcard_id` Gift card code (the new code if it was changed)

Fires in admin/inc/wp_easycart_admin_giftcards_pro.php · update_gift_card() +2 more places

`wp_easycart_order_giftcard_returned`
Fires after gift card balance an order used goes back onto the card, either because the order was cancelled or because the WP EasyCart PRO refund window refunded it to the card.

**Parameters**
`$order_id` (int) The order id.
`$card['id']` (string) The gift card as saved on the order (ec_order.giftcard_id).
`(float) $amount` (float) The amount put back on the card.
`$via` (string) cancelled or refund.

Fires in inc/classes/core/class-wp-easycart-order-returns.php · return_giftcard()

`wp_easycart_order_giftcard_taken`
Fires after the gift card amount a cancel gave back is taken off the card again, when a cancelled order moves to any status other than Refunded Order. A card spent since then is taken down to zero, never below.

**Parameters**
`$order_id` (int) The order id.
`$card['id']` (string) The gift card as saved on the order (ec_order.giftcard_id).
`(float) $amount` (float) The amount the cancel gave back, which is what is taken again.
`(float) $short` (float) How much the card was short of that amount, 0 when it held enough.

Fires in inc/classes/core/class-wp-easycart-order-returns.php · take_giftcard()

`wpeasycart_confirm_gift_card_redemption` PRO
Fires once an order that used a gift card has gone through, so an outside gift card system can complete a payment it only held (WP EasyCart PRO captures the held Square gift card payment here). Also fires after a successful SagePay or Realex 3D Secure check.

**Parameters**
`$this->discount->giftcard_code` (string) The gift card code.
`$this->order_id` (int) The order id.
`$this->discount->giftcard_discount` (float) The gift card’s share of the order.

Fires in inc/classes/cart/ec_cartpage.php · process_3dsecure_response() +2 more places

`wpeasycart_custom_gift_card_email`
Fires instead of the built-in mailer when the store’s email method is custom, so your handler can send the gift card email.

**Parameters**
`stripslashes( get_option( 'ec_option_order_from_email' ) )` (string) The order from email address.
`$to` (string) The gift card recipient’s email.
`$admin_to` (string) The store’s copy addresses, or empty.
`$subject` (string) The email subject.
`$message` (string) The email body.

Fires in admin/inc/wp_easycart_admin_orders.php · send_gift_card_email() +1 more place

`wpeasycart_download_added` PRO
Fires after a download record is created in the admin.

**Parameters**
`$download_id` ID of the new download (ec_download.download_id)

Fires in admin/inc/wp_easycart_admin_download_table.php · ecv2_dl_save() +1 more place

`wpeasycart_download_deleting` PRO
Fires just before a download record is deleted in the admin, singly or in bulk.

**Parameters**
`$download_id` ID of the download about to be deleted

Fires in admin/inc/wp_easycart_admin_download_table.php · ecv2_dl_delete() +1 more place

`wpeasycart_download_updated` PRO
Fires after an existing download record is updated in the admin.

**Parameters**
`$download_id` ID of the updated download

Fires in admin/inc/wp_easycart_admin_download_table.php · ecv2_dl_save() +4 more places

`wpeasycart_downloads_bulk_updated` PRO
Fires after the admin download fix tool bulk updates the Amazon settings of downloads matching a record.

**Parameters**
`$r->download_id` ID of the download record used as the match
`$data (array)` The values applied, including is_amazon_download and amazon_key
`(int) $more` Number of download rows updated

Fires in admin/inc/wp_easycart_admin_download_table.php · ecv2_dl_fix()

`wpeasycart_gift_card_purchased`
Fires after a new gift card is created for a purchase.

**Parameters**
`$giftcard_id` The new gift card code
`$amount` Value of the gift card

Fires in inc/classes/core/ec_db.php · insert_new_giftcard()

`wpeasycart_void_gift_card_redemption` PRO
Fires when a card payment fails on an order that used a gift card, so the gift card redemption can be voided.

**Parameters**
`$this->discount->giftcard_code` the gift card code used
`$this->order_id` order id

Fires in inc/classes/core/ec_order.php · submit_order() +1 more place

### Integrations and extensions

Grouped by what they are about

`wp_easycart_admin_pro_ready`
Fires once the admin has finished loading its PRO hooks and the installed PRO version is not outdated.

No parameters.

Fires in admin/inc/wp_easycart_admin.php · setup_pro_hooks()

`wp_easycart_bluecheck_photo_finished` BlueCheck
Fires in the Bluecheck extension after a customer’s photo record has been synced, with the record as it is now and as it was before.

**Parameters**
`$after` The photo record after the sync (array).
`$record` The photo record before the sync (array).

Fires in includes/class-wp-easycart-bluecheck-checkout.php · sync_photo()

`wp_easycart_facebook_checkout_link` Facebook & Instagram
Fires when a Facebook or Instagram checkout link has filled the cart, before the shopper is redirected on.

**Parameters**
`$added` Number of lines added to the cart (int)
`$skipped` Number of lines skipped (int)
`$origin` Array of cart_origin, utm_\* and fbclid values

Fires in includes/class-wp-easycart-facebook-checkout.php · maybe_handle()

`wp_easycart_facebook_checkout_order` Facebook & Instagram
Fires after an order created from a Facebook or Instagram checkout link is inserted.

**Parameters**
`$order_id` Order ID (int)
`$origin` Array of cart_origin, utm_\* and fbclid values

Fires in includes/class-wp-easycart-facebook-checkout.php · order_inserted()

`wp_easycart_facebook_connected` Facebook & Instagram
Fires after a store is connected to Facebook and Instagram, so the sync can send the catalog.

**Parameters**
`$data` Connection details (array)

Fires in includes/class-wp-easycart-facebook-connection.php · after_connect()

`wp_easycart_facebook_disconnected` Facebook & Instagram
Fires after the store is disconnected from Facebook and Instagram.

**Parameters**
`$data` The connection details as they were before disconnecting (array)

Fires in includes/class-wp-easycart-facebook-connection.php · disconnect()

`wp_easycart_facebook_product_changed` Facebook & Instagram
Fires when a product’s Facebook and Instagram details change, so the sync and feed pick it up.

**Parameters**
`$product_id` Product ID (int)

Fires in includes/class-wp-easycart-facebook-install.php · resolve_review() +1 more place

`wp_easycart_google_feed_address_changed` PRO
Fires after the Google product feed address key is regenerated, so the Merchant API connection can move its data source to the new address.

**Parameters**
`$new_url` The new feed URL
`$old_url` The previous feed URL

Fires in inc/classes/core/wp_easycart_google_feed_pro.php · new_key()

`wp_easycart_google_feed_built` PRO
Fires after a Google product feed build finishes and its state is saved.

**Parameters**
`$state` The feed build state (array), including file sizes and error

Fires in inc/classes/core/wp_easycart_google_feed_pro.php · finish()

`wp_easycart_google_feed_hour_changed` PRO
Fires after the nightly Google feed build hour changes and the next build is rescheduled.

**Parameters**
`self::hour()` The new build hour

Fires in inc/classes/core/wp_easycart_google_feed_pro.php · reschedule()

`wp_easycart_groupon_deal_created` Groupon
Fires after a Groupon deal is created.

**Parameters**
`$deal_id` Deal ID (int)
`$deal` The deal’s cleaned settings (array)

Fires in includes/class-wp-easycart-groupon-deals.php · create()

`wp_easycart_groupon_deal_switched` Groupon
Fires after Groupon codes are moved from one deal to another.

**Parameters**
`(int) $deal->deal_id` Deal ID
`$moved` Number of codes moved (int)

Fires in includes/class-wp-easycart-groupon-deals.php · switch_deal()

`wp_easycart_meta_event`
Fires whenever a Meta (Facebook) Pixel storefront event is tracked, so WP EasyCart Pro can send the same event from the server with the same ID.

**Parameters**
`$event_name` Meta event name, such as ViewContent, Search, AddToCart or InitiateCheckout
`$custom_data` Event data such as value, content ids, num_items and search_string (array)
`$event_id` Event ID shared with the browser (string)
`$context` Array with source_url, product_id, order_id, user_id, email and browser

Fires in inc/classes/core/class-wp-easycart-meta.php · track()

`wp_easycart_oauth_revoked`
Fires when an AI assistant’s sign-in to the store (OAuth, for the store’s MCP server) ends: the store owner disconnects it, the app is deleted, or the app revokes its token.

**Parameters**
`$id` (string) The sign-in (grant) id.
`$grant` (array) The sign-in as it was kept.

Fires in inc/classes/core/abilities/class-wp-easycart-oauth.php · delete_client() +2 more places

`wpeasycart_pro_activated` PRO
Fires when the WP EasyCart Pro plugin is activated, including when the admin activates it automatically.

No parameters.

Fires in admin/inc/wp_easycart_admin.php · ensure_pro_active() +1 more place

### Import and export

Grouped by what they are about

`wp_easycart_import_finished`
Fires when an import finishes its last phase.

**Parameters**
`$job` (array) The import job, with its counts.

Fires in inc/classes/core/import/class-wp-easycart-import.php · step()

`wp_easycart_import_started`
Fires when an import from Products › Import starts, a trial run or a full one.

**Parameters**
`$job` (array) The import job: its source, choices, phases and counts.

Fires in inc/classes/core/import/class-wp-easycart-import.php · start()

`wp_easycart_import_undone`
Fires after an import is undone and everything that run created has been removed.

**Parameters**
`$run_id` (int) The import run.

Fires in inc/classes/core/import/class-wp-easycart-import.php · undo()

### API and mobile app

Grouped by what they are about

`wp_easycart_api_key_created` API plugin
Fires after a WP EasyCart API key is created. The key itself is not passed.

**Parameters**
`$id` (string) The key id.
`$scope` (string) read or read_write.
`$user_id` (int) The admin user the key acts as.

Fires in wp-easycart-api/includes/class-wp-easycart-api-keys.php · create()

`wp_easycart_api_key_revoked` API plugin
Fires after a WP EasyCart API key is revoked.

**Parameters**
`$id` (string) The key id.

Fires in wp-easycart-api/includes/class-wp-easycart-api-keys.php · revoke()

`wp_easycart_api_loaded` API plugin
Fires once the WP EasyCart API has started and loaded its parts. The API’s own event files hook WP EasyCart here for their webhook events; an extension adding API resources can do the same.

No parameters.

Fires in wp-easycart-api/includes/class-wp-easycart-api.php · start()

`wp_easycart_api_webhook_created` API plugin
Fires after a WP EasyCart API webhook is created.

**Parameters**
`$id` (int) The webhook id.

Fires in wp-easycart-api/includes/class-wp-easycart-api-webhooks.php · create()

`wp_easycart_api_webhook_deleted` API plugin
Fires after a WP EasyCart API webhook is deleted.

**Parameters**
`$webhook_id` (int) The webhook id.

Fires in wp-easycart-api/includes/class-wp-easycart-api-webhooks.php · delete()

`wp_easycart_api_webhook_disabled` API plugin
Fires when the WP EasyCart API turns a webhook off by itself, just before it emails the store owner.

**Parameters**
`$webhook_id` (int) The webhook id.
`$reason` (string) Why: gone, failing or secret.

Fires in wp-easycart-api/includes/class-wp-easycart-api-webhooks.php · disable()

`wp_easycart_api_webhook_updated` API plugin
Fires after a WP EasyCart API webhook is changed.

**Parameters**
`$webhook_id` (int) The webhook id.

Fires in wp-easycart-api/includes/class-wp-easycart-api-webhooks.php · update()

`wpeasycart_amf_complete` PRO
Fires at the end of an AMFPHP request from the mobile app, after the gateway has produced its output.

No parameters.

Fires in inc/amfphp/Amfphp/index.php

### Other

Grouped by what they are about

`wp_easycart_startup`
Fires once WP EasyCart has loaded and run any pending database update at startup.

No parameters.

Fires in wpeasycart.php · wpeasycart_load_startup()

`wp_easycart_table_collation_matched`
Fires after a WP EasyCart database table is changed to the collation the store’s other tables use (the upgrade step, Store Status or WP-CLI).

**Parameters**
`$table` (string) The table name.
`$collation` (string) The collation it uses now.
`$one` (array) What the table was before.

Fires in inc/classes/core/class-wp-easycart-collation.php · alter()

`wpeasycart_activated`
Fires when WP EasyCart is activated.

No parameters.

Fires in wpeasycart.php · ec_activate()

`wpeasycart_config_loaded`
Fires once the plugin’s configuration and globals have finished loading.

No parameters.

Fires in inc/ec_config.php

`wpeasycart_session_rotated`
Fires after a shopper’s cart session id is rotated, such as when they sign in or out.

**Parameters**
`$old_id` previous session id (string)
`$new_id` new session id (string)

Fires in inc/classes/core/wpeasycart_session.php · rotate_session_id()

*Keep going*

## Related panels

- [Installing Extensions](https://docs.wpeasycart.com/docs/extension-guides/installing-all-extensions/): Installing the extensions that add their own hooks.
- [WP EasyCart API](https://docs.wpeasycart.com/docs/extension-guides/wp-easycart-api-extension/): The REST API and signed webhooks, for systems outside WordPress.

## Ready to run your store on WP EasyCart?

Everything in this guide works with the free plugin. PRO and Premium add subscriptions, memberships, wholesale pricing and more. Try every PRO feature free for 14 days.

[Start your free trial](https://www.wpeasycart.com/wp-easycart-professional-14-no-risk-trial/) · [See what is included](https://www.wpeasycart.com/wordpress-shopping-cart-pricing/)

![The WP EasyCart admin: orders and offers](https://docs.wpeasycart.com/wp-content/uploads/2026/09/cta-wpeasycart-pro-v2.jpg)

---

Source: https://docs.wpeasycart.com/docs/extension-guides/wordpress-action-hooks-reference/ ( updated 2026-11-06 )
