{ "posts": [ { "post_title": "WooCommerce developer documentation", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/README.md", "hash": "4859cef0db714b893c202eeda0aec07131a840aa22efba21e1c031c3160d1416", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/README.md", "id": "65f434b31529b2793f7f7adcadfec487c797bdd2", "links": { "extension-development/building-your-first-extension.md": "278c2822fe06f1ab72499a757ef0c4981cfbffb5", "extension-development/how-to-design-a-simple-extension.md": "375f7e18a2e656e662d3189041caeb9c80e7c9e3" } } ], "categories": [ { "content": "", "category_slug": "block-theme-development", "category_title": "Block Theme Development", "posts": [ { "post_title": "Theming for Woo blocks", "menu_title": "Theming for Woo Blocks", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/block-theme-development/theming-woo-blocks.md", "hash": "cec80a34a38b7286be676a35624e2e441f5ccbb1aa318def6afe56a5a2bb6558", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/block-theme-development/theming-woo-blocks.md", "id": "90b16f4143d6db728d5ed6dce2ee2c60bdcfdbf6" }, { "post_title": "CSS styling for themes", "menu_title": "CSS Styling for Themes", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/block-theme-development/css-styling.md", "hash": "fe209b833c972e17a30b5b17d079f97c9d9ddfa5e8d6af2127ed4d87c469cd06", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/block-theme-development/css-styling.md", "id": "55b3452119141753ee1eaeee5f8d471ab362945b" }, { "post_title": "Cart and checkout blocks theming", "menu_title": "Cart and Checkout Blocks Theming", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/block-theme-development/cart-and-checkout.md", "hash": "79e8ab04829f423d8cfd749e189dc97586992314d70abe8f7efd10c66b93a44a", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/block-theme-development/cart-and-checkout.md", "id": "8ff3a904e51ef1a07a0a6b0c77b0134a2cb0a8e5" } ], "categories": [] }, { "content": "\nDiscover tutorials and guides for creating custom WooCommerce stores. This section is your toolkit for building advanced, modern online shops that meet the needs of merchants and customers alike.\n", "category_slug": "building-a-woo-store", "category_title": "Building a Woo Store", "posts": [ { "post_title": "Working with Webhooks in WooCommerce", "menu_title": "Using Webhooks", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/building-a-woo-store/webhooks.md", "hash": "102727c5217162eb5a363f95664f0c1554dce96c58e4b506cd350d50800a5381", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/building-a-woo-store/webhooks.md", "id": "1629a329b1f4f1f24bba60f89e6f17c695b7ad0d" }, { "post_title": "How to configure caching plugins for WooCommerce", "menu_title": "Configure caching plugins", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/building-a-woo-store/configuring-caching-plugins.md", "hash": "7efe019f643f79cd143a7c555b40d61d3a7c91d1d28db43888ea12c1fdd71dc8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/building-a-woo-store/configuring-caching-plugins.md", "id": "9f484f8db1111fa6c1b6108d40939c967eea7f47" }, { "post_title": "Blocks reference", "menu_title": "Blocks Reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/building-a-woo-store/block-references.md", "hash": "9bbd3555641a70a0d7c24c818323a9270e437a6446998de9a6506e0c2ed6ddf5", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/building-a-woo-store/block-references.md", "id": "1fbe91d7fa4fafaf35f0297e4cee1e7958756aed" }, { "post_title": "How to add a custom field to simple and variable products", "menu_title": "Add Custom Fields to Products", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/building-a-woo-store/adding-a-custom-field-to-variable-products.md", "hash": "fe8cf43940f5166bf69f102aa4643cbe32415b1167d6b6d8968d434a4d113879", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/building-a-woo-store/adding-a-custom-field-to-variable-products.md", "id": "64b686dcd5fdd4842be2fc570108231d5a8bfc1b" } ], "categories": [] }, { "content": "", "category_slug": "cart-and-checkout-blocks", "category_title": "Cart and Checkout Blocks", "posts": [ { "post_title": "Cart and Checkout - Slot and fill", "menu_title": "Slot and Fill", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/slot-fills.md", "hash": "f83a5fbef86e5ef6b0ec1d63fdbcbf4742f54de1125e535fa0f32f5f80ec794a", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/slot-fills.md", "id": "e388101586765dd9aca752d66d667d74951a1504" }, { "post_title": "Cart and Checkout - Handling scripts, styles, and data", "menu_title": "Script, Styles, and Data Handling", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/integration-interface.md", "hash": "0f69443cf4d6fc672fb1ff02158f81c513e05675c9df0f8f4bc82a7efacbb20c", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/integration-interface.md", "id": "4e702e6f5d22756c4d3518ee3190320df691878f" }, { "post_title": "Cart and Checkout - How the checkout block processes an order", "menu_title": "Processing an Order", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/how-checkout-processes-an-order.md", "hash": "738c3bf03138a084723061bafdc9315a58606c1dad2ab8743d44b7af93e7ecfc", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/how-checkout-processes-an-order.md", "id": "092e66dac8f44d08799ba1d2411d757fd53c9e00" }, { "post_title": "Cart and Checkout - DOM events", "menu_title": "DOM Events", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/dom-events.md", "hash": "5ad212b2ee74a7f85dfe05dfa10a3797d839c4e791cc78998fadf30f8a61adf9", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/dom-events.md", "id": "d04c25818072f47ec21c36e7907e0f81c9c20cc3" }, { "post_title": "Cart and Checkout - Available slots", "menu_title": "Available Slots", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/available-slot-fills.md", "hash": "770da9156eea1fdc24db0736ce4ccd44ebde4f3b0373cd875b1ae88d4d9c8a49", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/available-slot-fills.md", "id": "c7ac16eee5540b06b6db928f5d03282ff177e84e" }, { "post_title": "Cart and Checkout - Additional checkout fields", "menu_title": "Additional Checkout Fields", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/additional-checkout-fields.md", "hash": "1b034ede098b933b6b00a9a27ba33e418b1c88c4883e2b9b191092e32866f7b9", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/additional-checkout-fields.md", "id": "cb5dd8d59043a4e53929121b45da7b33b1661ab8" } ], "categories": [ { "content": "\nThis document lists the filters that are currently available to extensions and offers usage information for each one of them. Information on registering filters can be found on the [Checkout - Filter Registry](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/packages/checkout/filter-registry/README.md) page.\n\n## Cart Line Items filters\n\nThe following [Cart Line Items filters](./cart-line-items.md) are available:\n\n- `cartItemClass`\n- `cartItemPrice`\n- `itemName`\n- `saleBadgePriceFormat`\n- `showRemoveItemLink`\n- `subtotalPriceFormat`\n\nThe following screenshot shows which parts the individual filters affect:\n\n![Cart Line Items](https://woocommerce.com/wp-content/uploads/2023/10/Screenshot-2023-10-26-at-13.12.33.png)\n\n## Order Summary Items filters\n\nThe following [Order Summary Items filters](./order-summary-items.md) are available:\n\n- `cartItemClass`\n- `cartItemPrice`\n- `itemName`\n- `subtotalPriceFormat`\n\nThe following screenshot shows which parts the individual filters affect:\n\n![Order Summary Items](https://woocommerce.com/wp-content/uploads/2023/10/Screenshot-2023-10-26-at-16.29.45.png)\n\n## Totals Footer Item filter\n\nThe following [Totals Footer Item filter](./totals-footer-item.md) is available:\n\n- `totalLabel`\n- `totalValue`\n\n## Checkout and place order button filters\n\nThe following [Checkout and place order button filters](./checkout-and-place-order-button.md) are available:\n\n- `proceedToCheckoutButtonLabel`\n- `proceedToCheckoutButtonLink`\n- `placeOrderButtonLabel`\n\n## Coupon filters\n\nThe following [Coupon filters](./coupons.md) are available:\n\n- `coupons`\n- `showApplyCouponNotice`\n- `showRemoveCouponNotice`\n\n## Additional Cart and Checkout inner block types filter\n\nThe following [Additional Cart and Checkout inner block types filter](./additional-cart-checkout-inner-block-types.md) is available:\n\n- `additionalCartCheckoutInnerBlockTypes`\n\n## Combined filters\n\nFilters can also be combined. The following example shows how to combine some of the available filters.\n\n```tsx\nconst { registerCheckoutFilters } = window.wc.blocksCheckout;\n\nconst isOrderSummaryContext = ( args ) => args?.context === 'summary';\n\nconst modifyCartItemClass = ( defaultValue, extensions, args ) => {\n\tif ( isOrderSummaryContext( args ) ) {\n\t\treturn 'my-custom-class';\n\t}\n\treturn defaultValue;\n};\n\nconst modifyCartItemPrice = ( defaultValue, extensions, args ) => {\n\tif ( isOrderSummaryContext( args ) ) {\n\t\treturn ' for all items';\n\t}\n\treturn defaultValue;\n};\n\nconst modifyItemName = ( defaultValue, extensions, args ) => {\n\tif ( isOrderSummaryContext( args ) ) {\n\t\treturn `${ defaultValue }`;\n\t}\n\treturn defaultValue;\n};\n\nconst modifySubtotalPriceFormat = ( defaultValue, extensions, args ) => {\n\tif ( isOrderSummaryContext( args ) ) {\n\t\treturn ' per item';\n\t}\n\treturn defaultValue;\n};\n\nregisterCheckoutFilters( 'example-extension', {\n\tcartItemClass: modifyCartItemClass,\n\tcartItemPrice: modifyCartItemPrice,\n\titemName: modifyItemName,\n\tsubtotalPriceFormat: modifySubtotalPriceFormat,\n} );\n```\n\n## Troubleshooting\n\nIf you are logged in to the store as an administrator, you should be shown an error like this if your filter is not\nworking correctly. The error will also be shown in your console.\n\n![Troubleshooting](https://woocommerce.com/wp-content/uploads/2023/10/Screenshot-2023-10-30-at-10.52.53.png)\n\n\n", "category_slug": "cart-and-checkout-available-filters", "category_title": "Available Filters", "posts": [ { "post_title": "Cart and Checkout Filters - Totals footer item", "menu_title": "Totals Footer Item", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/available-filters/totals-footer-item.md", "hash": "3a9869d7d7beadb8117c100c3b58675e416e16386ee753f78e1a9087e768053f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/available-filters/totals-footer-item.md", "id": "90a9b8df374082f1713866a58b810303adb4d3da" }, { "post_title": "Cart and Checkout Filters - Order summary items", "menu_title": "Order Summary Items", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/available-filters/order-summary-items.md", "hash": "36f1bfa8d192b106d28d71334b42413d4c289a0a8d1f5b76b2f905d6fa453883", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/available-filters/order-summary-items.md", "id": "78eb3b135f82a3624a49979e3e93334295abd060" }, { "post_title": "Cart and Checkout Filters - Coupons", "menu_title": "Coupons", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/available-filters/coupons.md", "hash": "9ce61079d75f991137c771f044812c385db165256723a814ed44ba9caf297f13", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/available-filters/coupons.md", "id": "5a022617f3d0267c9b771374f28970e779a6e99d" }, { "post_title": "Cart and Checkout Filters - Checkout and place order button", "menu_title": "Checkout and Place Order Button", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/available-filters/checkout-and-place-order-button.md", "hash": "9ef672160e407cebef3b163414834a6f6f67cd7d677aa399a4312883e0827131", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/available-filters/checkout-and-place-order-button.md", "id": "c97ca710c2e8107bf90915e038a34c8a1016c63a" }, { "post_title": "Cart and Checkout Filters - Cart line items", "menu_title": "Cart Line Items", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/available-filters/cart-line-items.md", "hash": "f83254846b98a94f5c895f4a0a6719b281cba81884edb45e413a644967d28f73", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/available-filters/cart-line-items.md", "id": "97881b973dc1d08a54c54e0a04ecb75ee48dcee2" }, { "post_title": "Cart and Checkout Filters - Inner block types", "menu_title": "Inner Block Types", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/available-filters/additional-cart-checkout-inner-block-types.md", "hash": "7f8f59cf376c801b6c2870af356fac28f403c890d1652039f302e244159ee7db", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/available-filters/additional-cart-checkout-inner-block-types.md", "id": "3167c9602b1bd3b206226a0d4415944a5f647495" } ], "categories": [] }, { "content": "\n\n\n", "category_slug": "checkout-payment-methods", "category_title": "Payment Methods", "posts": [ { "post_title": "Cart and Checkout - Payment method integration for the Checkout block", "menu_title": "Payment Method Integration", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/checkout-payment-methods/payment-method-integration.md", "hash": "f60acaaea4a6ac4adf637bc7069c966e01db089f9dfaa937def91165a71a4255", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/checkout-payment-methods/payment-method-integration.md", "id": "c9a763b6976ecf03aeb961577c17c31f1ac7c420", "links": { "./checkout-flow-and-events.md": "499384cbb48ed96a2e12653cd68bd82d123a20a1" } }, { "post_title": "Cart and Checkout - Filtering payment methods in the Checkout block", "menu_title": "Filtering Payment Methods", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/checkout-payment-methods/filtering-payment-methods.md", "hash": "eec74b9116b1c0b76fdd9e50810e5f08467aec90ee62486409ca204be21dc3e4", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/checkout-payment-methods/filtering-payment-methods.md", "id": "5c9ff65767116f51e9ec4de26794e6e4e743ffa3", "links": { "./payment-method-integration.md": "c9a763b6976ecf03aeb961577c17c31f1ac7c420" } }, { "post_title": "Cart and Checkout - Checkout flow and events", "menu_title": "Checkout Flow and Events", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/checkout-payment-methods/checkout-flow-and-events.md", "hash": "dcc4af69b2614b0722431f81a312558bf3c5fa349021849d241bf896e02813a7", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/checkout-payment-methods/checkout-flow-and-events.md", "id": "499384cbb48ed96a2e12653cd68bd82d123a20a1", "links": { "./payment-method-integration.md": "c9a763b6976ecf03aeb961577c17c31f1ac7c420" } } ], "categories": [] }, { "content": "\n\n\n", "category_slug": "cart-and-checkout-hooks", "category_title": "Hooks", "posts": [ { "post_title": "Cart and Checkout - Legacy hooks", "menu_title": "Legacy Hooks", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/cart-and-checkout-blocks/hooks/migrated-hooks.md", "hash": "be4cf6862932c6696568b210e5f6ae4bd5313dacfb66724e23fab830baeb94e1", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/cart-and-checkout-blocks/hooks/migrated-hooks.md", "id": "5264fa45d393327b2c9cffb038c4d3670879d911" } ], "categories": [] } ] }, { "content": "\nAccess a collection of useful code snippets to customize and enhance your WooCommerce store's functionality.\n", "category_slug": "code-snippets", "category_title": "Code Snippets", "posts": [ { "post_title": "Using NGINX server to protect your upload directory", "menu_title": "NGINX server to protect upload directory", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/using_nginx_server_to_protect_your_uploads_directory.md", "hash": "5039ec5e7804fba4095faabc5404d7d62a74fb059696e3f6359fd42e20803014", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/using_nginx_server_to_protect_your_uploads_directory.md", "id": "8b325d3483f9a8d09961ca1082839752137faebf" }, { "post_title": "Useful core functions", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/useful-functions.md", "hash": "3d102e671585a2de818fd5fdb84110c99ca55b5adc2698d07118beac27e59c94", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/useful-functions.md", "id": "0d99f1dee7c104b5899fd62b96157fb6709ebfb8" }, { "post_title": "Uninstall and remove all WooCommerce Data", "menu_title": "Uninstalling and removing data", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/uninstall_remove_all_woocommerce_data.md", "hash": "9bb8da9a3fba1397c0309280bbd69fecac2215a3ff0205869ce363cf8eb47849", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/uninstall_remove_all_woocommerce_data.md", "id": "36b571fcf2471737729ab4769e2c721b2248187f" }, { "post_title": "Unhook and remove WooCommerce emails", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/unhook--remove-woocommerce-emails.md", "hash": "9b10cc18f64970b1c919dc1b320497e66444befcae6733d2dc7c8ec07b564e6d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/unhook--remove-woocommerce-emails.md", "id": "0fdfe3b483ae74a9e5dc1fc21b80814462222ec3" }, { "post_title": "SSL and HTTPS and WooCommerce", "menu_title": "SSL and HTTPS and WooCommerce", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/ssl_and_https_and_woocommerce_websites_behind_load_balanacers_or_reverse_proxies.md", "hash": "a3e5c103b7c929fd7914d872956eb8075a25aade50754f00ca5def0b99cdcd90", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/ssl_and_https_and_woocommerce_websites_behind_load_balanacers_or_reverse_proxies.md", "id": "78d5b5a20ce6471b74f809386eff41fffe2d1adb" }, { "post_title": "Shipping Method API", "menu_title": "Shipping method API", "tags": "shipping, API", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/shipping_method_api.md", "hash": "bd7cbc361fe94acaa40fbc5befa8d14f302705a9d700dd7d7e78a482b003fe0b", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/shipping_method_api.md", "id": "a419b97e5594918a015c61227ad9226c509eb314" }, { "post_title": "Rename a country", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/rename-a-country.md", "hash": "80086f76587535c16e79d987ba00544766b167fe33fd435544c8b80683c5f946", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/rename-a-country.md", "id": "67a49394f2e8ad0f8f81333207679be770bc8038" }, { "post_title": "Change number of related products displayed", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/number-of-products-per-row.md", "hash": "58287de9fc0318daa8a604602d1384a7298d1227f9b99063c5402ccd521f8549", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/number-of-products-per-row.md", "id": "7369dc328c49206771a2f8d0da5d920c480b5207" }, { "post_title": "Making your translation upgrade safe", "menu_title": "Translation upgrade safety", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/making_translations_upgrade_safe.md", "hash": "ad688decb538ac2b0cf32cbdb60b347e203dfa4c2c17bd687e839cb65e54f72d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/making_translations_upgrade_safe.md", "id": "0c1add87ef9f5452b4c8404bb55021ad8265c171" }, { "post_title": "Add link to logged data", "menu_title": "Add link to logged data", "tags": "code-snippets", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/link-to-logged-data.md", "hash": "fd1c3a58da8b7eed11da841d901b4d3cc117c6753c3b3834f3de41ea266490b9", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/link-to-logged-data.md", "id": "34da337f79be5ce857024f541a99d302174ca37d" }, { "post_title": "Advanced settings and customization for legacy Local Pickup", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/legacy_local_pickup_advacned_settings_and_customization.md", "hash": "dad4a05008807f4d16d5f3b283354889114db7394817e2e6468c8ff34f0ed6d2", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/legacy_local_pickup_advacned_settings_and_customization.md", "id": "c4d4a2276fc251082a80a8330eea1eb62a97c3bb" }, { "post_title": "Free Shipping Customizations", "menu_title": "Free shipping customizations", "tags": "code-snippets", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/free_shipping_customization.md", "hash": "1711cff54da5c39385d06ff8d8e0a055d3d25f68ee4855d93fefa940c8ffc916", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/free_shipping_customization.md", "id": "cac6f1ccd661588e9a5fa7405643e9c6d4da388e" }, { "post_title": "Displaying Custom Fields in Your Theme or Site", "menu_title": "Displaying custom fields in theme", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/displaying_custom_fields_in_your_theme_or_site.md", "hash": "8048c2e9e5d25268d17d4f4ca7929e265eddbd4653318dd8f544856ddecd39dd", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/displaying_custom_fields_in_your_theme_or_site.md", "id": "3e3fd004afda355cf9dbb05f0967523d6d0da1ce" }, { "post_title": "Disabling Marketplace Suggestions Programmatically", "menu_title": "Disabling marketplace suggestions", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/disabling_marketplace_suggestions_programmatically.md", "hash": "e3bdbf4f1754e32608ff55dd54c1f6f717a11178cc7d8028ccd88ff98b07cb36", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/disabling_marketplace_suggestions_programmatically.md", "id": "94a7a28e5dd3d9394650e66abec2429445e87028" }, { "post_title": "Customizing checkout fields using actions and filters", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/customising-checkout-fields.md", "hash": "8bbfe162402e484ae89427e1aedaed4faa57555b64b5a77ca800f701524314cb", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/customising-checkout-fields.md", "id": "83097d3b7414557fc80dcf9f8f1a708bbdcdd884" }, { "post_title": "Code snippets for configuring special tax scenarios", "menu_title": "Configuring special tax scenarios", "tags": "code-snippet, tax", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/configuring_special_tax_scenarios.md", "hash": "c2459568db70b97d9a901c83eecb7737746499fe03cc84133aab3cf981b5c96a", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/configuring_special_tax_scenarios.md", "id": "a8ab8b6734ba2ac5af7c6653635d15548abdab2a" }, { "post_title": "Check if a Payment Method Support Refunds, Subscriptions or Pre-orders", "menu_title": "Payment method support for refunds, subscriptions, pre-orders", "tags": "payment-methods", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/check_payment_method_support.md", "hash": "932efcdd53d6b84920dd086570dedbf9b4ddaea333e6196cceaa017727ac5465", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/check_payment_method_support.md", "id": "2919c9fc523bce46f43a5f35f821d0c6623c5ede" }, { "post_title": "Change a currency symbol", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/change-a-currency-symbol.md", "hash": "1e25d4cf42f3b5907befc8d3b6d3999ca31c2f97b9512eadb749935685d1a7d6", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/change-a-currency-symbol.md", "id": "35ff98a542ad0b092aa44a049c6015cd43ed5857" }, { "post_title": "Add a message above the login / register form", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/before-login--register-form.md", "hash": "dd3d61cd1f99d459956167041718e6a25693901a810d4bde47613d5ea2595ca3", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/before-login--register-form.md", "id": "26ea2036f16952c8c965f2ab38ab214e421aa615" }, { "post_title": "Adjust the quantity input values", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/adjust-quantity-input-values.md", "hash": "2dce454ba4247b8ef604cf0f4dd42c6d9eedfc02115b7add4551c47e7c242c71", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/adjust-quantity-input-values.md", "id": "e4d92076cbd872380edb6beb1ff944f749d2d0e1" }, { "post_title": "Add or modify states", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/add-or-modify-states.md", "hash": "0f58428d8db1c7bc3e118362c25d129985a0a17957938d4003e64d4a56ea929b", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/add-or-modify-states.md", "id": "59ff38edfc09669967a06dd1dd3e6fb967422367" }, { "post_title": "Add currencies and symbols", "menu_title": "Add currencies and symbols", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/add-a-currency-symbol.md", "hash": "f91b76a0ebe65b6095157e904435c563b477be639a70795890656a29871cea76", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/add-a-currency-symbol.md", "id": "1c031c2af4a1461253e798daa3304baa89a83979" }, { "post_title": "Add a country", "menu_title": "Add a country", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/code-snippets/add-a-country.md", "hash": "2b5488637e3ecad6113abea73f26fab79e953d84b7e034d4aa71767f6b7338a6", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/code-snippets/add-a-country.md", "id": "3f20affcf41e51989b0a7408aefe32b95d1da073" } ], "categories": [] }, { "content": "\nInterested in joining the Woo contributor community? The links in this doc summarize and direct you to the order of operations you will need to make your first contribution. If you are a seasoned WooCommerce developer, feel free to skip ahead and utilize the template links, or the reference docs and guides below.\n\n## Contributing to WooCommerce Core\n\nThe WooCommerce core plugin code can be found in our [monorepo](https://github.com/woocommerce/woocommerce). Here you can contribute to: \n\n- [WooCommerce Core Plugin](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce)\n- [WooCommerce Admin](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce-admin)\n- [WooCommerce Blocks](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce-blocks) \n\n### Code of Conduct\n\nContributing to an open source project requires cooperation amongst individuals and organizations all working to make our project a stable and safe place to build and ask questions. Please thoroughly read our [Code of Conduct](https://github.com/woocommerce/woocommerce/blob/trunk/SECURITY.md) to get familiar with our standards and processes.\n\n### Contributor Guidelines\n\nOur [contributor guidelines](https://github.com/woocommerce/woocommerce/blob/trunk/.github/CONTRIBUTING.md) layout the first steps to contributing.\n\n- [Prerequisites and developer tools to get started](https://github.com/woocommerce/woocommerce/blob/trunk/README.md#getting-started)\n- [PNPM commands, plugin development environment packages, and troubleshooting](https://github.com/woocommerce/woocommerce/blob/trunk/DEVELOPMENT.md)\n- [Coding standards, E2E testing links](https://github.com/woocommerce/woocommerce/blob/trunk/.github/CONTRIBUTING.md) \n\n### Templates, Bug Reports, and Feature Requests\n\n- [Pull Request template](https://github.com/woocommerce/woocommerce/blob/trunk/.github/PULL_REQUEST_TEMPLATE.md)\n- [Core Issue template](https://github.com/woocommerce/woocommerce/blob/trunk/.github/ISSUE_TEMPLATE.md)\n- [Bug Report template](https://github.com/woocommerce/woocommerce/blob/trunk/.github/ISSUE_TEMPLATE/1-bug-report.yml)\n- [Enhancement template](https://github.com/woocommerce/woocommerce/blob/trunk/.github/ISSUE_TEMPLATE/2-enhancement.yml)\n- [Feature requests](https://woocommerce.com/feature-requests/woocommerce/)\n\n### Security\n\nSecurity and safety for data management are incredibly important to us at Woo. Please check out the [Automattic security policy](https://automattic.com/security/) to learn about our foundational requirements.\n\nPlease report any vulnerabilities or security issues by reading through Woo's security policy [here](https://github.com/woocommerce/woocommerce/blob/trunk/SECURITY.md).\n\n\n\n\n\n", "category_slug": "contributing", "category_title": "Contribute to Woo", "posts": [ { "post_title": "WooCommerce Git flow", "menu_title": "WooCommerce Git flow", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/woocommerce-git-flow.md", "hash": "aefe3ba553a618ace6b52fbfaff276893ac955fe9b204214f3718e95911b5d15", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/woocommerce-git-flow.md", "id": "9e5c2da0c341b88f32483ec2435740cd16d48676" }, { "post_title": "String localization guidelines", "menu_title": "String localization guidelines", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/string-localisation-guidelines.md", "hash": "8d3de270132d5c8c863d61159a76fac06ddc1a3ee1ecfb031bfefea4c137aa3d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/string-localisation-guidelines.md", "id": "b7a92f1f63f72a2263be940b362fd90aa0ea2cdb" }, { "post_title": "Reporting security issues", "menu_title": "Reporting security issues", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/reporting-security-issues.md", "hash": "736020b27cb453139f57cd49ee1f3e4dcf2da8d00c209d1d0f43db5326150cf0", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/reporting-security-issues.md", "id": "363d7eb1b42e6974cfab7f62659b4effc8417774" }, { "post_title": "Naming conventions", "menu_title": "Naming conventions", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/naming-conventions.md", "hash": "c553a158e2641547376939f9e2b9ac9c336371bb1cf9eba59b552685a81112bf", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/naming-conventions.md", "id": "019d7e8eefc341de559728b9c3e9c5e17dfc1d6d" }, { "post_title": "Handling SCSS and JS minification in WooCommerce", "menu_title": "Minification of SCSS and JS", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/minification-of-SCSS-and-JS.md", "hash": "da3f198acde56106e6d09136038d523cc612021923f5f0b3334663c9e787ceaf", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/minification-of-SCSS-and-JS.md", "id": "bb50c2ce61a6c5465c95e6a94982c4c1e7944fd7" }, { "post_title": "Deprecation in core", "menu_title": "Deprecation in core", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/deprecation-in-core.md", "hash": "2fd2e73b7de1bbde028a998f8d375c365ea77979ad5ac16e192aaa6c7dc46c97", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/deprecation-in-core.md", "id": "d4eee11fdec129af35c471b2366df285217c6ec6" }, { "post_title": "How to assess the impact of a pull request", "menu_title": "Assessing PR impact", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/deciding-pr-high-impact.md", "hash": "091fd9acb51a272439d2c0378cc54ee45bbb90211b2a8953d25a5cbddd40ad70", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/deciding-pr-high-impact.md", "id": "40d381fdc10bff338677228736249ba87df9e102" }, { "post_title": "Common issues", "menu_title": "Common issues", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/common-issues.md", "hash": "7c6e9eff5f207685b7bb106c4b91d25c72d991895e8bceb9a93458b354704198", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/common-issues.md", "id": "5766fb43cf9135d5a2cceaf0d386ec14b57c9ba0" }, { "post_title": "Critical flows within the WooCommerce Core API", "menu_title": "API critical flows", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/api-critical-flows.md", "hash": "7e9a1f26c64b1f2dd5f8edb67c74b652a1fb852f2152ba7868ee0cd4bf228a14", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/api-critical-flows.md", "id": "0fa8b2fa4bcb3b00c647504523a05857a90c434a" }, { "post_title": "CSS SASS coding guidelines and naming conventions", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing/CSS-SASS-coding-guidelines-and-naming-conventions.md", "hash": "5dcdb00ab0209a277ead39ac21ad3a6befe2d23ae80548e3a405c513d00f712e", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing/CSS-SASS-coding-guidelines-and-naming-conventions.md", "id": "42e4e4a593b67fd844f2d7b366259d64cf2332ab" } ], "categories": [] }, { "content": "\nJust like WooCommerce itself, our developer docs are open source and editable by the community. This category outlines guidance and best practices to follow when contributing documentation.\n ", "category_slug": "contributing-docs", "category_title": "Contribute to Docs", "posts": [ { "post_title": "Technical Documentation Style Guide", "menu_title": "Style Guide", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing-docs/style-guide.md", "hash": "1f7b619b73e05f0e607aa8959f598254b7af9adb5375f25df668a104eeadba5e", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing-docs/style-guide.md", "id": "5020907d57ae845a6477a36f59ec8c2f5f7b4b01" }, { "post_title": "Contributing Technical Documentation", "menu_title": "Contributing Docs", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/contributing-docs/contributing-docs.md", "hash": "6733ba23f82a6e784ef10e2862aa3afd8a61e32181e157f67ccabfc8354aa989", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/contributing-docs/contributing-docs.md", "id": "71c1a72bfd4d5ae6aa656d4264b1bf3beb6eca1c" } ], "categories": [] }, { "content": "\nMaster data management in WooCommerce, including documentation related to CRUD objects and data stores.\n", "category_slug": "data-management", "category_title": "Data Management", "posts": [ { "post_title": "How to manage WooCommerce Data Stores", "menu_title": "Manage data stores", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/data-management/data-stores.md", "hash": "9b9c1f8c1bbafdd669c191340032330e055fffef2b5e25f39be199f8b1a884a1", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/data-management/data-stores.md", "id": "34b4a3e14d6dfabca889035bf67876b9404d0dfb" }, { "post_title": "Developing using WooCommerce CRUD objects", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/data-management/crud-objects.md", "hash": "9a3624adc70b6a30bc89ecd86519909c90335f75fcbc925e5b417fac20712e54", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/data-management/crud-objects.md", "id": "eaf29a28f438c0d03b4e7056dc3b6eaead4937b5" } ], "categories": [] }, { "content": "\n\nThese documents are all dealing with extensibility in the various WooCommerce Blocks.\n\n## Imports and dependency extraction\n\nThe documentation in this section will use window globals in code examples, for example:\n\n```js\nconst { registerCheckoutFilters } = window.wc.blocksCheckout;\n```\n\nHowever, if you're using `@woocommerce/dependency-extraction-webpack-plugin` for enhanced dependency management you can instead use ES module syntax:\n\n```js\nimport { registerCheckoutFilters } from '@woocommerce/blocks-checkout';\n```\n\nSee for more information.\n\n## Hooks (actions and filters)\n\n| Document | Description |\n| ----------------------------- | ------------------------------------------------------- |\n| [Actions](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/docs/third-party-developers/extensibility/hooks/actions.md) | Documentation covering action hooks on the server side. |\n| [Filters](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/docs/third-party-developers/extensibility/hooks/filters.md) | Documentation covering filter hooks on the server side. |\n| [Migrated Hooks](/docs/cart-and-checkout-legacy-hooks/) | Documentation covering the migrated WooCommerce core hooks. |\n\n## REST API\n\n| Document | Description |\n| ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |\n| [Exposing your data in the Store API.](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/docs/third-party-developers/extensibility/rest-api/extend-rest-api-add-data.md) | Explains how you can add additional data to Store API endpoints. |\n| [Available endpoints to extend with ExtendSchema](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/docs/third-party-developers/extensibility/rest-api/available-endpoints-to-extend.md) | A list of all available endpoints to extend. |\n| [Available Formatters](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/docs/third-party-developers/extensibility/rest-api/extend-rest-api-formatters.md) | Available `Formatters` to format data for use in the Store API. |\n| [Updating the cart with the Store API](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/docs/third-party-developers/extensibility/rest-api/extend-rest-api-update-cart.md) | Update the server-side cart following an action from the front-end. |\n\n## Checkout Payment Methods\n\n| Document | Description |\n| -------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------- |\n| [Checkout Flow and Events](/docs/cart-and-checkout-checkout-flow-and-events/) | All about the checkout flow in the checkout block and the various emitted events that can be subscribed to. |\n| [Payment Method Integration](/docs/cart-and-checkout-payment-method-integration-for-the-checkout-block/) | Information about implementing payment methods. |\n| [Filtering Payment Methods](/docs/cart-and-checkout-filtering-payment-methods-in-the-checkout-block/) | Information about filtering the payment methods available in the Checkout Block. |\n\n## Checkout Block\n\nIn addition to the reference material below, [please see the `block-checkout` package documentation](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/packages/checkout/README.md) which is used to extend checkout with Filters, Slot Fills, and Inner Blocks.\n\n| Document | Description |\n|--------------------------------------------------------------------------------------------------| ----------------------------------------------------------------------------------------------------------------- |\n| [How the Checkout Block processes an order](/docs/cart-and-checkout-how-the-checkout-block-processes-an-order/) | The detailed inner workings of the Checkout Flow. |\n| [IntegrationInterface](/docs/cart-and-checkout-handling-scripts-styles-and-data/) | The `IntegrationInterface` class and how to use it to register scripts, styles, and data with WooCommerce Blocks. |\n| [Available Filters](/docs/category/cart-and-checkout-blocks/available-filters/) | All about the filters that you may use to change values of certain elements of WooCommerce Blocks. |\n| [Slots and Fills](/docs/cart-and-checkout-slot-and-fill/) | Explains Slot Fills and how to use them to render your own components in Cart and Checkout. |\n| [Available Slot Fills](/docs/cart-and-checkout-available-slots/) | Available Slots that you can use and their positions in Cart and Checkout. |\n| [DOM Events](/docs/cart-and-checkout-dom-events/) | A list of DOM Events used by some blocks to communicate between them and with other parts of WooCommerce. |\n| [Filter Registry](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce-blocks/packages/checkout/filter-registry/README.md) | The filter registry allows callbacks to be registered to manipulate certain values. |\n| [Additional Checkout Fields](/docs/cart-and-checkout-additional-checkout-fields/) | The filter registry allows callbacks to be registered to manipulate certain values. |\n", "category_slug": "extensibility-in-blocks", "category_title": "Extensibility in Blocks", "posts": [], "categories": [] }, { "content": "\nExplore how to develop WooCommerce extensions with practical tutorials and resources ideal for initial setup and understanding the core functionalities of the platform.\n", "category_slug": "extension-development", "category_title": "Extension Development", "posts": [ { "post_title": "Integrating admin pages into WooCommerce extensions", "menu_title": "Integrating admin pages", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/working-with-woocommerce-admin-pages.md", "hash": "c172fff2814f552e2ab5712edb9e716f75c27946d993a1ade8f2269cc9a8689d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/working-with-woocommerce-admin-pages.md", "id": "6f9cc63bc4c614b9e01174069a5ddc4f3d7aa467" }, { "post_title": "WooCommerce plugin API callbacks", "menu_title": "Plugin API callbacks", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/woocommerce-plugin-api-callback.md", "hash": "fc8eb47b9e31c412838a6426965f26dad89454234692a8f26b045da3a8ed872f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/woocommerce-plugin-api-callback.md", "id": "9c1985429ab05bf7abc3e0a8676fb3d92a2c62eb" }, { "post_title": "Managing custom attributes in WooCommerce menus and taxonomy archives", "menu_title": "Custom attributes in menus", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/using-custom-attributes-in-menus.md", "hash": "fbcf2bc205057602d56c6f3f92ea3809cd0d9c8fedb16dd6438ee671d6589966", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/using-custom-attributes-in-menus.md", "id": "fe5975a11d45e9d95e91c256ca89a1ec2ca76556" }, { "post_title": "Tools for low-code development", "menu_title": "Low-code tools", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/tools-for-low-code-development.md", "hash": "a2fd746404451bd34cc4fb237a6a16d83641694ec050f77bf779a7d3e117a056", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/tools-for-low-code-development.md", "id": "9320859027f950ceb36e13451ec8696d606426ec" }, { "post_title": "Settings API", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/settings-api.md", "hash": "ca80728c56d60bb7416bb2865678b9e04807d0e208a4df56b8efaf32e9ac465d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/settings-api.md", "id": "ed56b97b9de350074a302373ebaaa5dcce727e8b" }, { "post_title": "Logging in WooCommerce", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/logging.md", "hash": "7e66b9ea605944c5926cf6099fb8fb323976c014fef7dd768c91cef17b091edd", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/logging.md", "id": "c684e2efba45051a4e1f98eb5e6ef6bab194f25c" }, { "post_title": "Integrating with coming soon mode", "tags": "how-to, coming-soon", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/integrating-coming-soon-mode.md", "hash": "8c2087952ae79bb4c3e3977c57d9e933fcfaa418a5bc643b3827059daa5879a7", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/integrating-coming-soon-mode.md", "id": "787743efb6ef0ad509b17735eaf58b2a9a08afbc" }, { "post_title": "Creating custom settings for WooCommerce extensions", "menu_title": "Creating custom settings", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/implementing-settings.md", "hash": "604d455f9e413c23a208c174ba25611c333e02eef0bafb0d38253f8dd8e3a04c", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/implementing-settings.md", "id": "58bcbd3a0cd3b3e5fe738c3bb625cf9b7747c99a" }, { "post_title": "How to design a simple extension", "menu_title": "Design a simple extension", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/how-to-design-a-simple-extension.md", "hash": "10afdef1875fb51e6163589535b6bfec86fe09624559e0dbed916e7e1c0bd777", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/how-to-design-a-simple-extension.md", "id": "375f7e18a2e656e662d3189041caeb9c80e7c9e3" }, { "post_title": "How to add store management links", "menu_title": "Add store management links", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/how-to-add-your-own-store-management-links.md", "hash": "98b2f2edeec0afb88a5b138bee9ff46f582e350709c64e61abfa2c1e4a9939b0", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/how-to-add-your-own-store-management-links.md", "id": "ae8fc356aa7555b87477462eaa80130a044d00f9" }, { "post_title": "How to implement merchant onboarding", "menu_title": "Implement merchant onboarding", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/handling-merchant-onboarding.md", "hash": "c73e3c5015e6cda3be9ebd2d5fbda590ac9fa599e5fb02163c971c01060970ad", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/handling-merchant-onboarding.md", "id": "89fe15dc232379f546852822230c334d3d940b93" }, { "post_title": "Managing extension deactivation and uninstallation", "menu_title": "Manage deactivation and uninstallation", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/handling-deactivation-and-uninstallation.md", "hash": "52992f047f6088cf93f72c87e27143ef896e9ccbb0ea55e77c9fa8c17df80404", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/handling-deactivation-and-uninstallation.md", "id": "549d92ad5518998ddcdcaa96beb6e25f09e4b1e5" }, { "post_title": "WooCommerce extension development best practices", "menu_title": "Best Practices", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/extension-development-best-practices.md", "hash": "671f19d378c8ad3ebe0eb009524054bd5769d4fb3d8f48dd6a410e0c9de2b953", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/extension-development-best-practices.md", "id": "83050f0142b6de00b73b3638d46ddddc5a2f8b12", "links": { "./check-if-woo-is-active.md": "2c2e89013ad76ff2596680224047723163512bc2", "./data-storage.md": "b3e0b17ca74596e858c26887c1e4c8ee6c8f6102", "../security/prevent-data-leaks.md": "91b86abe2953e1cd4e9d6d407238093245346cf9", "./example-plugin-header-comment.md": "2fb49dc6ccad894e02f123940a9db98c7724dddc", "../code-snippets/link-to-logged-data.md": "34da337f79be5ce857024f541a99d302174ca37d" } }, { "post_title": "Example WordPress plugin header comment for WooCommerce extensions", "menu_title": "Plugin header comments", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/example-plugin-header-comment.md", "hash": "0745d2f89373776a45701061e6bc9250231067a73a2ff118ceb63f1fe41cf231", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/example-plugin-header-comment.md", "id": "2fb49dc6ccad894e02f123940a9db98c7724dddc" }, { "post_title": "Data storage primer", "menu_title": "Data storage", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/data-storage.md", "hash": "1ea2fabf927f9ced2fee89f930e9195c7df4d98ceb3d847436337376578802a3", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/data-storage.md", "id": "b3e0b17ca74596e858c26887c1e4c8ee6c8f6102" }, { "post_title": "How to create custom product tours", "menu_title": "How to create custom product tours", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/creating-custom-product-tours.md", "hash": "0c92334bb1ac4da6f3e60c9d8ad7fbe8e0854c4c808049ce116df1e4d6f70329", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/creating-custom-product-tours.md", "id": "7b6e4726678c0280f050dba86b9f7ea1fc417dea" }, { "post_title": "Classes in WooCommerce", "menu_title": "Classes in WooCommerce", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/class-reference.md", "hash": "72afd8f0332d676c1c8c46534a62dfed5db1adf97d4ddf0aa40882d3a23da839", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/class-reference.md", "id": "d5f4d8e645707552d013b4be2cd5fd1c943f2122" }, { "post_title": "How to check if WooCommerce is active", "menu_title": "Check if WooCommerce is active", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/check-if-woo-is-active.md", "hash": "dca930ebe334bb3bb276ec912d050830b784ec9f755be491d41c3c32f5b65637", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/check-if-woo-is-active.md", "id": "2c2e89013ad76ff2596680224047723163512bc2" }, { "post_title": "How to build your first extension", "menu_title": "Build your first extension", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/building-your-first-extension.md", "hash": "b875dda72e3d4b26a06969f76abc1d99e55137d85ba22aa1671915625de851da", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/building-your-first-extension.md", "id": "278c2822fe06f1ab72499a757ef0c4981cfbffb5" }, { "post_title": "How to add custom product types to Add Products onboarding list", "menu_title": "Add custom product types to Add Products onboarding list", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/adding-custom-products-to-add-products-onboarding-list.md", "hash": "60e50ef5d7e2ac6d0745c31031140df1dbb3c1b8724230cab1eaedebe3814688", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/adding-custom-products-to-add-products-onboarding-list.md", "id": "747321d7fd2eb5c9c3351ea38374dfc80d3ec968" }, { "post_title": "How to add actions and filters", "menu_title": "Add actions and filters", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/adding-actions-and-filters.md", "hash": "ac6b6db9a4bc92d13c71b9d7d81614df4e4cd80120875e5f274238af062a8744", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/adding-actions-and-filters.md", "id": "6f461e2f0ca9195097b36f987ee6c0212a65e8ab" }, { "post_title": "How to add a section to a settings tab", "menu_title": "Add a section to a settings tab", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/extension-development/adding-a-section-to-a-settings-tab.md", "hash": "400124b03f0d2f53736012100d2be87e77a7bc9c72a5c6af143f62d84321b09d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/extension-development/adding-a-section-to-a-settings-tab.md", "id": "a88144dff894408f31a80c96dcee3bd5126ecd28" } ], "categories": [] }, { "content": "\nDive into WooCommerce with guides and resources ideal for initial setup and understanding the core functionalities of the platform.\n", "category_slug": "getting-started", "category_title": "Getting Started", "posts": [ { "post_title": "Understanding WooCommerce Endpoints", "menu_title": "WooCommerce Endpoints", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/getting-started/woocommerce-endpoints.md", "hash": "26318dce3085e8100d29115248495852ab4e425de9297b00e474e24a8ef979f6", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/getting-started/woocommerce-endpoints.md", "id": "31a11f74bcd9f21f97cd4c6c719240b3d84e40f4", "links": { "./customizing-endpoint-urls.md": "c19e1b1da6543f8a95ee04ba120f4f171f8e6e40", "./troubleshooting-endpoints.md": "dff57bd736ae83850bfc7e4ac994bd22141d96ee" } }, { "post_title": "Troubleshooting WooCommerce Endpoints", "menu_title": "Troubleshooting Endpoints", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/getting-started/troubleshooting-endpoints.md", "hash": "1a015d82f4d82cc2d9f13f188f03c4e6e03b98ea9d22c5a7710547e7d3c8c78f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/getting-started/troubleshooting-endpoints.md", "id": "dff57bd736ae83850bfc7e4ac994bd22141d96ee", "links": { "./woocommerce-endpoints.md": "31a11f74bcd9f21f97cd4c6c719240b3d84e40f4", "./customizing-endpoint-urls.md": "c19e1b1da6543f8a95ee04ba120f4f171f8e6e40" } }, { "post_title": "Setting up your development environment", "menu_title": "Development environment setup", "tags": "tutorial, setup", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/getting-started/development-environment.md", "hash": "b9f56987247aee67eaa2c74d1059e1cadfd335fa81c77b76c0717648d5631c0f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/getting-started/development-environment.md", "id": "9080572a3904349c44c565ca7e1bef1212c58757" }, { "post_title": "WooCommerce developer tools", "menu_title": "Developer tools", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/getting-started/developer-tools.md", "hash": "ef24e32109d66f96a990fea7a5eb32f9e0b98ae7ca766dcae12244449956997b", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/getting-started/developer-tools.md", "id": "2ed3659ae0153c8fb3252c417bb0eb43ea60f862" }, { "post_title": "Resources for debugging", "menu_title": "Debugging", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/getting-started/debugging.md", "hash": "68ce2cf0aae27b9214ea5da1ad7474cd2274547732f6212bef39e9d7e60edd49", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/getting-started/debugging.md", "id": "75c020ee52329c09f4dc04e33dc8aeb11c088534", "links": { "../extension-development/logging.md": "c684e2efba45051a4e1f98eb5e6ef6bab194f25c" } }, { "post_title": "Customizing WooCommerce Endpoint URLs", "menu_title": "Customizing Endpoint URLs", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/getting-started/customizing-endpoint-urls.md", "hash": "7feda75b07a1c11d533afabc7781abb80438ce2fa2c3fb37c173e1275098e720", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/getting-started/customizing-endpoint-urls.md", "id": "c19e1b1da6543f8a95ee04ba120f4f171f8e6e40", "links": { "./woocommerce-endpoints.md": "31a11f74bcd9f21f97cd4c6c719240b3d84e40f4" } } ], "categories": [] }, { "content": "\nWooCommerce 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.\n\n[High-Performance Order Storage (HPOS)](https://developer.woocommerce.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.\n\nIn January 2022, we published the [initial plan for the Custom Order Tables feature](https://developer.woocommerce.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.woocommerce.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.\n\nFrom WooCommerce 8.2, released on October 2023, [High-Performance Order Storage (HPOS)](https://developer.woocommerce.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.\n\n## What's New with High-Performance Order Storage?\n\nBringing High-Performance Order Storage (HPOS) to WooCommerce improves these three essential properties for eCommerce stores.\n\n### Scalability\n\nThe 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.\n\nWith 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.\n\n### Reliability\n\nHigh-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.\n\n### Simplicity\n\nYou no longer have to go through a single huge database to locate underlying data and WooCommerce entries.\n\nWith 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.\n\n## Background\n\nBefore 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.\n\nHowever, 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.\n\nThe order data is synced from `_posts` and `_postmeta` table to four custom order tables:\n\n1. `_wc_orders`\n2. `_wc_order_addresses`\n3. `_wc_order_operational_data`\n4. `_wc_orders_meta`\n\n\n## Enabling the feature\n\nFrom WooCommerce 8.2, released on October 2023, HPOS is enabled by default for new installations. Existing stores can check [How to enable HPOS](https://developer.woocommerce.com/docs/how-to-enable-high-performance-order-storage/)\n\n## Database tables\n\nA 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.\n\n## Authoritative tables\n\nAt 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.\n\nIf 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).\n\n[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.\n\nIn 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.\n\n## Synchronization\n\n_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.\n\nThis can happen in a number of ways:\n\n\n### Immediate synchronization\n\nIf 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.\n\n\n### Manual synchronization\n\nWhen 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:\n\n```php\n$synchronizer = wc_get_container()->get(Automattic\\WooCommerce\\Internal\\DataStores\\Orders\\DataSynchronizer::class);\n$order_ids = $synchronizer->get_next_batch_to_process( $batch_size );\nif ( count( $order_ids ) ) {\n\t$synchronizer->process_batch( $order_ids );\n}\n```\n\nwhere `$batch_size` is the maximum count of orders to process.\n\n\n### Scheduled synchronization\n\nIf 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`.\n\nIf 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.\n\nIf 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).\n\n\n### Deletion synchronization\n\nSynchronization 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.\n\nTo 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.\n\nAn 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.\n\nWhen 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.woocommerce.com/2022/09/29/high-performance-order-storage-backward-compatibility-and-synchronization/#synchronization).\n\n\n> 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.woocommerce.com/2022/09/29/high-performance-order-storage-backward-compatibility-and-synchronization/#synchronization).\n\n## Placeholder records\n\nOrder 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.\n\nIf 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.\n\nTo 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`.\n\n\n## Order Data Storage\n\nYou can switch between data stores freely to sync the data between the tables.\n\n- 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.\n\n![Select WordPress Post Tables](https://woocommerce.com/wp-content/uploads/2023/10/image-18.png?w=650)\n\n- If you select **\"High-Performance Order Storage\"**, the system will save the order data within the new WooCommerce order tables\n\n![Select High-Performance Order Storage](https://woocommerce.com/wp-content/uploads/2023/10/image-19.png?w=650)\n\n- 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.\n\n![Select WordPress Post Tables and Enable compatibility mode](https://woocommerce.com/wp-content/uploads/2023/10/image-20.png?w=650)\n\n\n## Incompatible Plugins\n\nIf 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**.\n\n![Incompatible plugin](https://woocommerce.com/wp-content/uploads/2023/10/image-21.png?w=650)\n\n- You can click on \"**View and manage**\" to review the list of incompatible plugins\n- 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)\n\n![Plugins page](https://woocommerce.com/wp-content/uploads/2023/10/image-22.png?w=650)\n\n> **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.woocommerce.com/2022/09/14/high-performance-order-storage-progress-report/) available to help with their integration efforts.\n\n\n## Disabling HPOS\n\nIf 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**.\n\nTo 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.\n\n![WooCommerce â–¸ Settings â–¸ Advanced â–¸ Features Screen](https://woocommerce.com/wp-content/uploads/2023/10/hpos-feature-settings.png?w=650)\n\nOnce 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!\n\nAs noted earlier, we also strongly recommend reaching out to the support teams of any plugins that are incompatible, so they can take corrective action.\n", "category_slug": "hpos", "category_title": "High Performance Order Storage", "posts": [ { "post_title": "HPOS order querying APIs", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/high-performance-order-storage/wc-order-query-improvements.md", "hash": "e6a82fd1551296d1f104cb70921ecf13d63e04760ed2f24a3d57d4b2da2217e3", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/high-performance-order-storage/wc-order-query-improvements.md", "id": "94261c0a5d954f409ce6c207c9ae624dd577cf64" }, { "post_title": "HPOS extension recipe book", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/high-performance-order-storage/recipe-book.md", "hash": "f5dc57939c8278a9de9a7ddd9fdd968ca672e998ba43a080a03203c499d98709", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/high-performance-order-storage/recipe-book.md", "id": "991c19edd20b1df6683f31f106d74689248cd102" }, { "post_title": "A large store's guide to enable HPOS on WooCommerce", "menu_title": "Enable HPOS for large stores", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/high-performance-order-storage/guide-large-store.md", "hash": "1e144ac0d0a7c869093533bf94a1f218a42930a3f3edcbcfdd1210448243a992", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/high-performance-order-storage/guide-large-store.md", "id": "b6156ac7b77d75022867e9ebb968bc9c1c35f0da" }, { "post_title": "How to enable High Performance Order Storage", "menu_title": "Enable HPOS", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/high-performance-order-storage/enable-hpos.md", "hash": "c8c75c274eb52a48729589220cfd6b5c091b6699d3bf44e6c808cf62f1680310", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/high-performance-order-storage/enable-hpos.md", "id": "9d41c63f3d0cb17ada82a65bf4a26a1978cc34b0" }, { "post_title": "HPOS CLI Tools", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/high-performance-order-storage/cli-tools.md", "hash": "8cd823759ce20551d582c39f57ae79f9e0227a8cb0131146e6b7dac5e7312708", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/high-performance-order-storage/cli-tools.md", "id": "cdd9d9ad5777d978ba953e3478fbb61cab8fdf59" } ], "categories": [] }, { "content": "\nTailor your WooCommerce store for global audiences with guides on setting up and translating Woo in your language.\n", "category_slug": "localization-translation", "category_title": "Localization and Translation", "posts": [ { "post_title": "How to translate WooCommerce", "menu_title": "Translating WooCommerce", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/localization-translation/translating-woocommerce.md", "hash": "f35b7458ea38f7c95f56888c76f139059bf38661991d7f0c37fbdd860786f5fc", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/localization-translation/translating-woocommerce.md", "id": "017b9f80a086d119f8bac193c9b4d87d1efff67d" } ], "categories": [] }, { "content": "\nGet insights into integrating and customizing various payment gateways in WooCommerce for secure and efficient transactions.\n", "category_slug": "payments", "category_title": "Payments", "posts": [ { "post_title": "WooCommerce Payment Token API", "menu_title": "Payment Token API", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/payments/payment-token-api.md", "hash": "441908f0678b9ff90f33adc3831ac75a5c49038a0b068dfc41456c232a851c7d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/payments/payment-token-api.md", "id": "5f345b53875981703d4b80e8d04eae2daafe4c81" }, { "post_title": "WooCommerce payment gateway plugin base", "tags": "code-snippet", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/payments/payment-gateway-plugin-base.md", "hash": "707cf9e5386c1d66fc84d6fc09fb0b0f2f3ed8c20376a66b3e0fa7b0802a363a", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/payments/payment-gateway-plugin-base.md", "id": "1934a5305524d7111a91f1e52a7495cf126f33f2" }, { "post_title": "WooCommerce Payment Gateway API", "menu_title": "Payment Gateway API", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/payments/payment-gateway-api.md", "hash": "f199d04a262bac32d1e22eb3f8410d5c30f10fa86cbb303d4149363a44dc3562", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/payments/payment-gateway-api.md", "id": "b337203996650b567f91c70306e1010d6f1ae552" } ], "categories": [] }, { "content": "\nThis section is dedicated to providing you with guides and best practices to optimize the performance of WooCommerce stores and extensions. Whether you're a store developer looking to enhance your site's speed and efficiency or an extension developer aiming to ensure your products contribute positively to store performance, you'll find valuable resources here to assist you.\n", "category_slug": "performance", "category_title": "Performance", "posts": [ { "post_title": "How to optimize performance for WooCommerce stores", "menu_title": "Optimize store performance", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/performance/performance-optimization.md", "hash": "25588fe2fab942f8db82a47d98594a3b0b6f35748185719b5c3b453876a9714b", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/performance/performance-optimization.md", "id": "7294890af7805de703ce7b3d4b55d3c56ff39186" }, { "post_title": "WooCommerce performance best practices", "menu_title": "Performance best practices", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/performance/performance-best-practices.md", "hash": "3c49b5553e99b64ecdbdad565866479f7af5e474dbbcc9aa36d711c02d8b0906", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/performance/performance-best-practices.md", "id": "35bda1cd7068d6179a9e46cca8d7dc2694d0df96" } ], "categories": [] }, { "content": "", "category_slug": "product-collection", "category_title": "Product Collection Block", "posts": [ { "post_title": "Registering custom collections in product collection block", "menu_title": "Registering custom collections", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-collection-block/register-product-collection.md", "hash": "27c321bed35524d74019e015f5eed6cdca7e6c2efe0bc89ffdd2b9b5d43c47e8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-collection-block/register-product-collection.md", "id": "3bf26fc7c56ae6e6a56e1171f750f5204fcfcece" }, { "post_title": "DOM Events sent from product collection block", "menu_title": "DOM Events", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-collection-block/dom-events.md", "hash": "59a4b49eb146774d33229bc60ab7d8f74381493f6e7089ca8f0e2d0eb433a7a4", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-collection-block/dom-events.md", "id": "c8d247b91472740075871e6b57a9583d893ac650" } ], "categories": [] }, { "content": "\nDiscover how to customize the WooCommerce product editor, from extending product data to adding unique functionalities.\n\nThis 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.\n", "category_slug": "product-editor", "category_title": "Product Editor", "posts": [ { "post_title": "Product editor development handbook", "menu_title": "Development handbook", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-editor-development/product-editor.md", "hash": "bbf230f9f13bc2404096f5b5b2f7394ba5ab391d78e5efa9627342f5b33be7dd", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-editor-development/product-editor.md", "id": "59450404de2750d918137e7cf523e52bedfd7214", "links": { "./product-editor-extensibility-guidelines.md": "a837eb947d31fcff3c6e1f775926ba5eb13cd790", "./block-template-lifecycle.md": "0c29c74a7e7e9fd88562df1afa489659f460879e" } }, { "post_title": "Product editor extensibility guidelines", "menu_title": "Extensibility guidelines", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-editor-development/product-editor-extensibility-guidelines.md", "hash": "8b6102ecab0ceda36afe6d7b2b12fd9d1e62c893ed7409d79cc15da8fc1e76c8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-editor-development/product-editor-extensibility-guidelines.md", "id": "a837eb947d31fcff3c6e1f775926ba5eb13cd790" }, { "post_title": "Managing the lifecycle of WooCommerce block templates", "menu_title": "Block template lifecycle", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-editor-development/block-template-lifecycle.md", "hash": "85c88e4c85786405b1eb0436b9e4e478c70ac4dd9ffd08f2a8db256b139ee290", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-editor-development/block-template-lifecycle.md", "id": "0c29c74a7e7e9fd88562df1afa489659f460879e" } ], "categories": [ { "content": "# How-to Guides for the Product form\n\nThere are several ways to extend and modify the new product form. Below are links to different tutorials.\n\n## Generic fields\n\nOne way to extend the new product form is by making use of generic fields. This allows you to easily modify the form using PHP only. We have a wide variety of generic fields that you can use, like a text, checkbox, pricing or a select field. You can find the full list [here](https://github.com/woocommerce/woocommerce/blob/trunk/packages/js/product-editor/src/blocks/generic/README.md).\n\nTo see how you can make use of these fields you can follow the [generic fields tutorial](https://github.com/woocommerce/woocommerce/blob/trunk/docs/product-editor-development/how-to-guides/generic-fields-tutorial.md).\n\n## Writing a custom field\n\nIt is also possible to write your own custom field and render those within the product form. This is helpful if the generic fields don't quite fit your use case.\nTo see an example of how to create a basic dropdown field in the product form you can follow [this tutorial](https://github.com/woocommerce/woocommerce/blob/trunk/docs/product-editor-development/how-to-guides/custom-field-tutorial.md).\n", "category_slug": "how-to-guides", "category_title": "How To Guides", "posts": [ { "post_title": "Extending the product form with generic fields", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-editor-development/how-to-guides/generic-fields-tutorial.md", "hash": "759edf2a3b0e29fa4f54b0e2d582c96db91eb68c844d5c545c33f0d2c38e2cda", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-editor-development/how-to-guides/generic-fields-tutorial.md", "id": "f221ccb6d42c5e67a0a7916b955253ab7e546641" }, { "post_title": "Extending the product form with custom fields", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/product-editor-development/how-to-guides/custom-field-tutorial.md", "hash": "f0d0273c0d65739d605448492bfbe684f0ed33f9e6e274df06f26e83cb6ba341", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-editor-development/how-to-guides/custom-field-tutorial.md", "id": "fed80efbb225df9054fadd6e1fc45c2cd03e7f99" } ], "categories": [] } ] }, { "content": "\nEnsuring the quality of your WooCommerce projects is essential. This section will delve into quality expectations, best practices, coding standards, and other methodologies to ensure your projects stand out in terms of reliability, efficiency, user experience, and more. \n", "category_slug": "quality-and-best-practices", "category_title": "Quality And Best Practices", "posts": [ { "post_title": "Writing high quality testing instructions", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/writing-high-quality-testing-instructions.md", "hash": "51fb384f8b1dfcb82fdbad6db08145b2c51dba6227529b8b54e2a281fc4b8ef7", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/writing-high-quality-testing-instructions.md", "id": "56a8ef0ef0afec9c884f655e7fdd23d9666c9d00" }, { "post_title": "Support and documentation for WooCommerce extensions", "menu_title": "Support and documentation", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/support-and-documentation.md", "hash": "48ec15e8c50c2fceea0bce267a52dcd7c740a9f1614773b10b6bab4a2e605a8c", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/support-and-documentation.md", "id": "c7ab700f5ab812a79b646a865caf429864becdb8" }, { "post_title": "Understanding the risks of removing URL bases in WooCommerce", "menu_title": "Risks of removing URL bases", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/removing-product-product-category-or-shop-from-the-url.md", "hash": "414970e7d53ddcafb186f2f3a253eed0d01800df2182f8bd2a4310c53079a795", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/removing-product-product-category-or-shop-from-the-url.md", "id": "827bfa56d40c2155542147ea5afe7cc756e18c5d" }, { "post_title": "Privacy Standards for WooCommerce Extensions", "menu_title": "Privacy Standards", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/privacy-standards.md", "hash": "44496b3d6244ea09c86b9d13fbefe9b77478311df25def6ae5e4e567a0e2bd6f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/privacy-standards.md", "id": "840cf3001ed520ed206a42b147a2e3afa4ed82ae", "links": { "./gdpr-compliance.md": "af392a92b41b69b543c5ec77a07af770f6bb1587" } }, { "post_title": "How to optimize performance for WooCommerce stores", "menu_title": "Optimize store performance", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/performance-optimization.md", "hash": "25588fe2fab942f8db82a47d98594a3b0b6f35748185719b5c3b453876a9714b", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/performance-optimization.md", "id": "4a616a12defd72bf5a16fb48db4dccd63000d98f" }, { "post_title": "Naming conventions", "menu_title": "Naming conventions", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/naming-conventions.md", "hash": "b9412bed82b46bf0232ca59caaeb48a868ab62b965d5f2756135a58ee0d80a66", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/naming-conventions.md", "id": "7a64e9ba2411bdae46c6ff274a8f65c10d9ba59f", "links": { "./css-sass-naming-conventions.md": "a34404f72868f2780ccf07da9b998204b8213d32" } }, { "post_title": "Maintaining and updating WooCommerce extensions", "menu_title": "Maintainability and updates", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/maintainability.md", "hash": "6c1afab52dfab6998b87c4fac3acaba05ef516c4ff483b1ad46be13bc1b299c1", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/maintainability.md", "id": "828687b931d51c041ff4b4e0dc9a3a5b832b7ead" }, { "post_title": "WooCommerce grammar, punctuation and capitalization guide", "menu_title": "Grammar, punctuation and capitalization", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/grammar-punctuation-capitalization.md", "hash": "6415e94dcfd13940409b28e063b5cd6e251f971c19d8910ed7faab143759fd30", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/grammar-punctuation-capitalization.md", "id": "af9f21747d93f0ab504e3713b1844c59c70b1d0e" }, { "post_title": "GDPR compliance guidelines for WooCommerce extensions", "menu_title": "GDPR compliance", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/gdpr-compliance.md", "hash": "3ef669780d26a71106f9b01a64d079adc5f2bf1c78ed1ef026fa8fe17c20cdf8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/gdpr-compliance.md", "id": "af392a92b41b69b543c5ec77a07af770f6bb1587" }, { "post_title": "CSS/Sass naming conventions", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/css-sass-naming-conventions.md", "hash": "8d341abfa0c9642286c581c0ff21cc471e7721bbc180e96913a5f95232610736", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/css-sass-naming-conventions.md", "id": "a34404f72868f2780ccf07da9b998204b8213d32" }, { "post_title": "WooCommerce core critical flows", "menu_title": "Core critical flows", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/core-critical-flows.md", "hash": "472f5a240abe907fec83a8a9f88af6699f2d994aa7ae87faa1716a087baa66db", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/core-critical-flows.md", "id": "e561b46694dba223c38b87613ce4907e4e14333a" }, { "post_title": "Compatibility and interoperability for WooCommerce extensions", "menu_title": "Compatibility best practices", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/compatibility.md", "hash": "c8e09923cffd4a3951dfc2db43823f9d469439775019104f687aa2c95caff142", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/compatibility.md", "id": "e3353f3e7a61bfd0f839d74c5baee2847b4b75d0" }, { "post_title": "WooCommerce coding standards", "menu_title": "Coding standards", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/coding-standards.md", "hash": "7c5b8a0b555f81606fd6d2c85f62a00feaff369569666ba88d029fd384202f2f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/coding-standards.md", "id": "b09a572b8a452b6cd795e0985daa85f06e5889fb" } ], "categories": [ { "content": "\nReviews are an integral part of the online shopping experience, and people installing software pay attention to them. Prospective users of your extensions will likely consider average ratings when making software choices.\n\nMany of today's most popular online review platforms - from Yelp business reviews, to Amazon product reviews - have a range of opinion that can be polarized, with many extremely positive and/or negative reviews, and fewer moderate opinions. This creates a \"J-shaped\" distribution of reviews that isn't as accurate or as helpful as could be.\n\nWooCommerce.com and WordPress.org both feature reviews heavily, and competing extensions having a higher rating likely have the edge in user choice. \n\n## Primary considerations around reviews\n\nRequesting more reviews for a extension with major issues will not generate good reviews, and analyzing existing reviews will help surface areas to address before soliciting reviews.\n\nIt is extremely rare for users of WordPress plugins to leave reviews organically (.2% of users for WordPress.org leave reviews), which means that there's an untapped market of 99.8% of users of the average plugin.\n\nThese plugins are competing with other plugins on the same search terms in the WordPress.org plugin directory, and ratings are a large factor in the ranking algorithm. This is not usually a factor to the same extent on the WooCommerce Marketplace. For instance, WooCommerce's PayPal extension directly competes on all possible keywords with other PayPal extensions on the WordPress.org repository, while it does not compete with other PayPal payments extensions on the Marketplace.\n", "category_slug": "review-guidelines", "category_title": "Review Guidelines", "posts": [ { "post_title": "When to request WooCommerce extension reviews", "menu_title": "When to request reviews", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/review-guidelines/when-to-request-reviews.md", "hash": "7a14ceb03ac0a98d84c0d380e44534129198f8ee682e84824cbb6c793da71be8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/review-guidelines/when-to-request-reviews.md", "id": "d40eb30ff49c89545a5918f5b8c08b82e6f8f45a" }, { "post_title": "Utilizing your support team to respond to feedback", "menu_title": "Utilizing your support team", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/review-guidelines/utilizing-your-support-team.md", "hash": "3cadfdd506c2c279c16d411b4037f6ea6cd2fa2dcfad6ffe895e89e61b0e54c0", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/review-guidelines/utilizing-your-support-team.md", "id": "f7029c8549d5ed86dd8f9cc27d7a62da539b9ba7" }, { "post_title": "Utilizing WooCommerce extension feature requests", "menu_title": "Utilizing feature requests", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/review-guidelines/utilizing-feature-requests.md", "hash": "28af9f05e0c843a932ba1320d16097c029e71bdeae0dbe02ff95a96eb9d8c1c0", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/review-guidelines/utilizing-feature-requests.md", "id": "4efca02b0f14b13a1471f5beec4ef15365f98b17" }, { "post_title": "How to respond to negative WooCommerce extension reviews", "menu_title": "Responding to negative reviews", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/review-guidelines/responding-to-negative-reviews.md", "hash": "306df15c394c6867657e7c68282f16dab5d08e821bbb7e27514abca764262b24", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/review-guidelines/responding-to-negative-reviews.md", "id": "7cb825a3830e392aeae853b441a91237f48c3ae5" }, { "post_title": "Notifying users about bug fixes and feature requests", "menu_title": "Notifying users about bug fixes and feature requests", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/review-guidelines/notifying-users-about-important-events.md", "hash": "30b6241ebb32204910980a5dea2399a8fa2e02fa37ea22449edc549f3f14034b", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/review-guidelines/notifying-users-about-important-events.md", "id": "9ccc4bf579cc624002478fe8706241f4640d92b8" }, { "post_title": "Miscellaneous guidelines and advice", "menu_title": "Miscellaneous guidelines", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/review-guidelines/misc-guidelines.md", "hash": "c5515db05195cebbe1ed0595dbf2a09623c3b85e1b5b6e1c3628a79b957f8884", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/review-guidelines/misc-guidelines.md", "id": "003ece0250c6a0c248019a095f75f3cfedbc290e" }, { "post_title": "How to request WooCommerce extension reviews", "menu_title": "Requesting reviews", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/quality-and-best-practices/review-guidelines/how-to-request-reviews.md", "hash": "dfdf5add075777636eb628d25484e93268251437dec0253766c12d80ac82573b", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/quality-and-best-practices/review-guidelines/how-to-request-reviews.md", "id": "3d0c8bf7339a71198737d19eec7e6d71697b3727" } ], "categories": [] } ] }, { "content": "\nUnderstand Woo's reporting capabilities. Learn to generate, understand, and optimize reports to make informed decisions about your WooCommerce projects.\n", "category_slug": "reporting", "category_title": "Reporting", "posts": [ { "post_title": "How to extend WooCommerce analytics reports", "menu_title": "Extend analytics reports", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/reporting/extending-woocommerce-admin-reports.md", "hash": "b694b0e857d3ca60acdef2ffaae329a93f0a0243eacc4b192562c7f507f169b3", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/reporting/extending-woocommerce-admin-reports.md", "id": "3ef20148084c97d7f62b565b92df844392ac27f7" }, { "post_title": "How to add columns to analytics reports and CSV downloads", "menu_title": "Add columns to analytics reports", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/reporting/adding-columns-to-analytics-reports-and-csv-downloads.md", "hash": "8b7d43f66fff68a0b96917d25bceca7bc3505a30ce5b36542b73f5a555b30ab0", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/reporting/adding-columns-to-analytics-reports-and-csv-downloads.md", "id": "044aac1c58553a34049a77168d247fd42ede994b", "links": { "extending-woocommerce-admin-reports.md": "3ef20148084c97d7f62b565b92df844392ac27f7" } } ], "categories": [] }, { "content": "\nUtilize the WooCommerce REST API for advanced integrations, data manipulation, and building headless ecommerce solutions.\n", "category_slug": "rest-api", "category_title": "REST API", "posts": [ { "post_title": "Getting started with the WooCommerce REST API", "menu_title": "Getting started", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/rest-api/getting-started.md", "hash": "38f3b452b833707fa131a099da28b250fd687f449727685d42b9a9d5d060a96c", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/rest-api/getting-started.md", "id": "ad7fceb11d06571fb060f72c414896b425d6b72b" } ], "categories": [] }, { "content": "\nSecurity is paramount. This section will dive into best practices, guidelines, and insights to ensure your WooCommerce projects remain secure from threats. \n", "category_slug": "security", "category_title": "Security", "posts": [ { "post_title": "WooCommerce security best practices", "menu_title": "Security best practices", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/security/security-best-practices.md", "hash": "c2fdc86ba61ba0ad33ed2795f4f00eb90b7fc8545b007b2c14dbc1b7aa97a6ed", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/security/security-best-practices.md", "id": "d579f1c5174c67421dff64719e001b31a015a3d2" }, { "post_title": "How to Prevent Data Leaks in WooCommerce", "menu_title": "Prevent Data Leaks", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/security/prevent-data-leaks.md", "hash": "762a6725340711063688e33c0107dbcf3a7aed1674bc0bcd9ed4157b3b49ea2e", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/security/prevent-data-leaks.md", "id": "91b86abe2953e1cd4e9d6d407238093245346cf9" } ], "categories": [] }, { "content": "\nDelve into extending shipping functionality through adding custom shipping methods, integrating advanced carrier APIs, and developing tailored shipping solutions to elevate the ecommerce experience.\n", "category_slug": "shipping", "category_title": "Shipping", "posts": [ { "post_title": "Shipping method API", "menu_title": "Shipping method API", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/shipping/shipping-method-api.md", "hash": "40bf33d540692608fccec48e9a6cc08e51c510c894c32414723c75cc2d2dc3a8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/shipping/shipping-method-api.md", "id": "70270a01c8f1f2b630c809c0b9611940e99293a9", "links": { "../extension-development/building-your-first-extension.md": "278c2822fe06f1ab72499a757ef0c4981cfbffb5" } } ], "categories": [] }, { "content": "\nProperly setting up your test environment and writing tests when contributing to WooCommrece core are essential parts of our development pipeline. The links below are also included in our [Contributing Guidelines](https://github.com/woocommerce/woocommerce/blob/trunk/.github/CONTRIBUTING.md) on GitHub.\n\nIf you have any questions about testing please reach out to the developer community in our public channels([Developer Blog](https://developer.woocommerce.com/blog/), [GitHub Discussions](https://github.com/woocommerce/woocommerce/discussions), or [Community Slack](https://woocommerce.com/community-slack/)).\n\n## Unit Testing\n\n[End-to-end tests](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/tests/e2e-pw) are powered by `Playwright`. The test site is spun up using `wp-env` ([recommended](https://developer.wordpress.org/block-editor/reference-guides/packages/packages-env/)), but we will continue to support `e2e-environment` in the meantime, and slowly [deprecate](https://github.com/woocommerce/woocommerce/blob/trunk/plugins/woocommerce/tests/e2e/README.md) `Puppeteer` testing. \n\n## API Testing\n\n`api-core-tests` is a [package](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/tests/api-core-tests#guide-for-writing-api-tests) that contains automated API tests for WooCommerce, based on `Playwright` and `wp-env`. It supersedes the SuperTest based `api-core-tests` package and `e2e-environment` setup, which we will gradually deprecate.\n\n## Calls for Testing\n\nKeep tabs on calls for testing on our developer blog, and make sure to read our beta testing instructions to help us build new features and enhancements.\n", "category_slug": "testing", "category_title": "Testing", "posts": [ { "post_title": "Beta Testing", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/testing/beta-testing.md", "hash": "09be54c71d8805df451263a1cddd12d744b2b1d81f669fb539bd2f14cfdefeeb", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/testing/beta-testing.md", "id": "01f266904647aad0d44b5687fb5f143560dabc67" } ], "categories": [] }, { "content": "\nLearn to design and integrate custom themes in WooCommerce, focusing on responsive design and ecommerce optimization.\n\nFor blocks themes, see our [block theme documentation](/docs/category/block-theme-development).\n", "category_slug": "theme-development", "category_title": "Classic Theme Development", "posts": [ { "post_title": "Thumbnail image regeneration", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/thumbnail-image-regeneration.md", "hash": "326d3f142bffb477750e5fc1211f9213a0cbf2083368043a3ee7f5358032fd88", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/thumbnail-image-regeneration.md", "id": "733e1b16276d64f128ba0e337ca68ec3de0bf68f" }, { "post_title": "Theme design and user experience guidelines", "menu_title": "Theme design and user experience guidelines", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/theme-design-ux-guidelines.md", "hash": "360270ccb4a695a7b2fc089fe2b092ce4005fd63ae98c84b9014221ffb7e8015", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/theme-design-ux-guidelines.md", "id": "ec1f05ca7c14ed81a52553fa1c3f1045df5f6a4f" }, { "post_title": "Template structure & Overriding templates via a theme", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/template-structure.md", "hash": "a82d885c8395385dc51c976b2b51eec88cdcce72bf905fda78f97d77533ce079", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/template-structure.md", "id": "34bfebec9fc45e680976814928a7b8a1778af14e" }, { "post_title": "How to set up and use a child theme", "menu_title": "Set up and use a child theme", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/set-up-a-child-theme.md", "hash": "b362d5ddd34d8b81f6a2ee2369dd2cd68e51700836a85f96d629e87d564b0844", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/set-up-a-child-theme.md", "id": "00b6916595cbde7766f080260a9ea26f53f3271c" }, { "post_title": "Image sizing for theme developers", "menu_title": "Image sizing", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/image-sizes.md", "hash": "9883e7931ff8bd56dcd707974fe8ec992f21148818206aec354b0368dc999239", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/image-sizes.md", "id": "3f5301ac3040d38bc449b440733da6a466209df3", "links": { "./thumbnail-image-regeneration.md": "733e1b16276d64f128ba0e337ca68ec3de0bf68f" } }, { "post_title": "How to fix outdated WooCommerce templates", "menu_title": "Fix outdated templates", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/fixing-outdated-woocommerce-templates.md", "hash": "1b57eba543bb25708fbc4d4ff5802385d06ff2df6f2486f77e6924cb1d44b8d1", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/fixing-outdated-woocommerce-templates.md", "id": "1fa09bbc2137a65288cc1576c1053224db7187ed" }, { "post_title": "Conditional tags in WooCommerce", "menu_title": "Conditional tags", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/conditional-tags.md", "hash": "897a95ac13aba64eecc2bb5c521dd5e390abbb6a8be421940e5eaae465949d43", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/conditional-tags.md", "id": "a08cc0796290477cad7d9bc6737960985f5f6f41" }, { "post_title": "Classic theme development handbook", "menu_title": "Classic theme development", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/theme-development/classic-theme-developer-handbook.md", "hash": "1194437fbc2ec82d60c8b73a9742ec650bd90fe734758c3a2b27ed852d4d14f7", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/theme-development/classic-theme-developer-handbook.md", "id": "c2fde53e1dc3efbded3cfe1fb4df27136a3799a4" } ], "categories": [] }, { "content": "\nThis section covers general guidelines, and best practices to follow in order to ensure your product experience aligns with WooCommerce for ease of use, seamless integration, and strong adoption.\n\nWe strongly recommend you review the current [WooCommerce setup experience](https://woocommerce.com/documentation/plugins/woocommerce/getting-started/) to get familiar with the user experience and taxonomy.\n\nWe also recommend you review the [WordPress core guidelines](https://developer.wordpress.org/plugins/wordpress-org/detailed-plugin-guidelines/) to ensure your product isn't breaking any rules, and review [this helpful resource](https://woocommerce.com/document/grammar-punctuation-style-guide/) on content style.\n\n## General\n\nUse existing WordPress/WooCommerce UI, built in components (text fields, checkboxes, etc) and existing menu structures.\n\nPlugins which draw on WordPress' core design aesthetic will benefit from future updates to this design as WordPress continues to evolve. If you need to make an exception for your product, be prepared to provide a valid use case.\n\n- [WordPress Components library](https://wordpress.github.io/gutenberg/?path=/story/docs-introduction--page)\n- [Figma for WordPress](https://make.wordpress.org/design/2018/11/19/figma-for-wordpress/) | ([WordPress Design Library Figma](https://www.figma.com/file/e4tLacmlPuZV47l7901FEs/WordPress-Design-Library))\n- [WooCommerce Component Library](https://woocommerce.github.io/woocommerce-admin/)\n", "category_slug": "user-experience-extensions", "category_title": "Extension Guidelines", "posts": [ { "post_title": "WooCommerce Extension Guidelines - Testing", "menu_title": "Testing", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/testing.md", "hash": "8b5d6418f4f5c8281b8122640d738b833d734b4ffd6357e740953691d948faf6", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/testing.md", "id": "0299f640abe2127807b1765c526cabd93120d60f" }, { "post_title": "WooCommerce Extension Guidelines - Task List and Inbox", "menu_title": "Task list and Inbox", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/task-list-and-inbox.md", "hash": "e49078090e1cff1a184d6a2841f14f0a79551a99d990b0227f3475bac01febe2", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/task-list-and-inbox.md", "id": "4790569835c89da9f1a85e9afe59a4f53ba11943" }, { "post_title": "WooCommerce Extension Guidelines - Settings", "menu_title": "Settings", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/settings.md", "hash": "3f0f6af91e9cf96a2adbc9071d69c37fa1baf9d67f5ff42e3adbc6261a9e10bc", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/settings.md", "id": "1066428802afb323fbf38c64f5480edbabd93178" }, { "post_title": "WooCommerce Extension Guidelines - Onboarding", "menu_title": "Onboarding", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/onboarding.md", "hash": "99361db29b6142c96bba6d087b6cc1740e693b340b83bf26d6356d3bd2aca96f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/onboarding.md", "id": "38cce49e3e334ad30aa2bcf304a15375e88e66fa" }, { "post_title": "WooCommerce Extension Guidelines - Notices", "menu_title": "Notices", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/notices.md", "hash": "70f5b6c955c30ea3f4b15d08ef59f13247bdf62e97af518824e35f2f47ec16c5", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/notices.md", "id": "2f3ffb30344bc45b5ff3bc17a59520fcd16b2598" }, { "post_title": "WooCommerce Extension Guidelines - Navigation", "menu_title": "Navigation", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/navigation.md", "hash": "9c5313a31ebe26909a2cfaaa0bcfcdc9d5a0855ac0ddb9808832524be313ebb6", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/navigation.md", "id": "9922abbcea787a91b3360f49fa53d5402a604e6b" }, { "post_title": "WooCommerce Extension Guidelines - Colors", "menu_title": "Colors", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/colors.md", "hash": "6812fdef13376c61091732078018df44fda52e9bc49e1f8a4a24cb0eaf3464a3", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/colors.md", "id": "7ca89c550a36bee4df33635c6fe861bc769c43cb" }, { "post_title": "User Experience Best Practices", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/best-practices.md", "hash": "c9083117020c65b5c4a2c31ccfa8a4456c0e8420e922be86ba3346d29e8875c4", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/best-practices.md", "id": "27838fbdf66db197a21d4a765cd9309423c33e83" }, { "post_title": "WooCommerce Extension Guidelines - Accessibility", "menu_title": "Accessibility", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-extensions/accessibility.md", "hash": "b147dbdb658b941e7bd45bec21f68ca83667915a1ba51f0d4b0e856899d0202d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-extensions/accessibility.md", "id": "e085da13824f41a311b3eeb391386a1c2f67da32" } ], "categories": [] }, { "content": "\nWhen building payments extensions, you should ensure you follow the [WooCommerce Extension Guidelines](https://developer.woocommerce.com/docs/category/extension-guidelines/).\n\nPayments plugins come in many types: payment processors and gateways, wallets, Buy Now Pay Later, crypto, and more.\n\nThe choice between payment plugins depends on the specific needs and preferences of the merchant and their customers. Some merchants may choose to use multiple types of payment plugins to offer their customers a wider range of payment options.\n\nA merchant can discover a payments plugin in the following ways:\n\n- Through direct installation from WordPress plugins.\n- Through Woo's public list of payment services on the Marketplace.\n- Through the admin onboarding tasks and payments settings. To be added to the list of payment gateways in the Woo admin, the payments plugin must meet the criteria listed in these guidelines.\n\n", "category_slug": "user-experience-payments", "category_title": "Payments Guidelines", "posts": [ { "post_title": "User Experience Guidelines - Payments Onboarding and Setup", "menu_title": "Payments Onboarding and Setup", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-payments/payments-onboarding.md", "hash": "b564c61dbaca4c883b94f3a82051e3baf1738337ea38ac29d2eb95bb1dfe8269", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-payments/payments-onboarding.md", "id": "9e100f5d1c5e52bb337a294456f75cd60929d9e3", "links": { "../ux-guidelines-extensions/settings.md": "1066428802afb323fbf38c64f5480edbabd93178", "../ux-guidelines-extensions/navigation.md": "9922abbcea787a91b3360f49fa53d5402a604e6b" } }, { "post_title": "User Experience Guidelines - Payment Button Style", "menu_title": "Payment Button Style", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-payments/payment-button-style.md", "hash": "3d8e829f6ca8b8c120bb4ca87f7a53203480709b56b603ee8c48102af8f285a1", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-payments/payment-button-style.md", "id": "83d869cec0b2268ae30a6517c7c8f424de284cad" }, { "post_title": "User Experience Guidelines - Payment Button Size and Anatomy", "menu_title": "Payment Button Size", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-payments/payment-button-size.md", "hash": "b9165eb27a79bb696d7f0fcea1ef8a36f56ffd01501447f4c266c95f515a8ee1", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-payments/payment-button-size.md", "id": "0920df1611e1b1b3e2f33c810a8f8e8ae09dd67c" }, { "post_title": "User Experience Guidelines - Payment Button Layout", "menu_title": "Payment Button Layout", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-payments/payment-button-layout.md", "hash": "bc518454d8552c5da08d9635799c578d730341b115f7f8a63e9123628242c772", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-payments/payment-button-layout.md", "id": "96caecc340794e5c80af271e5cc844e0b3d80a04" } ], "categories": [] }, { "content": "\nOur research shows that merchants think in terms of tasks and goals while creating new products in Woo. For example, adding or editing a product price is a separate task from uploading images or managing inventory.\n\nFor this reason, the new product form features groups (tabs) that correspond with these tasks. Simply speaking, they are separate views where different form features live. As a developer, you can extend any of these views and offer merchants the information and tools they need to create better, more successful products.\n\nThere are several ways to extend the new product form: from a single field to a whole group or section containing multiple fields and tables. These extension points are linked to the form structure, giving you plenty of freedom to create a great user experience.\n", "category_slug": "user-experience-product-editor", "category_title": "Product Editor Guidelines", "posts": [ { "post_title": "Product Editor Guidelines - Top Bar Extensions (future feature)", "menu_title": "Top Bar Extensions", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-form-top-bar.md", "hash": "24e079a4d79b0b692dc39493e5097584e4aa2c540f599756beed028586c6e468", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-top-bar.md", "id": "d9f9789cd181147412e83cf227d6ffccbb88ee4a" }, { "post_title": "Product Editor Guidelines - Subsections", "menu_title": "Subsections", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-form-subsections.md", "hash": "3fe49c097ac3aab24358b9b3f3d48dafa90541be7f2dff8eb057964d17902fca", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-subsections.md", "id": "1c1063b1d3b33af035da4f82dc2b06ce0a20900c" }, { "post_title": "Product Editor Guidelines - Sections", "menu_title": "Sections", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-form-sections.md", "hash": "d9414496ad3d2f1048bc5771bdb7e3eb2fcc571ec240d220c394e956e9e55675", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-sections.md", "id": "cfd01b51ad0811704c28401e6d755eb54f884640" }, { "post_title": "Product Editor Guidelines - Groups", "menu_title": "Groups", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-form-groups.md", "hash": "70a01fcd0096461538f9071ea19c8c335f186c922b48e8c88a30fc874ce1cd81", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-groups.md", "id": "03000dc9341d0d55a113c506e6e0bc87c98e3e1e", "links": { "./product-editor-form-custom-product-types.md": "8a21ebd4b75fdb5a311d2fda46e00a9132fe6d58" } }, { "post_title": "Product Editor Guidelines - Fields", "menu_title": "Fields", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-form-fields.md", "hash": "b6027444ea4c1ebe5444316e6cb5bfcb25fb6082408e93cdad165085f4a336e8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-fields.md", "id": "a76c0a435ceacc15962738418edeff41e40bfde7" }, { "post_title": "Product Editor Guidelines - Dialogue Extensions (future feature)", "menu_title": "Dialogue Extensions", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-form-dialogue-extensions.md", "hash": "82d4fdafc013f762ee929a38adcf2a2a0117526c67467002468fc465f8494d5f", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-dialogue-extensions.md", "id": "e3308f1c2958076d6718321e004e77ff4136c99d" }, { "post_title": "Product Editor Guidelines - Custom Product Types", "menu_title": "Custom Product Types", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-form-custom-product-types.md", "hash": "8a68ffcd82d0ff4e477fd339e97177b751d475914853e37be60fb1247e476f81", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-custom-product-types.md", "id": "8a21ebd4b75fdb5a311d2fda46e00a9132fe6d58" }, { "post_title": "Product Editor Guidelines - Example Use-Cases", "menu_title": "Example Use-Cases", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-product-editor/product-editor-examples.md", "hash": "611d4ef7e0463187855f4d330f79ec80ba9463d15930d8cb4aba6d809e02ff90", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-examples.md", "id": "b48948ec307b17cc33a9357ae3e4add9678891b6", "links": { "./product-editor-form-fields.md": "a76c0a435ceacc15962738418edeff41e40bfde7", "./product-editor-form-custom-product-types.md": "8a21ebd4b75fdb5a311d2fda46e00a9132fe6d58" } } ], "categories": [] }, { "content": "\nThis section 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.\n\nWe recommend you review the [UI best practices for WordPress](https://developer.wordpress.org/themes/advanced-topics/ui-best-practices/) to ensure your theme is aligned with the WordPress theme requirements.\n\nMake sure your theme fits one or more industries currently available in the [WooCommerce themes store](https://woocommerce.com/product-category/themes). It's important that the theme offers enough originality and distinctiveness in its design, while keeping it familiar, in order to be distinguished from other themes on the WooCommerce theme store. Your theme should avoid copying existing themes on the WooCommerce theme store or other WordPress theme marketplaces.\n", "category_slug": "user-experience-themes", "category_title": "Theme Design Guidelines", "posts": [ { "post_title": "Theme Design Guidelines - Branding", "menu_title": "Branding", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-themes/theme-design.md", "hash": "403210a2ec97e0f1a21d373a2de380f685183a8ae52d2c4a2cc53bd8c7f12649", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-themes/theme-design.md", "id": "f0e73cda245eb43650f53211bf5e3182dbf487f2" }, { "post_title": "WooCommerce Theme Guidelines - Demos and Sample Content", "menu_title": "Demos and Sample Content", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-themes/theme-demos-and-sample-content.md", "hash": "88154329e0315dbc5ad095435fb70996e2f4211c2b70390a38c49b0f9f8bb9ac", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-themes/theme-demos-and-sample-content.md", "id": "00dbd2b474b3ff30a460a96d8b106ce973c3e73a" }, { "post_title": "WooCommerce Theme Guidelines - Customization", "menu_title": "Customization", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-themes/theme-customization.md", "hash": "d1cd80d06816549f3693dec98b0084077a9433e55a37c2f5b57a69409b831b4d", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-themes/theme-customization.md", "id": "e72fd0cc8651b27224859dc7349775f8e3142ffe" }, { "post_title": "WooCommerce Theme Guidelines - Branding", "menu_title": "Branding", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-themes/theme-branding.md", "hash": "5b2728331c54ade0223c9ed34eb46acc21d2066cc128b840cf37be870fa8e018", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-themes/theme-branding.md", "id": "a7e8fd9fa7cd4f813324d89a15db3b7c8badf74c" }, { "post_title": "WooCommerce Theme Guidelines - Accessibility", "menu_title": "Accessibility", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/ux-guidelines-themes/theme-accessibility.md", "hash": "28c3931662bd44b20704f47b6c176491d4e47bf2af056ffb2558765fb081ca01", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-themes/theme-accessibility.md", "id": "9004b7f3768b6781dae24484c5aaad365bd21b12" } ], "categories": [] }, { "content": "\n## Introduction to WooCommerce CLI\n\nWooCommerce CLI (WC-CLI) offers an efficient way to manage WooCommerce (WC) stores via the command line. This tool is a part of WC from version 3.0.0 onwards and leverages the capabilities of the WC REST API. This means that most tasks achievable through the REST API can also be performed via the command line.\n\nFor documentation on WC versions 2.5 and 2.6's CLI, visit [Legacy CLI commands](https://github.com/woocommerce/woocommerce/wiki/Legacy-CLI-commands-(v2.6-and-below)).\n\n## About WP-CLI\n\nWP-CLI is a powerful set of command-line tools for managing WordPress installations. You can update plugins, configure multisite installations, and much more, all without using a web browser. For more information, visit the [official WP-CLI website](http://wp-cli.org/).\n\n## Getting Started with WooCommerce CLI\n\nTo begin using WC-CLI, ensure that you have WP-CLI installed and that you are running WooCommerce 3.0.0 or later. The CLI commands are accessed through the `wp wc` command. For a full list of available commands, type `wp wc` in your command-line interface.\n\nFor specific details on commands and their usage, refer to the Command Reference section. The How-to Guide provides a practical approach to common tasks, ideal for those new to WC-CLI or looking for quick solutions.\n\n## Additional Resources\n\nFor those interested in exploring further, the following resources might be helpful:\n\n- [WC REST API Documentation](https://developer.woocommerce.com/docs/category/rest-api/)\n- [Testing files for our CLI tests](https://github.com/woocommerce/woocommerce/tree/trunk/plugins/woocommerce/tests/cli/features)\n", "category_slug": "wc-cli", "category_title": "WooCommerce CLI", "posts": [ { "post_title": "WooCommerce CLI Examples", "menu_title": "Examples", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/wc-cli/wc-cli-examples.md", "hash": "c656a5e47b0b15091372170a94c9ba741b815c715a4b2c9b340a7dcd38b87b09", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/wc-cli/wc-cli-examples.md", "id": "d82ab48101db443ea9ed60f1deeaa89dad5d00cd" }, { "post_title": "WooCommerce CLI Commands", "menu_title": "Commands", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/wc-cli/wc-cli-commands.md", "hash": "a926ff45642539e0edc6b4e3dfeba4b31c2d01082700af132a2e8d56cfa25ec5", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/wc-cli/wc-cli-commands.md", "id": "73d6bc6468d23a9e93d16d574399105b143e43af" }, { "post_title": "How to Use WooCommerce CLI", "menu_title": "Using WooCommerce CLI", "tags": "how-to", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/wc-cli/using-wc-cli.md", "hash": "f25bbfa7c85f05878b5f569414f46bb11974d1e9cacf3a6f5d708c6141edf0cd", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/wc-cli/using-wc-cli.md", "id": "cfdf72385ec51c15ad9c57aa7a6d83f699416849", "links": { "./wc-cli-commands.md": "73d6bc6468d23a9e93d16d574399105b143e43af" } }, { "post_title": "WooCommerce CLI Frequently Asked Questions", "menu_title": "Frequently Asked Questions", "tags": "reference", "edit_url": "https://github.com/woocommerce/woocommerce/edit/trunk/docs/wc-cli/cli-faq.md", "hash": "cdf02b0a30693f3659f26a774953cb56c85e0319c9472447a4b9563ac3d9b2a4", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/wc-cli/cli-faq.md", "id": "86857f8924e3bd3fe6fdcc06cd8f4351f5e6f4c1" } ], "categories": [] } ], "hash": "8199f0d3c854474839300ed606f03f9f286ace35f65d7c47ffc6477762eaf51e" }