# 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 or: wp wc customer_download or: wp wc order_note or: wp wc payment_gateway or: wp wc product or: wp wc product_attribute or: wp wc product_attribute_term or: wp wc product_cat or: wp wc product_review or: wp wc product_shipping_class or: wp wc product_tag or: wp wc product_variation or: wp wc shipping_method or: wp wc shipping_zone or: wp wc shipping_zone_location or: wp wc shipping_zone_method or: wp wc shop_coupon or: wp wc shop_order or: wp wc shop_order_refund or: wp wc tax or: wp wc tax_class or: wp wc tool or: wp wc webhook or: wp wc webhook_delivery See 'wp help wc ' 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 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=] [--page=] [--per_page=] [--search=] [--exclude=] [--include=] [--offset=] [--order=] [--orderby=] [--email=] [--role=] [--fields=] [--field=] [--format=] OPTIONS [--context=] Scope under which the request is made; determines fields present in response. [--page=] Current page of the collection. [--per_page=] Maximum number of items to be returned in result set. [--search=] Limit results to those matching a string. [--exclude=] Ensure result set excludes specific IDs. [--include=] Limit result set to specific IDs. [--offset=] Offset the result set by a specific number of items. [--order=] Order sort attribute ascending or descending. [--orderby=] Sort collection by object attribute. [--email=] Limit result set to resources with a specific email. [--role=] Limit result set to resources with a specific role. [--fields=] Limit response to specific fields. Defaults to all fields. [--field=] Get the value of an individual field. [--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 | Note: This tool will delete all customer session dat | | | | | a from the database, including any current live carts. | | install_pages | Install WooCommerce pages | Install pages | Note: 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 | Note: 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 ```