Further adjustment of post titles, menu titles, and tags (#43685)
* Adjusting post_titles, menu_titles, and tags for docs folder Adjusting the post_titles, menu_titles, and tags for document files in the docs folder * Update removing-product-product-category-or-shop-from-the-url.md * Update classic-theme-developer-handbook.md * further adjustments and casing * Move HPOS/CLI contents into README --------- Co-authored-by: Jacklyn Biggin <hi@jacklyn.dev>
This commit is contained in:
parent
3838975b24
commit
02b02ee23d
Binary file not shown.
Before Width: | Height: | Size: 212 KiB |
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Adding a custom field to simple and variable products
|
post_title: How to add a custom field to simple and variable products
|
||||||
|
menu_title: Add custom fields to products
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
In this tutorial you will learn how to create a custom field for a product and show it in your store. Together we will set up the skeleton plugin, and learn about WP naming conventions and WooCommerce hooks. In the end, you will have a functioning plugin for adding a custom field.
|
In this tutorial you will learn how to create a custom field for a product and show it in your store. Together we will set up the skeleton plugin, and learn about WP naming conventions and WooCommerce hooks. In the end, you will have a functioning plugin for adding a custom field.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Configuring caching plugins for WooCommerce
|
post_title: How to configure caching plugins for WooCommerce
|
||||||
|
menu_title: Configure caching plugins
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
## Excluding Pages from the Cache
|
## Excluding Pages from the Cache
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Add a country
|
post_title: Add a country
|
||||||
|
menu_title: Add a country
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Add a currency and symbol
|
post_title: Add currencies and symbols
|
||||||
|
menu_title: Add currencies and symbols
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
Add this code to your child theme's `functions.php` file or via a plugin that allows custom functions to be added, such as the [Code Snippets](https://wordpress.org/plugins/code-snippets/) plugin. Avoid adding custom code directly to your parent theme's functions.php file, as this will be wiped entirely when you update the theme.
|
Add this code to your child theme's `functions.php` file or via a plugin that allows custom functions to be added, such as the [Code Snippets](https://wordpress.org/plugins/code-snippets/) plugin. Avoid adding custom code directly to your parent theme's functions.php file, as this will be wiped entirely when you update the theme.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Add or modify states
|
post_title: Add or modify states
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
Add this code to your child theme's `functions.php` file or via a plugin that allows custom functions to be added, such as the [Code Snippets](https://wordpress.org/plugins/code-snippets/) plugin. Avoid adding custom code directly to your parent theme's functions.php file, as this will be wiped entirely when you update the theme.
|
Add this code to your child theme's `functions.php` file or via a plugin that allows custom functions to be added, such as the [Code Snippets](https://wordpress.org/plugins/code-snippets/) plugin. Avoid adding custom code directly to your parent theme's functions.php file, as this will be wiped entirely when you update the theme.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Adjust the quantity input values
|
post_title: Adjust the quantity input values
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
Set the starting value, maximum value, minimum value, and increment amount for quantity input fields on product pages.
|
Set the starting value, maximum value, minimum value, and increment amount for quantity input fields on product pages.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Add a message above the login / register form
|
post_title: Add a message above the login / register form
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
This code will add a custom message above the login/register form on the user's my-account page.
|
This code will add a custom message above the login/register form on the user's my-account page.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Change a currency symbol
|
post_title: Change a currency symbol
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
See the [currency list](https://woocommerce.github.io/code-reference/files/woocommerce-includes-wc-core-functions.html#source-view.475) for reference on currency codes.
|
See the [currency list](https://woocommerce.github.io/code-reference/files/woocommerce-includes-wc-core-functions.html#source-view.475) for reference on currency codes.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Customizing checkout fields using actions and filters
|
post_title: Customizing checkout fields using actions and filters
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
If you are unfamiliar with code and resolving potential conflicts, we have an extension that can help: [WooCommerce Checkout Field Editor](https://woo.com/products/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.
|
If you are unfamiliar with code and resolving potential conflicts, we have an extension that can help: [WooCommerce Checkout Field Editor](https://woo.com/products/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.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Change number of related products output
|
post_title: Change number of related products displayed
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
Add code to your child theme's functions.php file or via a plugin that allows custom functions to be added, such as the [Code snippets](https://wordpress.org/plugins/code-snippets/) plugin. Avoid adding custom code directly to your parent theme's `functions.php` file as this will be wiped entirely when you update the theme.
|
Add code to your child theme's functions.php file or via a plugin that allows custom functions to be added, such as the [Code snippets](https://wordpress.org/plugins/code-snippets/) plugin. Avoid adding custom code directly to your parent theme's `functions.php` file as this will be wiped entirely when you update the theme.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Rename a country
|
post_title: Rename a country
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Unhook and remove WooCommerce emails
|
post_title: Unhook and remove WooCommerce emails
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
This code allows you to unhook and remove the default WooCommerce emails.
|
This code allows you to unhook and remove the default WooCommerce emails.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Useful core functions
|
post_title: Useful core functions
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
WooCommerce core functions are available on both front-end and admin. They can be found in `includes/wc-core-functions.php` and can be used by themes in plugins.
|
WooCommerce core functions are available on both front-end and admin. They can be found in `includes/wc-core-functions.php` and can be used by themes in plugins.
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
---
|
---
|
||||||
|
post_title: Critical flows within the WooCommerce Core API
|
||||||
post_title: API critical flows
|
post_title: API critical flows
|
||||||
tags: reference
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Common issues
|
post_title: Common issues
|
||||||
|
menu_title: Common issues
|
||||||
tags: reference
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: How to decide if a pull request is high impact
|
post_title: How to assess the impact of a pull request
|
||||||
|
menu_title: Assessing PR impact
|
||||||
tags: how-to
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Deprecation in core
|
post_title: Deprecation in core
|
||||||
tags: how-to
|
menu_title: Deprecation in core
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
Deprecation is a method of discouraging usage of a feature or practice in favour of something else without breaking backwards compatibility or totally prohibiting its usage. To quote the Wikipedia article on Deprecation:
|
Deprecation is a method of discouraging usage of a feature or practice in favour of something else without breaking backwards compatibility or totally prohibiting its usage. To quote the Wikipedia article on Deprecation:
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Minification of SCSS and JS
|
post_title: Handling SCSS and JS minification in WooCommerce
|
||||||
tags: how-to
|
menu_title: Minification of SCSS and JS
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## SCSS
|
## SCSS
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Naming conventions
|
post_title: Naming conventions
|
||||||
|
menu_title: Naming conventions
|
||||||
tags: reference
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Reporting security issues
|
post_title: Reporting security issues
|
||||||
tags: how-to
|
menu_title: Reporting security issues
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
WooCommerce cares deeply about security and works hard to keep our merchants and their customers safe.
|
WooCommerce cares deeply about security and works hard to keep our merchants and their customers safe.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: String localization guidelines
|
post_title: String localization guidelines
|
||||||
|
menu_title: String localization guidelines
|
||||||
tags: reference
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce Git flow
|
post_title: WooCommerce Git flow
|
||||||
|
menu_title: WooCommerce Git flow
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
For core development, we use the following structure and flow.
|
For core development, we use the following structure and flow.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Developing using WooCommerce CRUD objects
|
post_title: Developing using WooCommerce CRUD objects
|
||||||
|
Menu_title: Using CRUD objects
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
CRUD is an abbreviation of the four basic operations you can do to a database or resource - Create, Read, Update, Delete.
|
CRUD is an abbreviation of the four basic operations you can do to a database or resource - Create, Read, Update, Delete.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Data stores
|
post_title: How to manage WooCommerce Data Stores
|
||||||
|
menu_title: Manage data stores
|
||||||
|
Tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Adding a section to a settings tab
|
post_title: How to add a section to a settings tab
|
||||||
|
menu_title: Add a section to a settings tab
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
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 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.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Adding actions and filters
|
post_title: How to add actions and filters
|
||||||
|
menu_title: Add actions and filters
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
Like many WordPress plugins, WooCommerce provides a range of actions and filters through which developers can extend and modify the platform.
|
Like many WordPress plugins, WooCommerce provides a range of actions and filters through which developers can extend and modify the platform.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Building your first extension
|
post_title: How to build your first extension
|
||||||
|
menu_title: Build your first extension
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
The easiest way to get started building an extension is to use the built-in extension generator that is included alongside WooCommerce Admin. This utility is maintained as part of the codebase for WooCommerce Admin, so it includes up-to-date tools and many preconfigured settings for building modern extensions that take advantage of the [React-powered](https://react.dev/) user experience available in current versions of WordPress and WooCommerce.
|
The easiest way to get started building an extension is to use the built-in extension generator that is included alongside WooCommerce Admin. This utility is maintained as part of the codebase for WooCommerce Admin, so it includes up-to-date tools and many preconfigured settings for building modern extensions that take advantage of the [React-powered](https://react.dev/) user experience available in current versions of WordPress and WooCommerce.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Classes in WooCommerce
|
post_title: Classes in WooCommerce
|
||||||
|
menu_title: Classes in WooCommerce
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## [List of Classes in WooCommerce](https://github.com/woocommerce/woocommerce/blob/trunk/docs/extension-development/class-reference#section-1)
|
## [List of Classes in WooCommerce](https://github.com/woocommerce/woocommerce/blob/trunk/docs/extension-development/class-reference#section-1)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce extension developer handbook
|
post_title: WooCommerce extension developer handbook
|
||||||
|
menu_title: Extension developer handbook
|
||||||
---
|
---
|
||||||
|
|
||||||
Want to create a plugin to extend WooCommerce? WooCommerce extensions are the same as regular WordPress plugins. For more information, visit [Writing a plugin](https://developer.wordpress.org/plugins/).
|
Want to create a plugin to extend WooCommerce? WooCommerce extensions are the same as regular WordPress plugins. For more information, visit [Writing a plugin](https://developer.wordpress.org/plugins/).
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Handling deactivation and uninstallation
|
post_title: Managing extension deactivation and uninstallation
|
||||||
|
menu_title: Manage deactivation and uninstallation
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Handling merchant onboarding
|
post_title: How to implement merchant onboarding
|
||||||
|
menu_title: Implement merchant onboarding
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Adding store management links
|
post_title: How to add store management links
|
||||||
|
menu_title: Add store management links
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: How to design a simple extension
|
post_title: How to design a simple extension
|
||||||
|
menu_title: Design a simple extension
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Implementing settings for extensions
|
post_title: Creating custom settings for WooCommerce extensions
|
||||||
|
menu_title: Creating custom settings
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
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](https://woocommerce.github.io/code-reference/classes/WC-Integration.html 'WC_Integration Class'). Using the Integration class will automatically create a new settings page under **WooCommerce > Settings > Integrations** and it will automatically save, and sanitize your data for you. We've created this tutorial so you can see how to create a new integration.
|
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](https://woocommerce.github.io/code-reference/classes/WC-Integration.html 'WC_Integration Class'). Using the Integration class will automatically create a new settings page under **WooCommerce > Settings > Integrations** and it will automatically save, and sanitize your data for you. We've created this tutorial so you can see how to create a new integration.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Building blocks for low code builders
|
post_title: Tools for low-code development
|
||||||
|
menu_title: Low-code tools
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,11 +1,11 @@
|
||||||
---
|
---
|
||||||
post_title: Using custom attributes in menus and taxonomy archives
|
post_title: Managing custom attributes in WooCommerce menus and taxonomy archives
|
||||||
|
menu_title: Custom attributes in menus
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
Attributes that can be used for the layered nav are a custom taxonomy, which means you can display them in menus, or display products by attributes. This requires some work on your part, and archives must be enabled.
|
Attributes that can be used for the layered nav are a custom taxonomy, which means you can display them in menus, or display products by attributes. This requires some work on your part, and archives must be enabled.
|
||||||
|
|
||||||
> **Note:** This is a **Developer level** doc. If you are unfamiliar with code/templates and resolving potential conflicts, select a [WooExpert or Developer](https://woo.com/customizations/) for assistance. We are unable to provide support for customizations under our [Support Policy](https://woo.com/support-policy/).
|
|
||||||
|
|
||||||
## Register the taxonomy for menus
|
## Register the taxonomy for menus
|
||||||
|
|
||||||
When registering taxonomies for your custom attributes, WooCommerce calls the following hook:
|
When registering taxonomies for your custom attributes, WooCommerce calls the following hook:
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce Plugin API Callback Documentation
|
post_title: WooCommerce plugin API callbacks
|
||||||
|
menu_title: Plugin API callbacks
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Overview
|
## Overview
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
# Working with WooCommerce Admin Pages
|
---
|
||||||
|
post_title: Integrating admin pages into WooCommerce extensions
|
||||||
|
menu_title: Integrating admin pages
|
||||||
|
tags: how-to
|
||||||
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Resources for debugging
|
post_title: Resources for debugging
|
||||||
|
menu_title: Debugging
|
||||||
---
|
---
|
||||||
|
|
||||||
## WordPress
|
## WordPress
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce developer resources
|
post_title: WooCommerce developer resources
|
||||||
|
menu_title: Developer resources
|
||||||
tags: reference
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce developer tools
|
post_title: WooCommerce developer tools
|
||||||
|
menu_title: Developer tools
|
||||||
tags: reference
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Setting up your development environment
|
post_title: Setting up your development environment
|
||||||
|
menu_title: Development environment setup
|
||||||
tags: tutorial, setup
|
tags: tutorial, setup
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,163 @@ category_slug: hpos
|
||||||
post_title: High Performance Order Storage (HPOS)
|
post_title: High Performance Order Storage (HPOS)
|
||||||
---
|
---
|
||||||
|
|
||||||
Explore High Performance Order Storage (HPOS) - a solution that provides an easy-to-understand and solid database structure - specifically designed for eCommerce needs.
|
WooCommerce has traditionally stored store orders and related order information (like refunds) as custom WordPress post types or post meta records. This comes with performance issues.
|
||||||
|
|
||||||
[High-Performance Order Storage (HPOS)](https://developer.woo.com/2022/09/14/high-performance-order-storage-progress-report/) 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.
|
[High-Performance Order Storage (HPOS)](https://developer.woo.com/2022/09/14/high-performance-order-storage-progress-report/) 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 2022, we published the [initial plan for the Custom Order Tables feature](https://developer.woo.com/2022/01/17/the-plan-for-the-woocommerce-custom-order-table/) and since then, we've been working hard to bring the High-Performance Order Storage (HPOS) to WooCommerce Core. In May 2022, we invited you to [test the order migration process](https://developer.woo.com/2022/05/16/call-for-early-testing-custom-order-table-migrations/) and provide feedback on how our initial work performs on real stores of varied configurations.
|
||||||
|
|
||||||
|
From WooCommerce 8.2, released on October 2023, [High-Performance Order Storage (HPOS)](https://developer.woo.com/2022/09/14/high-performance-order-storage-progress-report/) is officially released under the stable flag and will be enabled by default for new installations.
|
||||||
|
|
||||||
|
## [What's New with High-Performance Order Storage?](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-1)
|
||||||
|
|
||||||
|
Bringing High-Performance Order Storage (HPOS) to WooCommerce improves these three essential properties for eCommerce stores.
|
||||||
|
|
||||||
|
### Scalability
|
||||||
|
|
||||||
|
The rise in the number of customers and customer orders increases the load on your store's database - making it difficult to handle customer order requests and deliver a seamless user experience.
|
||||||
|
|
||||||
|
With High-Performance Order Storage, you get dedicated tables for data like orders and order addresses and thus dedicated indexes which results in fewer read/write operations and fewer busy tables. This feature enables eCommerce stores of all shapes and sizes to scale their business to their maximum potential - without expert intervention.
|
||||||
|
|
||||||
|
### Reliability
|
||||||
|
|
||||||
|
High-Performance Order Storage makes implementing and restoring targeted data backup easier. You'll no longer need to worry about losing orders, inventory numbers, or client information with reliable backup in these custom order tables. It'll also facilitate implementing read/write locks and prevent race conditions.
|
||||||
|
|
||||||
|
### Simplicity
|
||||||
|
|
||||||
|
You no longer have to go through a single huge database to locate underlying data and WooCommerce entries.
|
||||||
|
|
||||||
|
With High-Performance Order Storage, you can easily browse through the separate tables and easy-to-handle entries, independent of the table `_posts`, to find data or understand the table structure. It also lets you easily develop new plugins, implement designs for shops and products, and modify WooCommerce with more flexibility.
|
||||||
|
|
||||||
|
## [Background](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-2)
|
||||||
|
|
||||||
|
Before the release of version 8.2, WooCommerce relied on the `_post` and `_postmeta` table structures to store order information, which has served well over the years.
|
||||||
|
|
||||||
|
However, High-Performance Order Storage introduces dedicated tables for data like orders and order addresses and thus dedicated indexes which results in fewer read/write operations and fewer busy tables. This feature enables eCommerce stores of all shapes and sizes to scale their business to their maximum potential - without expert intervention.
|
||||||
|
|
||||||
|
The order data is synced from `_posts` and `_postmeta` table to four custom order tables:
|
||||||
|
|
||||||
|
1. `_wc_orders`
|
||||||
|
2. `_wc_order_addresses`
|
||||||
|
3. `_wc_order_operational_data`
|
||||||
|
4. `_wc_orders_meta`
|
||||||
|
|
||||||
|
|
||||||
|
## [Enabling the feature](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-3)
|
||||||
|
|
||||||
|
From WooCommerce 8.2, released on October 2023, HPOS is enabled by default for new installations. Existing stores can check [How to enable HPOS](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/enable-hpos.md)
|
||||||
|
|
||||||
|
## [Database tables](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-4)
|
||||||
|
|
||||||
|
A number of database tables are used to store order data by HPOS. The `get_all_table_names` method in [the OrdersTableDataStore class](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php) will return the names of all the tables.
|
||||||
|
|
||||||
|
## [Authoritative tables](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-5)
|
||||||
|
|
||||||
|
At any given time, while the HPOS feature is enabled, there are two roles for the involved database tables: _authoritative_ and _backup_. The authoritative tables are the working tables, where order data will be stored to and retrieved from during normal operation of the store. The _backup_ tables will receive a copy of the authoritative data whenever [synchronization](#synchronization) happens.
|
||||||
|
|
||||||
|
If the `woocommerce_custom_orders_table_enabled` options is set to true, HPOS is active and [the new tables](#database-tables) are authoritative, while the posts and post meta tables act as the backup tables. If the option is set to false, it's the other way around. The option can be changed via admin UI (WooCommerce - Settings - Advanced - Custom data stores).
|
||||||
|
|
||||||
|
[The CustomOrdersTableController class](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/CustomOrdersTableController.php) hooks on the `woocommerce_order_data_store` filter so that `WC_Data_Store::load( 'order' );` will return either an instance of [OrdersTableDataStore](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php) or an instance of [WC_Order_Data_Store_CPT](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php), depending on which are the authoritative tables.
|
||||||
|
|
||||||
|
In order to preserve data integrity, switching the authoritative tables (from the new tables to the posts table or the other way around) isn't allowed while there are orders pending synchronization.
|
||||||
|
|
||||||
|
## [Synchronization](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-6)
|
||||||
|
|
||||||
|
_Synchronization_ is the process of applying all the pending changes in the authoritative tables to the backup tables. _Orders pending synchronization_ are orders that have been modified in the authoritative tables but the changes haven't been applied to the backup tables yet.
|
||||||
|
|
||||||
|
This can happen in a number of ways:
|
||||||
|
|
||||||
|
|
||||||
|
### Immediate synchronization
|
||||||
|
|
||||||
|
If the `woocommerce_custom_orders_table_data_sync_enabled` setting is set to true, synchronization happens automatically and immediately as soon as the orders are changed in the authoritative tables.
|
||||||
|
|
||||||
|
|
||||||
|
### Manual synchronization
|
||||||
|
|
||||||
|
When immediate synchronization is disabled, it can be triggered manually via command line as follows: `wp wc cot sync`. It can also be triggered programmatically as follows:
|
||||||
|
|
||||||
|
```php
|
||||||
|
$synchronizer = wc_get_container()->get(Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer::class);
|
||||||
|
$order_ids = $synchronizer->get_next_batch_to_process( $batch_size );
|
||||||
|
if ( count( $order_ids ) ) {
|
||||||
|
$synchronizer->process_batch( $order_ids );
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
where `$batch_size` is the maximum count of orders to process.
|
||||||
|
|
||||||
|
|
||||||
|
### Scheduled synchronization
|
||||||
|
|
||||||
|
If immediate synchronization gets activated (`woocommerce_custom_orders_table_data_sync_enabled` is set to true) while there are orders pending synchronization, an instance of [DataSynchronizer](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/DataSynchronizer.php) will be enqueued using [BatchProcessingController](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/BatchProcessing/BatchProcessingController.php) so that the synchronization of created/modified/deleted orders will happen in batches via scheduled actions. This scheduling happens inside [CustomOrdersTableController](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/CustomOrdersTableController.php), by means of hooking into `woocommerce_update_options_advanced_custom_data_stores`.
|
||||||
|
|
||||||
|
If for some reason immediate synchronization is already active but synchronization is not scheduled, a trick to restart it is to go to the settings page (WooCommerce - Settings - Advanced - Custom data stores) and hit "Save" even without making any changes. As long as "Keep the posts table and the orders tables synchronized" is checked the synchronization scheduling will happen, even if it was checked before.
|
||||||
|
|
||||||
|
If the `woocommerce_auto_flip_authoritative_table_roles` option is set to true (there's a checkbox for it in the settings page), the authoritative tables will be switched automatically once all the orders have been synchronized. This is handled by [the CustomOrdersTableController class](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/CustomOrdersTableController.php).
|
||||||
|
|
||||||
|
|
||||||
|
### Deletion synchronization
|
||||||
|
|
||||||
|
Synchronization of order deletions is tricky: if an order exists in one set of tables (new tables or posts) but not in the other, it's not clear if the missing orders need to be created or if the existing orders need to be deleted. Theoretically, the orders missing from the backup tables imply the former and the orders missing from the authoritative tables imply the latter; but that's dangerous as a bug in the involved code could easily lead to the deletion of legitimate orders.
|
||||||
|
|
||||||
|
To achieve a robust order deletion synchronization mechanism the following is done. Whenever an order is deleted and immediate synchronization is disabled, a record is created in the `wp_wc_orders_meta` table that has `deleted_from` as the key and the name of the authoritative table the order was deleted from (`wp_wc_orders` or the posts table). Then at synchronization time these records are processed (the corresponding orders are deleted from the corresponding tables) and deleted afterwards.
|
||||||
|
|
||||||
|
An exception to the above are the [placeholder records](#placeholder-records): these are deleted immediately when the corresponding order is deleted from `wp_wc_orders`, even if immediate synchronization is disabled.
|
||||||
|
|
||||||
|
When the "**High-Performance Order Storage**" and "**Compatibility mode**" are enabled, WooCommerce populates the HPOS tables with data from posts & postmeta tables. The synchronization between the tables is [explained in detail in this document](https://developer.woo.com/2022/09/29/high-performance-order-storage-backward-compatibility-and-synchronization/#synchronization).
|
||||||
|
|
||||||
|
|
||||||
|
> You can find a deeper explanation about the synchronization between the tables in [this document about high-performance-order-storage-backward-compatibility-and-synchronization](https://developer.woo.com/2022/09/29/high-performance-order-storage-backward-compatibility-and-synchronization/#synchronization).
|
||||||
|
|
||||||
|
## [Placeholder records](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-7)
|
||||||
|
|
||||||
|
Order IDs must match in both the authoritative tables and the backup tables, otherwise synchronization wouldn't be possible. The order IDs that are compared for order identification and synchronization purposes are the ones from the `id` field in both the `wp_wc_orders` table and the posts table.
|
||||||
|
|
||||||
|
If the posts table is authoritative, achieving an order ID match is easy: the record in `wp_wc_orders` is created with the same ID and that's it. However, when the new orders tables are authoritative there's a problem: the posts table is used to store multiple types of data, not only orders; and by the time synchronization needs to happen, a non-order post could already exist having the same ID as the order to synchronize.
|
||||||
|
|
||||||
|
To solve this, _placeholder records_ are used. Whenever the new orders tables are authoritative and immediate synchronization is disabled, creating a new order will cause a record with post type `shop_order_placehold` and the same ID as the order to be created in the posts table; this effectively "reserves" the order ID in the posts table. Then, at synchronization time, the record is filled appropriately and its post type is changed to `shop_order`.
|
||||||
|
|
||||||
|
|
||||||
|
## [Order Data Storage](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-8)
|
||||||
|
|
||||||
|
You can switch between data stores freely to sync the data between the tables.
|
||||||
|
|
||||||
|
- If you select **"WordPress Post Tables"**, the system will save the order data within `_post` and `_postmeta` tables. The order tables are not utilized in this scenario.
|
||||||
|
|
||||||
|
![Select WordPress Post Tables](https://woo.com/wp-content/uploads/2023/10/image-18.png?w=650)
|
||||||
|
|
||||||
|
- If you select **"High-Performance Order Storage"**, the system will save the order data within the new WooCommerce order tables
|
||||||
|
|
||||||
|
![Select High-Performance Order Storage](https://woo.com/wp-content/uploads/2023/10/image-19.png?w=650)
|
||||||
|
|
||||||
|
- If you select **"WordPress Post Tables"** and **"Enable compatibility mode"**, the system will sync the order data between the posts/postmeta and the WooCommerce order tables.
|
||||||
|
|
||||||
|
![Select WordPress Post Tables and Enable compatibility mode](https://woo.com/wp-content/uploads/2023/10/image-20.png?w=650)
|
||||||
|
|
||||||
|
|
||||||
|
## [Incompatible Plugins](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-9)
|
||||||
|
|
||||||
|
If you are using a plugin that is not compatible with High-Performance Order Storage, then the HPOS option will be disabled under **WooCommerce > Settings > Advanced > Features**.
|
||||||
|
|
||||||
|
![Incompatible plugin](https://woo.com/wp-content/uploads/2023/10/image-21.png?w=650)
|
||||||
|
|
||||||
|
- You can click on "**View and manage**" to review the list of incompatible plugins
|
||||||
|
- Or you can visit `https://example.com/wp-admin/plugins.php?plugin_status=incompatible_with_feature&feature_id=custom_order_tables` to review the list of incompatible plugins (please replace `example.com` with your site domain)
|
||||||
|
|
||||||
|
![Plugins page](https://woo.com/wp-content/uploads/2023/10/image-22.png?w=650)
|
||||||
|
|
||||||
|
> **Note:** If you are using a third-party extension that isn't working properly with High-Performance Order Storage then please notify the developers of the extension and ask them to update their extension to add support for HPOS. It's up to the extension developers to add support for HPOS. We have [developer resources and documentation](https://developer.woo.com/2022/09/14/high-performance-order-storage-progress-report/) available to help with their integration efforts.
|
||||||
|
|
||||||
|
|
||||||
|
## [Disabling HPOS](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-10)
|
||||||
|
|
||||||
|
If you encounter problems or if you need to continue working with plugins that are not yet compatible with HPOS, then we recommend temporarily switching back to **WordPress posts storage**.
|
||||||
|
|
||||||
|
To do this, navigate to **WooCommerce ▸ Settings ▸ Advanced ▸ Features** and start by making sure that **compatibility mode** is enabled. If it was not already enabled, you may find you need to wait for some time while order data is synchronized across data-stores.
|
||||||
|
|
||||||
|
![WooCommerce ▸ Settings ▸ Advanced ▸ Features Screen](https://woo.com/wp-content/uploads/2023/10/hpos-feature-settings.png?w=650)
|
||||||
|
|
||||||
|
Once synchronization has completed, you can select **WordPress posts storage (legacy)** as your preferred option. You can also disable compatibility mode at this point. Once you are ready to re-enable HPOS, simply follow the instructions posted at the [start of this doc](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-3). Finally, remember to save this page between changes!
|
||||||
|
|
||||||
|
As noted earlier, we also strongly recommend reaching out to the support teams of any plugins that are incompatible, so they can take corrective action.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: How to enable HPOS
|
post_title: How to enable High Performance Order Storage
|
||||||
|
menu_title: Enable HPOS
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
From WooCommerce 8.2, released on October 2023, HPOS is enabled by default for new installations. Existing stores can switch to the "High-Performance Order Storage" from "WordPress Posts Storage" by following the below steps.
|
From WooCommerce 8.2, released on October 2023, HPOS is enabled by default for new installations. Existing stores can switch to the "High-Performance Order Storage" from "WordPress Posts Storage" by following the below steps.
|
||||||
|
|
|
@ -1,164 +0,0 @@
|
||||||
---
|
|
||||||
post_title: High Performance Order Storage (HPOS)
|
|
||||||
---
|
|
||||||
|
|
||||||
WooCommerce has traditionally stored store orders and related order information (like refunds) as custom WordPress post types or post meta records. This comes with performance issues.
|
|
||||||
|
|
||||||
[High-Performance Order Storage (HPOS)](https://developer.woo.com/2022/09/14/high-performance-order-storage-progress-report/) 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 2022, we published the [initial plan for the Custom Order Tables feature](https://developer.woo.com/2022/01/17/the-plan-for-the-woocommerce-custom-order-table/) and since then, we've been working hard to bring the High-Performance Order Storage (HPOS) to WooCommerce Core. In May 2022, we invited you to [test the order migration process](https://developer.woo.com/2022/05/16/call-for-early-testing-custom-order-table-migrations/) and provide feedback on how our initial work performs on real stores of varied configurations.
|
|
||||||
|
|
||||||
From WooCommerce 8.2, released on October 2023, [High-Performance Order Storage (HPOS)](https://developer.woo.com/2022/09/14/high-performance-order-storage-progress-report/) is officially released under the stable flag and will be enabled by default for new installations.
|
|
||||||
|
|
||||||
## [What's New with High-Performance Order Storage?](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-1)
|
|
||||||
|
|
||||||
Bringing High-Performance Order Storage (HPOS) to WooCommerce improves these three essential properties for eCommerce stores.
|
|
||||||
|
|
||||||
### Scalability
|
|
||||||
|
|
||||||
The rise in the number of customers and customer orders increases the load on your store's database - making it difficult to handle customer order requests and deliver a seamless user experience.
|
|
||||||
|
|
||||||
With High-Performance Order Storage, you get dedicated tables for data like orders and order addresses and thus dedicated indexes which results in fewer read/write operations and fewer busy tables. This feature enables eCommerce stores of all shapes and sizes to scale their business to their maximum potential - without expert intervention.
|
|
||||||
|
|
||||||
### Reliability
|
|
||||||
|
|
||||||
High-Performance Order Storage makes implementing and restoring targeted data backup easier. You'll no longer need to worry about losing orders, inventory numbers, or client information with reliable backup in these custom order tables. It'll also facilitate implementing read/write locks and prevent race conditions.
|
|
||||||
|
|
||||||
### Simplicity
|
|
||||||
|
|
||||||
You no longer have to go through a single huge database to locate underlying data and WooCommerce entries.
|
|
||||||
|
|
||||||
With High-Performance Order Storage, you can easily browse through the separate tables and easy-to-handle entries, independent of the table `_posts`, to find data or understand the table structure. It also lets you easily develop new plugins, implement designs for shops and products, and modify WooCommerce with more flexibility.
|
|
||||||
|
|
||||||
## [Background](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-2)
|
|
||||||
|
|
||||||
Before the release of version 8.2, WooCommerce relied on the `_post` and `_postmeta` table structures to store order information, which has served well over the years.
|
|
||||||
|
|
||||||
However, High-Performance Order Storage introduces dedicated tables for data like orders and order addresses and thus dedicated indexes which results in fewer read/write operations and fewer busy tables. This feature enables eCommerce stores of all shapes and sizes to scale their business to their maximum potential - without expert intervention.
|
|
||||||
|
|
||||||
The order data is synced from `_posts` and `_postmeta` table to four custom order tables:
|
|
||||||
|
|
||||||
1. `_wc_orders`
|
|
||||||
2. `_wc_order_addresses`
|
|
||||||
3. `_wc_order_operational_data`
|
|
||||||
4. `_wc_orders_meta`
|
|
||||||
|
|
||||||
|
|
||||||
## [Enabling the feature](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-3)
|
|
||||||
|
|
||||||
From WooCommerce 8.2, released on October 2023, HPOS is enabled by default for new installations. Existing stores can check [How to enable HPOS](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/enable-hpos.md)
|
|
||||||
|
|
||||||
## [Database tables](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-4)
|
|
||||||
|
|
||||||
A number of database tables are used to store order data by HPOS. The `get_all_table_names` method in [the OrdersTableDataStore class](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php) will return the names of all the tables.
|
|
||||||
|
|
||||||
## [Authoritative tables](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-5)
|
|
||||||
|
|
||||||
At any given time, while the HPOS feature is enabled, there are two roles for the involved database tables: _authoritative_ and _backup_. The authoritative tables are the working tables, where order data will be stored to and retrieved from during normal operation of the store. The _backup_ tables will receive a copy of the authoritative data whenever [synchronization](#synchronization) happens.
|
|
||||||
|
|
||||||
If the `woocommerce_custom_orders_table_enabled` options is set to true, HPOS is active and [the new tables](#database-tables) are authoritative, while the posts and post meta tables act as the backup tables. If the option is set to false, it's the other way around. The option can be changed via admin UI (WooCommerce - Settings - Advanced - Custom data stores).
|
|
||||||
|
|
||||||
[The CustomOrdersTableController class](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/CustomOrdersTableController.php) hooks on the `woocommerce_order_data_store` filter so that `WC_Data_Store::load( 'order' );` will return either an instance of [OrdersTableDataStore](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/OrdersTableDataStore.php) or an instance of [WC_Order_Data_Store_CPT](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/includes/data-stores/class-wc-order-data-store-cpt.php), depending on which are the authoritative tables.
|
|
||||||
|
|
||||||
In order to preserve data integrity, switching the authoritative tables (from the new tables to the posts table or the other way around) isn't allowed while there are orders pending synchronization.
|
|
||||||
|
|
||||||
## [Synchronization](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-6)
|
|
||||||
|
|
||||||
_Synchronization_ is the process of applying all the pending changes in the authoritative tables to the backup tables. _Orders pending synchronization_ are orders that have been modified in the authoritative tables but the changes haven't been applied to the backup tables yet.
|
|
||||||
|
|
||||||
This can happen in a number of ways:
|
|
||||||
|
|
||||||
|
|
||||||
### Immediate synchronization
|
|
||||||
|
|
||||||
If the `woocommerce_custom_orders_table_data_sync_enabled` setting is set to true, synchronization happens automatically and immediately as soon as the orders are changed in the authoritative tables.
|
|
||||||
|
|
||||||
|
|
||||||
### Manual synchronization
|
|
||||||
|
|
||||||
When immediate synchronization is disabled, it can be triggered manually via command line as follows: `wp wc cot sync`. It can also be triggered programmatically as follows:
|
|
||||||
|
|
||||||
```php
|
|
||||||
$synchronizer = wc_get_container()->get(Automattic\WooCommerce\Internal\DataStores\Orders\DataSynchronizer::class);
|
|
||||||
$order_ids = $synchronizer->get_next_batch_to_process( $batch_size );
|
|
||||||
if ( count( $order_ids ) ) {
|
|
||||||
$synchronizer->process_batch( $order_ids );
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
where `$batch_size` is the maximum count of orders to process.
|
|
||||||
|
|
||||||
|
|
||||||
### Scheduled synchronization
|
|
||||||
|
|
||||||
If immediate synchronization gets activated (`woocommerce_custom_orders_table_data_sync_enabled` is set to true) while there are orders pending synchronization, an instance of [DataSynchronizer](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/DataSynchronizer.php) will be enqueued using [BatchProcessingController](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/BatchProcessing/BatchProcessingController.php) so that the synchronization of created/modified/deleted orders will happen in batches via scheduled actions. This scheduling happens inside [CustomOrdersTableController](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/CustomOrdersTableController.php), by means of hooking into `woocommerce_update_options_advanced_custom_data_stores`.
|
|
||||||
|
|
||||||
If for some reason immediate synchronization is already active but synchronization is not scheduled, a trick to restart it is to go to the settings page (WooCommerce - Settings - Advanced - Custom data stores) and hit "Save" even without making any changes. As long as "Keep the posts table and the orders tables synchronized" is checked the synchronization scheduling will happen, even if it was checked before.
|
|
||||||
|
|
||||||
If the `woocommerce_auto_flip_authoritative_table_roles` option is set to true (there's a checkbox for it in the settings page), the authoritative tables will be switched automatically once all the orders have been synchronized. This is handled by [the CustomOrdersTableController class](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/src/Internal/DataStores/Orders/CustomOrdersTableController.php).
|
|
||||||
|
|
||||||
|
|
||||||
### Deletion synchronization
|
|
||||||
|
|
||||||
Synchronization of order deletions is tricky: if an order exists in one set of tables (new tables or posts) but not in the other, it's not clear if the missing orders need to be created or if the existing orders need to be deleted. Theoretically, the orders missing from the backup tables imply the former and the orders missing from the authoritative tables imply the latter; but that's dangerous as a bug in the involved code could easily lead to the deletion of legitimate orders.
|
|
||||||
|
|
||||||
To achieve a robust order deletion synchronization mechanism the following is done. Whenever an order is deleted and immediate synchronization is disabled, a record is created in the `wp_wc_orders_meta` table that has `deleted_from` as the key and the name of the authoritative table the order was deleted from (`wp_wc_orders` or the posts table). Then at synchronization time these records are processed (the corresponding orders are deleted from the corresponding tables) and deleted afterwards.
|
|
||||||
|
|
||||||
An exception to the above are the [placeholder records](#placeholder-records): these are deleted immediately when the corresponding order is deleted from `wp_wc_orders`, even if immediate synchronization is disabled.
|
|
||||||
|
|
||||||
When the "**High-Performance Order Storage**" and "**Compatibility mode**" are enabled, WooCommerce populates the HPOS tables with data from posts & postmeta tables. The synchronization between the tables is [explained in detail in this document](https://developer.woo.com/2022/09/29/high-performance-order-storage-backward-compatibility-and-synchronization/#synchronization).
|
|
||||||
|
|
||||||
|
|
||||||
> You can find a deeper explanation about the synchronization between the tables in [this document about high-performance-order-storage-backward-compatibility-and-synchronization](https://developer.woo.com/2022/09/29/high-performance-order-storage-backward-compatibility-and-synchronization/#synchronization).
|
|
||||||
|
|
||||||
## [Placeholder records](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-7)
|
|
||||||
|
|
||||||
Order IDs must match in both the authoritative tables and the backup tables, otherwise synchronization wouldn't be possible. The order IDs that are compared for order identification and synchronization purposes are the ones from the `id` field in both the `wp_wc_orders` table and the posts table.
|
|
||||||
|
|
||||||
If the posts table is authoritative, achieving an order ID match is easy: the record in `wp_wc_orders` is created with the same ID and that's it. However, when the new orders tables are authoritative there's a problem: the posts table is used to store multiple types of data, not only orders; and by the time synchronization needs to happen, a non-order post could already exist having the same ID as the order to synchronize.
|
|
||||||
|
|
||||||
To solve this, _placeholder records_ are used. Whenever the new orders tables are authoritative and immediate synchronization is disabled, creating a new order will cause a record with post type `shop_order_placehold` and the same ID as the order to be created in the posts table; this effectively "reserves" the order ID in the posts table. Then, at synchronization time, the record is filled appropriately and its post type is changed to `shop_order`.
|
|
||||||
|
|
||||||
|
|
||||||
## [Order Data Storage](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-8)
|
|
||||||
|
|
||||||
You can switch between data stores freely to sync the data between the tables.
|
|
||||||
|
|
||||||
- If you select **"WordPress Post Tables"**, the system will save the order data within `_post` and `_postmeta` tables. The order tables are not utilized in this scenario.
|
|
||||||
|
|
||||||
![Select WordPress Post Tables](https://woo.com/wp-content/uploads/2023/10/image-18.png?w=650)
|
|
||||||
|
|
||||||
- If you select **"High-Performance Order Storage"**, the system will save the order data within the new WooCommerce order tables
|
|
||||||
|
|
||||||
![Select High-Performance Order Storage](https://woo.com/wp-content/uploads/2023/10/image-19.png?w=650)
|
|
||||||
|
|
||||||
- If you select **"WordPress Post Tables"** and **"Enable compatibility mode"**, the system will sync the order data between the posts/postmeta and the WooCommerce order tables.
|
|
||||||
|
|
||||||
![Select WordPress Post Tables and Enable compatibility mode](https://woo.com/wp-content/uploads/2023/10/image-20.png?w=650)
|
|
||||||
|
|
||||||
|
|
||||||
## [Incompatible Plugins](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-9)
|
|
||||||
|
|
||||||
If you are using a plugin that is not compatible with High-Performance Order Storage, then the HPOS option will be disabled under **WooCommerce > Settings > Advanced > Features**.
|
|
||||||
|
|
||||||
![Incompatible plugin](https://woo.com/wp-content/uploads/2023/10/image-21.png?w=650)
|
|
||||||
|
|
||||||
- You can click on "**View and manage**" to review the list of incompatible plugins
|
|
||||||
- Or you can visit `https://example.com/wp-admin/plugins.php?plugin_status=incompatible_with_feature&feature_id=custom_order_tables` to review the list of incompatible plugins (please replace `example.com` with your site domain)
|
|
||||||
|
|
||||||
![Plugins page](https://woo.com/wp-content/uploads/2023/10/image-22.png?w=650)
|
|
||||||
|
|
||||||
> **Note:** If you are using a third-party extension that isn't working properly with High-Performance Order Storage then please notify the developers of the extension and ask them to update their extension to add support for HPOS. It's up to the extension developers to add support for HPOS. We have [developer resources and documentation](https://developer.woo.com/2022/09/14/high-performance-order-storage-progress-report/) available to help with their integration efforts.
|
|
||||||
|
|
||||||
|
|
||||||
## [Disabling HPOS](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-10)
|
|
||||||
|
|
||||||
If you encounter problems or if you need to continue working with plugins that are not yet compatible with HPOS, then we recommend temporarily switching back to **WordPress posts storage**.
|
|
||||||
|
|
||||||
To do this, navigate to **WooCommerce ▸ Settings ▸ Advanced ▸ Features** and start by making sure that **compatibility mode** is enabled. If it was not already enabled, you may find you need to wait for some time while order data is synchronized across data-stores.
|
|
||||||
|
|
||||||
![WooCommerce ▸ Settings ▸ Advanced ▸ Features Screen](https://woo.com/wp-content/uploads/2023/10/hpos-feature-settings.png?w=650)
|
|
||||||
|
|
||||||
Once synchronization has completed, you can select **WordPress posts storage (legacy)** as your preferred option. You can also disable compatibility mode at this point. Once you are ready to re-enable HPOS, simply follow the instructions posted at the [start of this doc](https://github.com/woocommerce/woocommerce/blob/trunk/docs/high-performance-order-storage/#section-3). Finally, remember to save this page between changes!
|
|
||||||
|
|
||||||
As noted earlier, we also strongly recommend reaching out to the support teams of any plugins that are incompatible, so they can take corrective action.
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Translating WooCommerce
|
post_title: How to translate WooCommerce
|
||||||
|
menu_title: Translating WooCommerce
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
WooCommerce is already translated into several languages and is translation-ready right out of the box. All that's needed is a translation file for your language.
|
WooCommerce is already translated into several languages and is translation-ready right out of the box. All that's needed is a translation file for your language.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Payment gateway API
|
post_title: WooCommerce Payment Gateway API
|
||||||
|
menu_title: Payment Gateway API
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
Payment gateways in WooCommerce are class based and can be added through traditional plugins. This guide provides an intro to gateway development.
|
Payment gateways in WooCommerce are class based and can be added through traditional plugins. This guide provides an intro to gateway development.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce payment gateway plugin base
|
post_title: WooCommerce payment gateway plugin base
|
||||||
|
tags: code-snippet
|
||||||
---
|
---
|
||||||
|
|
||||||
This code can be used as a base to create your own simple custom payment gateway for WooCommerce. If not used in a custom plugin, you need to add this code to your child theme's functions.php file or via a plugin that allows custom functions to be added, such as the [Code snippets](https://wordpress.org/plugins/code-snippets/) plugin. Please don't add custom code directly to your parent theme's functions.php file as this will be wiped entirely when you update the theme.
|
This code can be used as a base to create your own simple custom payment gateway for WooCommerce. If not used in a custom plugin, you need to add this code to your child theme's functions.php file or via a plugin that allows custom functions to be added, such as the [Code snippets](https://wordpress.org/plugins/code-snippets/) plugin. Please don't add custom code directly to your parent theme's functions.php file as this will be wiped entirely when you update the theme.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Payment token API
|
post_title: WooCommerce Payment Token API
|
||||||
|
menu_title: Payment Token API
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
WooCommerce 2.6 introduced an API for storing and managing payment tokens for gateways. Users can also manage these tokens from their account settings and choose from saved payment tokens on checkout.
|
WooCommerce 2.6 introduced an API for storing and managing payment tokens for gateways. Users can also manage these tokens from their account settings and choose from saved payment tokens on checkout.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Block template lifecycle
|
post_title: Managing the lifecycle of WooCommerce block templates
|
||||||
|
menu_title: Block template lifecycle
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
A block template is a tree structure of blocks that define the product editor's form structure.
|
A block template is a tree structure of blocks that define the product editor's form structure.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Product editor extensibility guidelines
|
post_title: Product editor extensibility guidelines
|
||||||
|
menu_title: Product editor extensibility guidelines
|
||||||
---
|
---
|
||||||
|
|
||||||
> **Notice:** These guidelines are currently a **work in progress**. Please be aware that some details might be incomplete or subject to change. We appreciate your patience and welcome any contributions!
|
> **Notice:** These guidelines are currently a **work in progress**. Please be aware that some details might be incomplete or subject to change. We appreciate your patience and welcome any contributions!
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Product Editor Development Handbook
|
post_title: Product editor development handbook
|
||||||
|
menu_title: Product editor development handbook
|
||||||
---
|
---
|
||||||
|
|
||||||
This handbook is a guide for extension developers looking to add support for the new product editor in their extensions. The product editor uses [Gutenberg's Block Editor](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-editor), which is going to help WooCommerce evolve alongside the WordPress ecosystem.
|
This handbook is a guide for extension developers looking to add support for the new product editor in their extensions. The product editor uses [Gutenberg's Block Editor](https://github.com/WordPress/gutenberg/tree/trunk/packages/block-editor), which is going to help WooCommerce evolve alongside the WordPress ecosystem.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Coding standards
|
post_title: WooCommerce coding standards
|
||||||
|
menu_title: Coding standards
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Position of hooks
|
## Position of hooks
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce core critical flows
|
post_title: WooCommerce core critical flows
|
||||||
|
menu_title: Core critical flows
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
We have identified what we consider to be our most critical user flows within WooCommerce Core. These flows will help us focus and prioritize our testing efforts. They will also help us consider the impact of changes and priority of issues.
|
We have identified what we consider to be our most critical user flows within WooCommerce Core. These flows will help us focus and prioritize our testing efforts. They will also help us consider the impact of changes and priority of issues.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: GDPR Compliance Guidelines for WooCommerce Extensions
|
post_title: GDPR compliance guidelines for WooCommerce extensions
|
||||||
|
menu_title: GDPR compliance
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce grammar, punctuation and capitalization guide
|
post_title: WooCommerce grammar, punctuation and capitalization guide
|
||||||
|
menu_title: Grammar, punctuation and capitalization
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
Following grammar, punctuation and style guidelines helps keep our presentation consistent. Users have a better experience if they know what to expect and where to find the information they need.
|
Following grammar, punctuation and style guidelines helps keep our presentation consistent. Users have a better experience if they know what to expect and where to find the information they need.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Naming conventions
|
post_title: Naming conventions
|
||||||
|
menu_title: Naming conventions
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## PHP
|
## PHP
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Performance optimization for WooCommerce stores
|
post_title: How to optimize performance for WooCommerce stores
|
||||||
|
menu_title: Optimize store performance
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Removing /product/ , /product-category/ , or /shop/ from URLs
|
post_title: Understanding the risks of removing URL bases in WooCommerce
|
||||||
|
menu_title: Risks of removing URL bases
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## [In sum](https://github.com/woocommerce/woocommerce/blob/trunk/docs/quality-and-best-practices/removing-product-product-category-or-shop-from-the-urls.md#section-1)
|
## [In sum](https://github.com/woocommerce/woocommerce/blob/trunk/docs/quality-and-best-practices/removing-product-product-category-or-shop-from-the-urls.md#section-1)
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Writing high quality testing instructions
|
post_title: Writing high quality testing instructions
|
||||||
|
Menu_title: Writing testing instructions
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Adding columns to analytics reports and CSV downloads
|
post_title: How to add columns to analytics reports and CSV downloads
|
||||||
|
menu_title: Add columns to analytics reports
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
Adding columns to analytics reports are a really interesting way to add functionality to WooCommerce. New data can be consumed in the table view of the user interface and in your user's favourite spreadsheet or third party application by generating a CSV.
|
Adding columns to analytics reports are a really interesting way to add functionality to WooCommerce. New data can be consumed in the table view of the user interface and in your user's favourite spreadsheet or third party application by generating a CSV.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Extending WooCommerce Analytics reports
|
post_title: How to extend WooCommerce analytics reports
|
||||||
|
menu_title: Extend analytics reports
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Getting started with the REST API
|
post_title: Getting started with the WooCommerce REST API
|
||||||
|
menu_title: Getting started
|
||||||
---
|
---
|
||||||
|
|
||||||
The REST API is a powerful part of WooCommerce which lets you read and write various parts of WooCommerce data such as orders, products, coupons, customers, and shipping zones.
|
The REST API is a powerful part of WooCommerce which lets you read and write various parts of WooCommerce data such as orders, products, coupons, customers, and shipping zones.
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: WooCommerce security best practices
|
post_title: WooCommerce security best practices
|
||||||
|
menu_title: Security best practices
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## Introduction
|
## Introduction
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Shipping method API
|
post_title: Shipping method API
|
||||||
|
menu_title: Shipping method API
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
WooCommerce has a shipping method API which plugins can use to add their own rates. This article will take you through the steps to creating a new shipping method and interacting with the API.
|
WooCommerce has a shipping method API which plugins can use to add their own rates. This article will take you through the steps to creating a new shipping method and interacting with the API.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Classic Theme Developer Handbook
|
post_title: Classic theme development handbook
|
||||||
|
menu_title: Classic theme development
|
||||||
---
|
---
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Conditional tags
|
post_title: Conditional tags in WooCommerce
|
||||||
|
menu_title: Conditional tags
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## What are "conditional tags"?
|
## What are "conditional tags"?
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Fixing outdated WooCommerce templates
|
post_title: How to fix outdated WooCommerce templates
|
||||||
|
menu_title: Fix outdated templates
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
## Template Updates and Changes
|
## Template Updates and Changes
|
||||||
|
|
|
@ -1,4 +1,8 @@
|
||||||
# Image sizing for theme developers
|
---
|
||||||
|
post_title: Image sizing for theme developers
|
||||||
|
menu_title: Image sizing
|
||||||
|
tags: reference
|
||||||
|
---
|
||||||
|
|
||||||
**Note:** this document was created for use when developing classic themes (as opposed to block themes).
|
**Note:** this document was created for use when developing classic themes (as opposed to block themes).
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Set up and use a child theme
|
post_title: How to set up and use a child theme
|
||||||
|
menu_title: Set up and use a child theme
|
||||||
|
tags: how-to
|
||||||
---
|
---
|
||||||
|
|
||||||
**Note:** This document is intended for creating and using classic child themes. For a comprehensive guide on creating a child block theme and understanding the differences between a classic and block theme, please refer to [this detailed documentation](https://learn.wordpress.org/lesson-plan/create-a-basic-child-theme-for-block-themes/).
|
**Note:** This document is intended for creating and using classic child themes. For a comprehensive guide on creating a child block theme and understanding the differences between a classic and block theme, please refer to [this detailed documentation](https://learn.wordpress.org/lesson-plan/create-a-basic-child-theme-for-block-themes/).
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: Theme design and user experience guidelines
|
post_title: Theme design and user experience guidelines
|
||||||
|
menu_title: Theme design and user experience guidelines
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
This guide covers general guidelines and best practices to follow in order to ensure your theme experience aligns with ecommerce industry standards and WooCommerce for providing a great online shopping experience, maximizing sales, ensuring ease of use, seamless integration, and strong UX adoption.
|
This guide covers general guidelines and best practices to follow in order to ensure your theme experience aligns with ecommerce industry standards and WooCommerce for providing a great online shopping experience, maximizing sales, ensuring ease of use, seamless integration, and strong UX adoption.
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
---
|
---
|
||||||
post_title: Thumbnail Image Regeneration
|
post_title: Thumbnail image regeneration
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
WooCommerce 3.3 introduced thumbnail regeneration functionality. In the past when image size settings were changed you would need to install an external plugin and then have it regenerate all WordPress image thumbnails before the changes would be visible.
|
WooCommerce 3.3 introduced thumbnail regeneration functionality. In the past when image size settings were changed you would need to install an external plugin and then have it regenerate all WordPress image thumbnails before the changes would be visible.
|
||||||
|
|
|
@ -1,7 +1,379 @@
|
||||||
---
|
---
|
||||||
category_title: WC CLI
|
category_title: WooCommerce CLI
|
||||||
category_slug: wc-cli
|
category_slug: wc-cli
|
||||||
post_title: WC CLI
|
post_title: WooCommerce CLI
|
||||||
---
|
---
|
||||||
|
|
||||||
Master the WooCommerce Command Line Interface for efficient store management and automation with detailed command line tutorials.
|
WooCommerce CLI (WC-CLI) offers the ability to manage WooCommerce (WC) via the command-line, using WP CLI. The documentation here covers the version of WC CLI that started shipping in WC 3.0.0 and later.
|
||||||
|
|
||||||
|
WC CLI is powered by the [WC REST API](https://woocommerce.github.io/woocommerce-rest-api-docs/), meaning most of what is possible with the REST API can also be achieved via the command-line.
|
||||||
|
|
||||||
|
_If you're looking for documentation on the [WC 2.5 and 2.6's CLI go here](https://github.com/woocommerce/woocommerce/wiki/Legacy-CLI-commands-(v2.6-and-below))._
|
||||||
|
|
||||||
|
## What is WP-CLI?
|
||||||
|
|
||||||
|
For those who have never heard before WP-CLI, here's a brief description extracted from the [official website](http://wp-cli.org/).
|
||||||
|
|
||||||
|
> **WP-CLI** is a set of command-line tools for managing WordPress installations. You can update plugins, set up multisite installs and much more, without using a web browser.
|
||||||
|
|
||||||
|
## WooCommerce Commands
|
||||||
|
|
||||||
|
A full listing of WC-CLI commands and their accepted arguments can be found on the [commands page](https://github.com/woocommerce/woocommerce/wiki/WC-CLI-Commands).
|
||||||
|
|
||||||
|
All WooCommerce-related commands are grouped into `wp wc` command. The available commands (as of WC 3.0) are:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$ wp wc
|
||||||
|
usage: wp wc customer <command>
|
||||||
|
or: wp wc customer_download <command>
|
||||||
|
or: wp wc order_note <command>
|
||||||
|
or: wp wc payment_gateway <command>
|
||||||
|
or: wp wc product <command>
|
||||||
|
or: wp wc product_attribute <command>
|
||||||
|
or: wp wc product_attribute_term <command>
|
||||||
|
or: wp wc product_cat <command>
|
||||||
|
or: wp wc product_review <command>
|
||||||
|
or: wp wc product_shipping_class <command>
|
||||||
|
or: wp wc product_tag <command>
|
||||||
|
or: wp wc product_variation <command>
|
||||||
|
or: wp wc shipping_method <command>
|
||||||
|
or: wp wc shipping_zone <command>
|
||||||
|
or: wp wc shipping_zone_location <command>
|
||||||
|
or: wp wc shipping_zone_method <command>
|
||||||
|
or: wp wc shop_coupon <command>
|
||||||
|
or: wp wc shop_order <command>
|
||||||
|
or: wp wc shop_order_refund <command>
|
||||||
|
or: wp wc tax <command>
|
||||||
|
or: wp wc tax_class <command>
|
||||||
|
or: wp wc tool <command>
|
||||||
|
or: wp wc webhook <command>
|
||||||
|
or: wp wc webhook_delivery <command>
|
||||||
|
|
||||||
|
See 'wp help wc <command>' for more information on a specific command.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: When using the commands, you must specify your username or user ID using the `--user` argument. This is to let the REST API know which user should be used.
|
||||||
|
|
||||||
|
You can see more details about the commands using `wp help wc` or with the `--help` flag, which explains arguments and subcommands.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
`wp wc customer --help`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NAME
|
||||||
|
|
||||||
|
wp wc customer
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
|
||||||
|
wp wc customer <command>
|
||||||
|
|
||||||
|
SUBCOMMANDS
|
||||||
|
|
||||||
|
create Create a new item.
|
||||||
|
delete Delete an existing item.
|
||||||
|
get Get a single item.
|
||||||
|
list List all items.
|
||||||
|
update Update an existing item.
|
||||||
|
```
|
||||||
|
|
||||||
|
`wp wc customer list --help`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
NAME
|
||||||
|
|
||||||
|
wp wc customer list
|
||||||
|
|
||||||
|
DESCRIPTION
|
||||||
|
|
||||||
|
List all items.
|
||||||
|
|
||||||
|
SYNOPSIS
|
||||||
|
|
||||||
|
wp wc customer list [--context=<context>] [--page=<page>]
|
||||||
|
[--per_page=<per_page>] [--search=<search>] [--exclude=<exclude>]
|
||||||
|
[--include=<include>] [--offset=<offset>] [--order=<order>]
|
||||||
|
[--orderby=<orderby>] [--email=<email>] [--role=<role>] [--fields=<fields>]
|
||||||
|
[--field=<field>] [--format=<format>]
|
||||||
|
|
||||||
|
|
||||||
|
OPTIONS
|
||||||
|
|
||||||
|
[--context=<context>]
|
||||||
|
Scope under which the request is made; determines fields present in
|
||||||
|
response.
|
||||||
|
|
||||||
|
[--page=<page>]
|
||||||
|
Current page of the collection.
|
||||||
|
|
||||||
|
[--per_page=<per_page>]
|
||||||
|
Maximum number of items to be returned in result set.
|
||||||
|
|
||||||
|
[--search=<search>]
|
||||||
|
Limit results to those matching a string.
|
||||||
|
|
||||||
|
[--exclude=<exclude>]
|
||||||
|
Ensure result set excludes specific IDs.
|
||||||
|
|
||||||
|
[--include=<include>]
|
||||||
|
Limit result set to specific IDs.
|
||||||
|
|
||||||
|
[--offset=<offset>]
|
||||||
|
Offset the result set by a specific number of items.
|
||||||
|
|
||||||
|
[--order=<order>]
|
||||||
|
Order sort attribute ascending or descending.
|
||||||
|
|
||||||
|
[--orderby=<orderby>]
|
||||||
|
Sort collection by object attribute.
|
||||||
|
|
||||||
|
[--email=<email>]
|
||||||
|
Limit result set to resources with a specific email.
|
||||||
|
|
||||||
|
[--role=<role>]
|
||||||
|
Limit result set to resources with a specific role.
|
||||||
|
|
||||||
|
[--fields=<fields>]
|
||||||
|
Limit response to specific fields. Defaults to all fields.
|
||||||
|
|
||||||
|
[--field=<field>]
|
||||||
|
Get the value of an individual field.
|
||||||
|
|
||||||
|
[--format=<format>]
|
||||||
|
Render response in a particular format.
|
||||||
|
---
|
||||||
|
default: table
|
||||||
|
options:
|
||||||
|
- table
|
||||||
|
- json
|
||||||
|
- csv
|
||||||
|
- ids
|
||||||
|
- yaml
|
||||||
|
- count
|
||||||
|
- headers
|
||||||
|
- body
|
||||||
|
- envelope
|
||||||
|
---
|
||||||
|
```
|
||||||
|
|
||||||
|
Arguments like `--context`, `--fields`, `--field`, `--format` can be used on any `get` or `list` WC CLI command.
|
||||||
|
|
||||||
|
The `--porcelain` argument can be used on any `create` or `update` command to just get back the ID of the object, instead of a response.
|
||||||
|
|
||||||
|
Updating or creating some fields will require passing JSON. These are fields that contain arrays of information - for example, setting [https://woocommerce.github.io/woocommerce-rest-api-docs/#customer-properties](billing information) using the customer command. This is just passing key/value pairs.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
|
||||||
|
`$ wp wc customer create --email='me@woo.local' --user=1 --billing='{"first_name":"Justin","last_name":"S","company":"Automattic"}' --password='he
|
||||||
|
llo'`
|
||||||
|
|
||||||
|
`Success: Created customer 16.`
|
||||||
|
|
||||||
|
`$ wp wc customer get 16 --user=1`
|
||||||
|
|
||||||
|
```bash
|
||||||
|
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
| id | 16 |
|
||||||
|
| date_created | 2016-12-09T20:07:35 |
|
||||||
|
| date_modified | 2016-12-09T20:07:35 |
|
||||||
|
| email | me@woo.local |
|
||||||
|
| first_name | |
|
||||||
|
| last_name | |
|
||||||
|
| role | customer |
|
||||||
|
| username | me |
|
||||||
|
| billing | {"first_name":"Justin","last_name":"S","company":"Automattic","address_1":"","address_2":"","city":"","state":"","postcode":"","country":"","email":"","phone" |
|
||||||
|
| | :""} |
|
||||||
|
| shipping | {"first_name":"","last_name":"","company":"","address_1":"","address_2":"","city":"","state":"","postcode":"","country":""} |
|
||||||
|
| is_paying_customer | false |
|
||||||
|
| meta_data | |
|
||||||
|
| orders_count | 0 |
|
||||||
|
|
||||||
|
| total_spent | 0.00 |
|
||||||
|
| avatar_url | http://2.gravatar.com/avatar/81a56b00c3b9952d6d2c107a8907e71f?s=96 |
|
||||||
|
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
Full documentation for every command is available using `--help`. Below are some example commands to show what the CLI can do.
|
||||||
|
|
||||||
|
All the examples below use user ID 1 (usually an admin account), but you should replace that with your own user account.
|
||||||
|
|
||||||
|
You can also find other examples (without output) by looking at [the testing files for our CLI tests](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/tests/cli/features).
|
||||||
|
|
||||||
|
Each command will have a `.feature` file. For example, [these some payment gateway commands](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/tests/cli/features/payment_gateway.feature).
|
||||||
|
|
||||||
|
### Clearing the product/shop transients cache
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc tool run clear_transients --user=1`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
`Success: Updated system_status_tool clear_transients.`
|
||||||
|
|
||||||
|
### Listing all system tools
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc tool list --user=1`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
+----------------------------+----------------------------------+-------------------------------+-----------------------------------------------------------------------------------+
|
||||||
|
| id | name | action | description |
|
||||||
|
+----------------------------+----------------------------------+-------------------------------+-----------------------------------------------------------------------------------+
|
||||||
|
| clear_transients | WC transients | Clear transients | This tool will clear the product/shop transients cache. |
|
||||||
|
| clear_expired_transients | Expired transients | Clear expired transients | This tool will clear ALL expired transients from WordPress. |
|
||||||
|
| delete_orphaned_variations | Orphaned variations | Delete orphaned variations | This tool will delete all variations which have no parent. |
|
||||||
|
| recount_terms | Term counts | Recount terms | This tool will recount product terms - useful when changing your settings in a wa |
|
||||||
|
| | | | y which hides products from the catalog. |
|
||||||
|
| reset_roles | Capabilities | Reset capabilities | This tool will reset the admin, customer and shop_manager roles to default. Use t |
|
||||||
|
| | | | his if your users cannot access all of the WooCommerce admin pages. |
|
||||||
|
| clear_sessions | Customer sessions | Clear all sessions | <strong class="red">Note:</strong> This tool will delete all customer session dat |
|
||||||
|
| | | | a from the database, including any current live carts. |
|
||||||
|
| install_pages | Install WooCommerce pages | Install pages | <strong class="red">Note:</strong> This tool will install all the missing WooComm |
|
||||||
|
| | | | erce pages. Pages already defined and set up will not be replaced. |
|
||||||
|
| delete_taxes | Delete all WooCommerce tax rates | Delete ALL tax rates | <strong class="red">Note:</strong> This option will delete ALL of your tax rates, |
|
||||||
|
| | | | use with caution. |
|
||||||
|
| reset_tracking | Reset usage tracking settings | Reset usage tracking settings | This will reset your usage tracking settings, causing it to show the opt-in banne |
|
||||||
|
| | | | r again and not sending any data. |
|
||||||
|
+----------------------------+----------------------------------+-------------------------------+-----------------------------------------------------------------------------------+
|
||||||
|
````
|
||||||
|
|
||||||
|
### Creating a customer
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc customer create --email='woo@woo.local' --user=1 --billing='{"first_name":"Bob","last_name":"Tester","company":"Woo", "address_1": "123 Main St.", "city":"New York", "state:": "NY", "country":"USA"}' --shipping='{"first_name":"Bob","last_name":"Tester","company":"Woo", "address_1": "123 Main St.", "city":"New York", "state:": "NY", "country":"USA"}' --password='hunter2' --username='mrbob' --first_name='Bob' --last_name='Tester'`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
`Success: Created customer 17.`
|
||||||
|
|
||||||
|
### Getting a customer in CSV format
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc customer get 17 --user=1 --format=csv`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
Field,Value
|
||||||
|
id,17
|
||||||
|
date_created,2016-12-09T20:22:10
|
||||||
|
date_modified,2016-12-09T20:22:10
|
||||||
|
email,woo@woo.local
|
||||||
|
first_name,Bob
|
||||||
|
last_name,Tester
|
||||||
|
role,customer
|
||||||
|
username,mrbob
|
||||||
|
billing,"{""first_name"":""Bob"",""last_name"":""Tester"",""company"":""Woo"",""address_1"":""123 Main St."",""address_2"":"""",""city"":""New York"",""state"":"""",""postcode"":"""","
|
||||||
|
"country"":""USA"",""email"":"""",""phone"":""""}"
|
||||||
|
shipping,"{""first_name"":""Bob"",""last_name"":""Tester"",""company"":""Woo"",""address_1"":""123 Main St."",""address_2"":"""",""city"":""New York"",""state"":"""",""postcode"":"""",
|
||||||
|
""country"":""USA""}"
|
||||||
|
is_paying_customer,false
|
||||||
|
meta_data,"[{""id"":825,""key"":""shipping_company"",""value"":""Woo""},{""id"":829,""key"":""_order_count"",""value"":""0""},{""id"":830,""key"":""_money_spent"",""value"":""0""}]"
|
||||||
|
orders_count,0
|
||||||
|
total_spent,0.00
|
||||||
|
avatar_url,http://2.gravatar.com/avatar/5791d33f7d6472478c0b5fa69133f09a?s=96
|
||||||
|
```
|
||||||
|
|
||||||
|
### Adding a customer note on order 355
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc order_note create 355 --note="Great repeat customer" --customer_note=true --user=1`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
`Success: Created order_note 286.`
|
||||||
|
|
||||||
|
### Getting an order note
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc order_note get 355 286 --user=1`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
+---------------+-----------------------+
|
||||||
|
| Field | Value |
|
||||||
|
+---------------+-----------------------+
|
||||||
|
| id | 286 |
|
||||||
|
| date_created | 2016-12-09T20:27:26 |
|
||||||
|
| note | Great repeat customer |
|
||||||
|
| customer_note | true |
|
||||||
|
+---------------+-----------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
### Updating a coupon
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc shop_coupon update 45 --amount='10' --discount_type='percent' --free_shipping=true --user=1`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
`Success: Updated shop_coupon 45.`
|
||||||
|
|
||||||
|
### Getting a coupon
|
||||||
|
|
||||||
|
Command:
|
||||||
|
|
||||||
|
`$ wp wc shop_coupon get 45 --user=1`
|
||||||
|
|
||||||
|
Response:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
+-----------------------------+---------------------+
|
||||||
|
| Field | Value |
|
||||||
|
|
||||||
|
+-----------------------------+---------------------+
|
||||||
|
| id | 45 |
|
||||||
|
| code | hello |
|
||||||
|
| amount | 10.00 |
|
||||||
|
| date_created | 2016-08-09T17:37:28 |
|
||||||
|
| date_modified | 2016-12-09T20:30:32 |
|
||||||
|
| discount_type | percent |
|
||||||
|
| description | Yay |
|
||||||
|
| date_expires | 2016-10-22T00:00:00 |
|
||||||
|
| usage_count | 2 |
|
||||||
|
| individual_use | false |
|
||||||
|
| product_ids | [] |
|
||||||
|
| excluded_product_ids | [] |
|
||||||
|
| usage_limit | null |
|
||||||
|
| usage_limit_per_user | null |
|
||||||
|
| limit_usage_to_x_items | null |
|
||||||
|
| free_shipping | true |
|
||||||
|
| product_categories | [] |
|
||||||
|
| excluded_product_categories | [] |
|
||||||
|
| exclude_sale_items | false |
|
||||||
|
| minimum_amount | 0.00 |
|
||||||
|
| maximum_amount | 0.00 |
|
||||||
|
| email_restrictions | [] |
|
||||||
|
| used_by | ["1","1"] |
|
||||||
|
| meta_data | [] |
|
||||||
|
+-----------------------------+---------------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
## Frequently Asked Questions
|
||||||
|
|
||||||
|
### I get a 401 error when using commands, what do I do?
|
||||||
|
|
||||||
|
If you are getting a 401 error like `Error: Sorry, you cannot list resources. {"status":401}`, you are trying to use the command unauthenticated. The WooCommerce CLI as of 3.0 requires you to provide a proper user to run the action as. Pass in your user ID using the `--user` flag.
|
||||||
|
|
||||||
|
### I am trying to update a list of X, but it's not saving
|
||||||
|
|
||||||
|
Some 'lists' are actually objects. For example, if you want to set categories for a product, [the REST API expects an _array of objects_](https://woocommerce.github.io/woocommerce-rest-api-docs/#product-properties).
|
||||||
|
|
||||||
|
To set this you would use JSON like this:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
wp wc product create --name='Product Name' --categories='[ { "id" : 21 } ]' --user=admin
|
||||||
|
```
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
---
|
---
|
||||||
post_title: WC CLI - commands
|
post_title: WooCommerce CLI Commands
|
||||||
|
menu_title: Commands
|
||||||
|
tags: reference
|
||||||
---
|
---
|
||||||
|
|
||||||
## wc shop_coupon
|
## wc shop_coupon
|
||||||
|
|
|
@ -1,377 +0,0 @@
|
||||||
---
|
|
||||||
post_title: WC CLI - overview
|
|
||||||
---
|
|
||||||
|
|
||||||
WooCommerce CLI (WC-CLI) offers the ability to manage WooCommerce (WC) via the command-line, using WP CLI. The documentation here covers the version of WC CLI that started shipping in WC 3.0.0 and later.
|
|
||||||
|
|
||||||
WC CLI is powered by the [WC REST API](https://woocommerce.github.io/woocommerce-rest-api-docs/), meaning most of what is possible with the REST API can also be achieved via the command-line.
|
|
||||||
|
|
||||||
_If you're looking for documentation on the [WC 2.5 and 2.6's CLI go here](https://github.com/woocommerce/woocommerce/wiki/Legacy-CLI-commands-(v2.6-and-below))._
|
|
||||||
|
|
||||||
## What is WP-CLI?
|
|
||||||
|
|
||||||
For those who have never heard before WP-CLI, here's a brief description extracted from the [official website](http://wp-cli.org/).
|
|
||||||
|
|
||||||
> **WP-CLI** is a set of command-line tools for managing WordPress installations. You can update plugins, set up multisite installs and much more, without using a web browser.
|
|
||||||
|
|
||||||
## WooCommerce Commands
|
|
||||||
|
|
||||||
A full listing of WC-CLI commands and their accepted arguments can be found on the [commands page](https://github.com/woocommerce/woocommerce/wiki/WC-CLI-Commands).
|
|
||||||
|
|
||||||
All WooCommerce-related commands are grouped into `wp wc` command. The available commands (as of WC 3.0) are:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
$ wp wc
|
|
||||||
usage: wp wc customer <command>
|
|
||||||
or: wp wc customer_download <command>
|
|
||||||
or: wp wc order_note <command>
|
|
||||||
or: wp wc payment_gateway <command>
|
|
||||||
or: wp wc product <command>
|
|
||||||
or: wp wc product_attribute <command>
|
|
||||||
or: wp wc product_attribute_term <command>
|
|
||||||
or: wp wc product_cat <command>
|
|
||||||
or: wp wc product_review <command>
|
|
||||||
or: wp wc product_shipping_class <command>
|
|
||||||
or: wp wc product_tag <command>
|
|
||||||
or: wp wc product_variation <command>
|
|
||||||
or: wp wc shipping_method <command>
|
|
||||||
or: wp wc shipping_zone <command>
|
|
||||||
or: wp wc shipping_zone_location <command>
|
|
||||||
or: wp wc shipping_zone_method <command>
|
|
||||||
or: wp wc shop_coupon <command>
|
|
||||||
or: wp wc shop_order <command>
|
|
||||||
or: wp wc shop_order_refund <command>
|
|
||||||
or: wp wc tax <command>
|
|
||||||
or: wp wc tax_class <command>
|
|
||||||
or: wp wc tool <command>
|
|
||||||
or: wp wc webhook <command>
|
|
||||||
or: wp wc webhook_delivery <command>
|
|
||||||
|
|
||||||
See 'wp help wc <command>' for more information on a specific command.
|
|
||||||
```
|
|
||||||
|
|
||||||
**Note**: When using the commands, you must specify your username or user ID using the `--user` argument. This is to let the REST API know which user should be used.
|
|
||||||
|
|
||||||
You can see more details about the commands using `wp help wc` or with the `--help` flag, which explains arguments and subcommands.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
`wp wc customer --help`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
NAME
|
|
||||||
|
|
||||||
wp wc customer
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
|
|
||||||
wp wc customer <command>
|
|
||||||
|
|
||||||
SUBCOMMANDS
|
|
||||||
|
|
||||||
create Create a new item.
|
|
||||||
delete Delete an existing item.
|
|
||||||
get Get a single item.
|
|
||||||
list List all items.
|
|
||||||
update Update an existing item.
|
|
||||||
```
|
|
||||||
|
|
||||||
`wp wc customer list --help`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
NAME
|
|
||||||
|
|
||||||
wp wc customer list
|
|
||||||
|
|
||||||
DESCRIPTION
|
|
||||||
|
|
||||||
List all items.
|
|
||||||
|
|
||||||
SYNOPSIS
|
|
||||||
|
|
||||||
wp wc customer list [--context=<context>] [--page=<page>]
|
|
||||||
[--per_page=<per_page>] [--search=<search>] [--exclude=<exclude>]
|
|
||||||
[--include=<include>] [--offset=<offset>] [--order=<order>]
|
|
||||||
[--orderby=<orderby>] [--email=<email>] [--role=<role>] [--fields=<fields>]
|
|
||||||
[--field=<field>] [--format=<format>]
|
|
||||||
|
|
||||||
|
|
||||||
OPTIONS
|
|
||||||
|
|
||||||
[--context=<context>]
|
|
||||||
Scope under which the request is made; determines fields present in
|
|
||||||
response.
|
|
||||||
|
|
||||||
[--page=<page>]
|
|
||||||
Current page of the collection.
|
|
||||||
|
|
||||||
[--per_page=<per_page>]
|
|
||||||
Maximum number of items to be returned in result set.
|
|
||||||
|
|
||||||
[--search=<search>]
|
|
||||||
Limit results to those matching a string.
|
|
||||||
|
|
||||||
[--exclude=<exclude>]
|
|
||||||
Ensure result set excludes specific IDs.
|
|
||||||
|
|
||||||
[--include=<include>]
|
|
||||||
Limit result set to specific IDs.
|
|
||||||
|
|
||||||
[--offset=<offset>]
|
|
||||||
Offset the result set by a specific number of items.
|
|
||||||
|
|
||||||
[--order=<order>]
|
|
||||||
Order sort attribute ascending or descending.
|
|
||||||
|
|
||||||
[--orderby=<orderby>]
|
|
||||||
Sort collection by object attribute.
|
|
||||||
|
|
||||||
[--email=<email>]
|
|
||||||
Limit result set to resources with a specific email.
|
|
||||||
|
|
||||||
[--role=<role>]
|
|
||||||
Limit result set to resources with a specific role.
|
|
||||||
|
|
||||||
[--fields=<fields>]
|
|
||||||
Limit response to specific fields. Defaults to all fields.
|
|
||||||
|
|
||||||
[--field=<field>]
|
|
||||||
Get the value of an individual field.
|
|
||||||
|
|
||||||
[--format=<format>]
|
|
||||||
Render response in a particular format.
|
|
||||||
---
|
|
||||||
default: table
|
|
||||||
options:
|
|
||||||
- table
|
|
||||||
- json
|
|
||||||
- csv
|
|
||||||
- ids
|
|
||||||
- yaml
|
|
||||||
- count
|
|
||||||
- headers
|
|
||||||
- body
|
|
||||||
- envelope
|
|
||||||
---
|
|
||||||
```
|
|
||||||
|
|
||||||
Arguments like `--context`, `--fields`, `--field`, `--format` can be used on any `get` or `list` WC CLI command.
|
|
||||||
|
|
||||||
The `--porcelain` argument can be used on any `create` or `update` command to just get back the ID of the object, instead of a response.
|
|
||||||
|
|
||||||
Updating or creating some fields will require passing JSON. These are fields that contain arrays of information - for example, setting [https://woocommerce.github.io/woocommerce-rest-api-docs/#customer-properties](billing information) using the customer command. This is just passing key/value pairs.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
|
|
||||||
`$ wp wc customer create --email='me@woo.local' --user=1 --billing='{"first_name":"Justin","last_name":"S","company":"Automattic"}' --password='he
|
|
||||||
llo'`
|
|
||||||
|
|
||||||
`Success: Created customer 16.`
|
|
||||||
|
|
||||||
`$ wp wc customer get 16 --user=1`
|
|
||||||
|
|
||||||
```bash
|
|
||||||
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
||||||
| id | 16 |
|
|
||||||
| date_created | 2016-12-09T20:07:35 |
|
|
||||||
| date_modified | 2016-12-09T20:07:35 |
|
|
||||||
| email | me@woo.local |
|
|
||||||
| first_name | |
|
|
||||||
| last_name | |
|
|
||||||
| role | customer |
|
|
||||||
| username | me |
|
|
||||||
| billing | {"first_name":"Justin","last_name":"S","company":"Automattic","address_1":"","address_2":"","city":"","state":"","postcode":"","country":"","email":"","phone" |
|
|
||||||
| | :""} |
|
|
||||||
| shipping | {"first_name":"","last_name":"","company":"","address_1":"","address_2":"","city":"","state":"","postcode":"","country":""} |
|
|
||||||
| is_paying_customer | false |
|
|
||||||
| meta_data | |
|
|
||||||
| orders_count | 0 |
|
|
||||||
|
|
||||||
| total_spent | 0.00 |
|
|
||||||
| avatar_url | http://2.gravatar.com/avatar/81a56b00c3b9952d6d2c107a8907e71f?s=96 |
|
|
||||||
+--------------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
## Examples
|
|
||||||
|
|
||||||
Full documentation for every command is available using `--help`. Below are some example commands to show what the CLI can do.
|
|
||||||
|
|
||||||
All the examples below use user ID 1 (usually an admin account), but you should replace that with your own user account.
|
|
||||||
|
|
||||||
You can also find other examples (without output) by looking at [the testing files for our CLI tests](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/tests/cli/features).
|
|
||||||
|
|
||||||
Each command will have a `.feature` file. For example, [these some payment gateway commands](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/tests/cli/features/payment_gateway.feature).
|
|
||||||
|
|
||||||
### Clearing the product/shop transients cache
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc tool run clear_transients --user=1`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
`Success: Updated system_status_tool clear_transients.`
|
|
||||||
|
|
||||||
### Listing all system tools
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc tool list --user=1`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
+----------------------------+----------------------------------+-------------------------------+-----------------------------------------------------------------------------------+
|
|
||||||
| id | name | action | description |
|
|
||||||
+----------------------------+----------------------------------+-------------------------------+-----------------------------------------------------------------------------------+
|
|
||||||
| clear_transients | WC transients | Clear transients | This tool will clear the product/shop transients cache. |
|
|
||||||
| clear_expired_transients | Expired transients | Clear expired transients | This tool will clear ALL expired transients from WordPress. |
|
|
||||||
| delete_orphaned_variations | Orphaned variations | Delete orphaned variations | This tool will delete all variations which have no parent. |
|
|
||||||
| recount_terms | Term counts | Recount terms | This tool will recount product terms - useful when changing your settings in a wa |
|
|
||||||
| | | | y which hides products from the catalog. |
|
|
||||||
| reset_roles | Capabilities | Reset capabilities | This tool will reset the admin, customer and shop_manager roles to default. Use t |
|
|
||||||
| | | | his if your users cannot access all of the WooCommerce admin pages. |
|
|
||||||
| clear_sessions | Customer sessions | Clear all sessions | <strong class="red">Note:</strong> This tool will delete all customer session dat |
|
|
||||||
| | | | a from the database, including any current live carts. |
|
|
||||||
| install_pages | Install WooCommerce pages | Install pages | <strong class="red">Note:</strong> This tool will install all the missing WooComm |
|
|
||||||
| | | | erce pages. Pages already defined and set up will not be replaced. |
|
|
||||||
| delete_taxes | Delete all WooCommerce tax rates | Delete ALL tax rates | <strong class="red">Note:</strong> This option will delete ALL of your tax rates, |
|
|
||||||
| | | | use with caution. |
|
|
||||||
| reset_tracking | Reset usage tracking settings | Reset usage tracking settings | This will reset your usage tracking settings, causing it to show the opt-in banne |
|
|
||||||
| | | | r again and not sending any data. |
|
|
||||||
+----------------------------+----------------------------------+-------------------------------+-----------------------------------------------------------------------------------+
|
|
||||||
````
|
|
||||||
|
|
||||||
### Creating a customer
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc customer create --email='woo@woo.local' --user=1 --billing='{"first_name":"Bob","last_name":"Tester","company":"Woo", "address_1": "123 Main St.", "city":"New York", "state:": "NY", "country":"USA"}' --shipping='{"first_name":"Bob","last_name":"Tester","company":"Woo", "address_1": "123 Main St.", "city":"New York", "state:": "NY", "country":"USA"}' --password='hunter2' --username='mrbob' --first_name='Bob' --last_name='Tester'`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
`Success: Created customer 17.`
|
|
||||||
|
|
||||||
### Getting a customer in CSV format
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc customer get 17 --user=1 --format=csv`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
Field,Value
|
|
||||||
id,17
|
|
||||||
date_created,2016-12-09T20:22:10
|
|
||||||
date_modified,2016-12-09T20:22:10
|
|
||||||
email,woo@woo.local
|
|
||||||
first_name,Bob
|
|
||||||
last_name,Tester
|
|
||||||
role,customer
|
|
||||||
username,mrbob
|
|
||||||
billing,"{""first_name"":""Bob"",""last_name"":""Tester"",""company"":""Woo"",""address_1"":""123 Main St."",""address_2"":"""",""city"":""New York"",""state"":"""",""postcode"":"""","
|
|
||||||
"country"":""USA"",""email"":"""",""phone"":""""}"
|
|
||||||
shipping,"{""first_name"":""Bob"",""last_name"":""Tester"",""company"":""Woo"",""address_1"":""123 Main St."",""address_2"":"""",""city"":""New York"",""state"":"""",""postcode"":"""",
|
|
||||||
""country"":""USA""}"
|
|
||||||
is_paying_customer,false
|
|
||||||
meta_data,"[{""id"":825,""key"":""shipping_company"",""value"":""Woo""},{""id"":829,""key"":""_order_count"",""value"":""0""},{""id"":830,""key"":""_money_spent"",""value"":""0""}]"
|
|
||||||
orders_count,0
|
|
||||||
total_spent,0.00
|
|
||||||
avatar_url,http://2.gravatar.com/avatar/5791d33f7d6472478c0b5fa69133f09a?s=96
|
|
||||||
```
|
|
||||||
|
|
||||||
### Adding a customer note on order 355
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc order_note create 355 --note="Great repeat customer" --customer_note=true --user=1`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
`Success: Created order_note 286.`
|
|
||||||
|
|
||||||
### Getting an order note
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc order_note get 355 286 --user=1`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
+---------------+-----------------------+
|
|
||||||
| Field | Value |
|
|
||||||
+---------------+-----------------------+
|
|
||||||
| id | 286 |
|
|
||||||
| date_created | 2016-12-09T20:27:26 |
|
|
||||||
| note | Great repeat customer |
|
|
||||||
| customer_note | true |
|
|
||||||
+---------------+-----------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
### Updating a coupon
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc shop_coupon update 45 --amount='10' --discount_type='percent' --free_shipping=true --user=1`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
`Success: Updated shop_coupon 45.`
|
|
||||||
|
|
||||||
### Getting a coupon
|
|
||||||
|
|
||||||
Command:
|
|
||||||
|
|
||||||
`$ wp wc shop_coupon get 45 --user=1`
|
|
||||||
|
|
||||||
Response:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
+-----------------------------+---------------------+
|
|
||||||
| Field | Value |
|
|
||||||
|
|
||||||
+-----------------------------+---------------------+
|
|
||||||
| id | 45 |
|
|
||||||
| code | hello |
|
|
||||||
| amount | 10.00 |
|
|
||||||
| date_created | 2016-08-09T17:37:28 |
|
|
||||||
| date_modified | 2016-12-09T20:30:32 |
|
|
||||||
| discount_type | percent |
|
|
||||||
| description | Yay |
|
|
||||||
| date_expires | 2016-10-22T00:00:00 |
|
|
||||||
| usage_count | 2 |
|
|
||||||
| individual_use | false |
|
|
||||||
| product_ids | [] |
|
|
||||||
| excluded_product_ids | [] |
|
|
||||||
| usage_limit | null |
|
|
||||||
| usage_limit_per_user | null |
|
|
||||||
| limit_usage_to_x_items | null |
|
|
||||||
| free_shipping | true |
|
|
||||||
| product_categories | [] |
|
|
||||||
| excluded_product_categories | [] |
|
|
||||||
| exclude_sale_items | false |
|
|
||||||
| minimum_amount | 0.00 |
|
|
||||||
| maximum_amount | 0.00 |
|
|
||||||
| email_restrictions | [] |
|
|
||||||
| used_by | ["1","1"] |
|
|
||||||
| meta_data | [] |
|
|
||||||
+-----------------------------+---------------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
## Frequently Asked Questions
|
|
||||||
|
|
||||||
### I get a 401 error when using commands, what do I do?
|
|
||||||
|
|
||||||
If you are getting a 401 error like `Error: Sorry, you cannot list resources. {"status":401}`, you are trying to use the command unauthenticated. The WooCommerce CLI as of 3.0 requires you to provide a proper user to run the action as. Pass in your user ID using the `--user` flag.
|
|
||||||
|
|
||||||
### I am trying to update a list of X, but it's not saving
|
|
||||||
|
|
||||||
Some 'lists' are actually objects. For example, if you want to set categories for a product, [the REST API expects an _array of objects_](https://woocommerce.github.io/woocommerce-rest-api-docs/#product-properties).
|
|
||||||
|
|
||||||
To set this you would use JSON like this:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
wp wc product create --name='Product Name' --categories='[ { "id" : 21 } ]' --user=admin
|
|
||||||
```
|
|
Loading…
Reference in New Issue