Learn how to set up, customize, and expand the functionality of your WooCommerce products with our library of documentation and tutorials.
  1. Documentation /
  2. Technical Documentation /
  3. Extending


Get help building custom Extensions for WooCommerce.



  • Adding a Section to a Settings Tab

    When you’re adding building an extension for WooCommerce that requires settings of some kind, it’s important to ask yourself: Where do they belong? If your extension just has a couple of simple settings, do you really need to create a new tab specifically for it? Most likely the answer is no. When to Create a […]

  • Amazon Pay – REST API

    Pay with Amazon as of version 1.6.0 exposes some functionalities through REST API. The Pay with Amazon REST API allows you to authorize, capture, and close authorization. The endpoint is /wp-json/wc/v1/orders/<order_id>/amazon-payments-advanced/. List of orders paid via Amazon Pay There’s no custom endpoint to retrieve list of orders paid via Amazon Pay. The built-in orders point can be […]

  • Classes in WooCommerce

    List of Classes in WooCommerce For a list of Classes in WooCommerce, please see the API DOCS. Common Classes WooCommerce The main class is ‘woocommerce’ which is available globally via the $woocommerce variable. This handles the main functions of WooCommerce and init’s other classes, stores site-wide variables, and handles error/success messages. The woocommerce class initializes […]

  • Customizing checkout fields using actions and filters

    If you are unfamiliar with code and resolving potential conflicts, we have an extension that can help: WooCommerce Checkout Field Editor. Installing and activating this extension overrides any code below that you try to implement; and you cannot have custom checkout field code in your functions.php file when the extension is activated. Custom code should be […]

  • Extension Translations

    WooCommerce is beginning to translate WooCommerce.com-owned extensions into multiple languages. We will be highlighting the supported languages in a new field on each product page as well as a country flag to identify if the extension works in that location. We have plans to translate WooCommerce owned extensions in 2020 and are starting with Spanish. […]

  • High-Performance Order Storage

    High-Performance Order Storage (HPOS) also previously known as “Custom Order Tables” is a solution that provides an easy-to-understand and solid database structure – specifically designed for eCommerce needs. It uses the WooCommerce CRUD design to store order data in custom tables – optimized for WooCommerce queries with minimal impact on the store’s performance.  In January, […]

  • Implementing the WC Integration Class

    If you’re customizing WooCommerce or adding your own functionality to it you’ll probably need a settings page of some sort. One of the easiest ways to create a settings page is by taking advantage of the WC_Integration class. Using the Integration class will automatically create a new settings page under WooCommerce > Settings > Integrations and […]

  • Payment Gateway API

    Payment gateways in WooCommerce are class based and can be added through traditional plugins. This guide provides an intro to gateway development. Types of payment gateway Payment gateways come in several varieties: Form based – This is where the user must click a button on a form that then redirects them to the payment processor on the gateway’s […]

  • Removing /product/ , /product-category/ , or /shop/ from the URLs

    In sum Removing /product/, /product-category/, or /shop/ from the URLs is not advisable due to the way WordPress resolves its URLs. It uses the product-category (or any other text for that matter) base of an URL to detect that it is an URL leading to a product category. There are SEO plugins that allow you […]

  • Settings API

    The WooCommerce settings API is used by shipping methods and payment gateways to display, save and load options. Defining form fields You can define your fields using a method called init_form_fields in your constructor: $this->init_form_fields(); You must have your settings defined before you can load them. Define your options like this, setting the form_fields array: […]