diff --git a/docs/docs-manifest.json b/docs/docs-manifest.json index 321af2cb17c..4fc2af1edbf 100644 --- a/docs/docs-manifest.json +++ b/docs/docs-manifest.json @@ -676,7 +676,7 @@ "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": "4e42c13decac01baccb57fa4f7542c3f14347ad60a53272a328bbc290e2a2625", + "hash": "8b6102ecab0ceda36afe6d7b2b12fd9d1e62c893ed7409d79cc15da8fc1e76c8", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/product-editor-development/product-editor-extensibility-guidelines.md", "id": "a837eb947d31fcff3c6e1f775926ba5eb13cd790" }, @@ -1123,7 +1123,7 @@ "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": "798c7cf96dd1a88be7a7763dae751dafa81acf0f0fba65a868d5ebe875ed75ea", + "hash": "70a01fcd0096461538f9071ea19c8c335f186c922b48e8c88a30fc874ce1cd81", "url": "https://raw.githubusercontent.com/woocommerce/woocommerce/trunk/docs/ux-guidelines-product-editor/product-editor-form-groups.md", "id": "03000dc9341d0d55a113c506e6e0bc87c98e3e1e", "links": { @@ -1266,5 +1266,5 @@ "categories": [] } ], - "hash": "556bb0eab0e99ed385dbc32b96008add0b64f01888d4aae6f7051345aae045cc" + "hash": "a0932041c53c24ecf0a04c1163d796fbcd204a8e940fa8664fadea0c4bdea153" } \ No newline at end of file diff --git a/docs/product-editor-development/product-editor-extensibility-guidelines.md b/docs/product-editor-development/product-editor-extensibility-guidelines.md index 9413465d685..01e695211c4 100644 --- a/docs/product-editor-development/product-editor-extensibility-guidelines.md +++ b/docs/product-editor-development/product-editor-extensibility-guidelines.md @@ -11,31 +11,31 @@ For this reason, the new product form features groups (tabs) that correspond wit There 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. -- Product form - - Group - - Section - - Subsection - - Field - - Field - - ... - - Subsection - - Field - - Field - - ... - - ... - - Section - - Subsection - - Field - - Field - - ... - - Subsection - - Field - - Field - - ... - - ... - - ... - - Group - ... +- Product form + - Group + - Section + - Subsection + - Field + - Field + - ... + - Subsection + - Field + - Field + - ... + - ... + - Section + - Subsection + - Field + - Field + - ... + - Subsection + - Field + - Field + - ... + - ... + - ... + - Group + ... Like everything in the new product form, each extension point is a separate block. For the sake of a consistent and smooth user experience, try to integrate your extension into an existing group or section before creating a new one. @@ -47,12 +47,12 @@ The new product form consists of groups currently displayed as tabs. Each is a s If a tab doesn't contain any sections, it won't be shown to merchants. -- **General:** Essential product information, including the name, image, and description. This tab is also where key features live for non-standard product types: downloads, groups, links, etc. -- **Organization:** This tab contains all the data used to organize and categorize product information: from categories to attributes. Best for extensions that provide new ways to describe products, e.g., product identifiers, statuses, special tags, etc. -- **Pricing:** List price, sale price, and tax options. Best for extensions that allow merchants to set up additional payment methods (e.g., Subscriptions) or add advanced pricing schemes, like wholesale. -- **Inventory:** Basic inventory settings and stock management options. Here merchants come to update the quantity at hand or mark the product as out of stock. Best for extensions that enable conditional inventory management, dropshipping options, or various restrictions. -- **Shipping:** All the information merchants need to enter to present customers with accurate shipping rates at checkout. Best for physical product details that may impact shipping (e.g. capacity or volume), additional shipping carrier settings, or custom shipping options. -- **Variations:** Contains variation options and product variations. +- **General:** Essential product information, including the name, image, and description. This tab is also where key features live for non-standard product types: downloads, groups, links, etc. +- **Organization:** This tab contains all the data used to organize and categorize product information: from categories to attributes. Best for extensions that provide new ways to describe products, e.g., product identifiers, statuses, special tags, etc. +- **Pricing:** Regular price, sale price, and tax options. Best for extensions that allow merchants to set up additional payment methods (e.g., Subscriptions) or add advanced pricing schemes, like wholesale. +- **Inventory:** Basic inventory settings and stock management options. Here merchants come to update the quantity at hand or mark the product as out of stock. Best for extensions that enable conditional inventory management, dropshipping options, or various restrictions. +- **Shipping:** All the information merchants need to enter to present customers with accurate shipping rates at checkout. Best for physical product details that may impact shipping (e.g. capacity or volume), additional shipping carrier settings, or custom shipping options. +- **Variations:** Contains variation options and product variations. Custom product types manage the visibility of the default groups and add new ones. This is particularly useful if a custom product has a unique structure and requires extra information that isn't included in the default groups. @@ -68,11 +68,11 @@ See the guide below for some practical examples. #### Product code extension -##### What it does +##### What code extension does The extension allows merchants to enter a product identifier, such as ISBN, EAN, or UPC. -##### Our recommendations +##### Our recommendations about code extension The identifier is a single piece of information that helps merchants describe and categorize the product across their store and other sales channels. It's best suited to be added as a field in the Product catalog section in the Organization group. @@ -80,11 +80,11 @@ The identifier is a single piece of information that helps merchants describe an #### Ticket extension -##### What it does +##### What ticket extension does Merchants can set up and sell tickets with advanced settings, such as unique input fields, expiration dates, restrictions, tiers, and more. -##### Our recommendations +##### Our recommendations about ticket extension With so much advanced functionality, the plugin would best register a new product type and define the structure and appearance of the product form. This could include the tabs at the top of the screen, the subgroups and sections inside, and the default values. @@ -96,24 +96,24 @@ With so much advanced functionality, the plugin would best register a new produc Fields are the simplest type of extension. They let users add extra product information, replace or manage the visibility of other fields assigned to a specific product type, and control the contents of other fields. -**What they *are* for:** +**What they _are_ for:** -- Single-field, supplementary features -- Showing or hiding form elements depending on specific conditions +- Single-field, supplementary features +- Showing or hiding form elements depending on specific conditions -**What they *aren't* for:** +**What they _aren't_ for:** -- Multi-field or multi-step forms -- Complex tables, e.g., permissions, restrictions, shipping volumes, etc -- Embedded third-party experiences and websites +- Multi-field or multi-step forms +- Complex tables, e.g., permissions, restrictions, shipping volumes, etc +- Embedded third-party experiences and websites Field extensions should always be logically related to the form area they are in. For example, if you're building a dropshipping extension, your warehouse selection field should live in the first section of the Inventory group. To ensure an excellent experience for our merchants, we do not recommend placing it in a separate group, section, or subsection. **Other use cases include:** -- Adding extra product details, f.e. volume under Shipping -- Entering custom data, f.e. color or date and time -- Selecting from a third-party system, f.e. warranty type +- Adding extra product details, f.e. volume under Shipping +- Entering custom data, f.e. color or date and time +- Selecting from a third-party system, f.e. warranty type ### Subsections @@ -121,17 +121,17 @@ Field extensions should always be logically related to the form area they are in Subsections add extra fields to existing form groups. They are small forms with a low to medium level of complexity. This interface location works best for extensions that add extra features that build off an existing Woo functionality. -**What they *are* for:** +**What they _are_ for:** -- Relevant features that can be crucial to merchants' product creation flow -- 2-5 field forms with simple functionality, e.g., dimensions or tax settings -- Lists of items, e.g., attachments, channels, or accounts +- Relevant features that can be crucial to merchants' product creation flow +- 2-5 field forms with simple functionality, e.g., dimensions or tax settings +- Lists of items, e.g., attachments, channels, or accounts -**What they *aren't* for:** +**What they _aren't_ for:** -- Simple extensions with 1-2 fields -- Multi-step forms and complex tables -- Read-only descriptions, setup guides, and advertisements +- Simple extensions with 1-2 fields +- Multi-step forms and complex tables +- Read-only descriptions, setup guides, and advertisements **Example:** @@ -139,9 +139,9 @@ If you're developing an extension that allows merchants to upload 360 images or **Other use cases include:** -- Adding extra product details, e.g., measurements under Shipping -- Setting up social channels in the Visibility section in the General tab -- Changing the VAT tax settings in the Pricing tab +- Adding extra product details, e.g., measurements under Shipping +- Setting up social channels in the Visibility section in the General tab +- Changing the VAT tax settings in the Pricing tab ### Sections @@ -149,17 +149,17 @@ If you're developing an extension that allows merchants to upload 360 images or Sections are significant parts of the form that may consist of multiple subsections and fields. They should be used sparsely throughout the form, so merchants are not overwhelmed with options while filling out the information about their products. -**What they *are* for:** +**What they _are_ for:** -- Complex forms with multiple fields, tables, and list items -- Standalone features that don't build off of anything else -- Extensions that rely on user-created items, such as tags or attributes +- Complex forms with multiple fields, tables, and list items +- Standalone features that don't build off of anything else +- Extensions that rely on user-created items, such as tags or attributes -**What they *aren't* for:** +**What they _aren't_ for:** -- Simple extensions with 1-2 fields -- Read-only descriptions, setup guides, and advertisements -- Multi-step setup wizards and external content +- Simple extensions with 1-2 fields +- Read-only descriptions, setup guides, and advertisements +- Multi-step setup wizards and external content **Example:** @@ -167,11 +167,11 @@ If you're working on an extension that allows merchants to offer discounts based **Other use cases include:** -- Adding product labels with a robust interactive preview -- Managing product warranty options -- Creating product packages and bundles +- Adding product labels with a robust interactive preview +- Managing product warranty options +- Creating product packages and bundles -### Top bar (header) *(future feature)* +### Top bar (header) _(future feature)_ ![Top bar example](https://developer.woocommerce.com/wp-content/uploads/2023/12/product-editor-ext-guidelines-top-bar.png) @@ -181,13 +181,13 @@ Each top bar extension has its unique icon in the top navigation bar. Note that For example, top bar extensions can be used to: -- Provide product scheduling or extra visibility options, -- Let merchants view additional SEO metadata -- Offer easy access to documentation or step-by-step guides +- Provide product scheduling or extra visibility options, +- Let merchants view additional SEO metadata +- Offer easy access to documentation or step-by-step guides Depending on their roles, top bar extensions can be displayed in either a **popover** or a **modal**. -### Dialog extensions *(future feature)* +### Dialog extensions _(future feature)_ ![Dialog example](https://developer.woocommerce.com/wp-content/uploads/2023/12/product-editor-ext-guidelines-dialog-extensions.png) @@ -195,23 +195,23 @@ Dialog extensions differ from other extensions as they are unrelated to any sect Dialogs can have different sizes (small, medium, large, or custom) and trigger locations (text or icon button anywhere in the form or in the form's top bar). -**What they *are* for:** +**What they _are_ for:** -- Focused experiences that require taking over most of the screen -- Advanced configuration and setup flows -- Dedicated content embedded from a third-party service +- Focused experiences that require taking over most of the screen +- Advanced configuration and setup flows +- Dedicated content embedded from a third-party service -**What they *aren't* for:** +**What they _aren't_ for:** -- Single-field features or simple settings screens -- Small functionalities that could fit within the form -- Onboarding experiences, product demos, and advertisements +- Single-field features or simple settings screens +- Small functionalities that could fit within the form +- Onboarding experiences, product demos, and advertisements **Example use cases:** -- Third-party fulfillment, warehousing, and accounting service integration -- Robust image editing tool with complex interactions -- Media-heavy knowledge base with plenty of videos and interactive tutorials +- Third-party fulfillment, warehousing, and accounting service integration +- Robust image editing tool with complex interactions +- Media-heavy knowledge base with plenty of videos and interactive tutorials ## Custom product types @@ -219,15 +219,14 @@ Custom product types allow you to design a custom form and completely control it With custom product types, you can: -- Add, hide, and reorder groups -- Add and hide sections within a group -- Add and hide subsections and fields - - Includes core fields - - Can be set up conditionally based on a custom field's value +- Add, hide, and reorder groups +- Add and hide sections within a group +- Add and hide subsections and fields + - Includes core fields + - Can be set up conditionally based on a custom field's value Custom product types include niche and specific use cases, such as bookings, tickets, gift cards, rentals, etc. Here's when we suggest you should consider creating a custom product type: -- Your extension consists of several different form sections scattered across several different tabs -- Using just your extension, merchants can completely a product -- You want to help merchants create products faster and automate some of their work - +- Your extension consists of several different form sections scattered across several different tabs +- Using just your extension, merchants can completely a product +- You want to help merchants create products faster and automate some of their work diff --git a/docs/ux-guidelines-product-editor/product-editor-form-groups.md b/docs/ux-guidelines-product-editor/product-editor-form-groups.md index bbf6a5668ff..f84ebaf0a78 100644 --- a/docs/ux-guidelines-product-editor/product-editor-form-groups.md +++ b/docs/ux-guidelines-product-editor/product-editor-form-groups.md @@ -9,12 +9,12 @@ The new product form consists of groups currently displayed as tabs. Each is a s If a tab doesn't contain any sections, it won't be shown to merchants. -- **General:** Essential product information, including the name, image, and description. This tab is also where key features live for non-standard product types: downloads, groups, links, etc. -- **Organization:** This tab contains all the data used to organize and categorize product information: from categories to attributes. Best for extensions that provide new ways to describe products, e.g., product identifiers, statuses, special tags, etc. -- **Pricing:** List price, sale price, and tax options. Best for extensions that allow merchants to set up additional payment methods (e.g., Subscriptions) or add advanced pricing schemes, like wholesale. -- **Inventory:** Basic inventory settings and stock management options. Here merchants come to update the quantity at hand or mark the product as out of stock. Best for extensions that enable conditional inventory management, dropshipping options, or various restrictions. -- **Shipping:** All the information merchants need to enter to present customers with accurate shipping rates at checkout. Best for physical product details that may impact shipping (e.g. capacity or volume), additional shipping carrier settings, or custom shipping options. -- **Variations:** Contains variation options and product variations. +- **General:** Essential product information, including the name, image, and description. This tab is also where key features live for non-standard product types: downloads, groups, links, etc. +- **Organization:** This tab contains all the data used to organize and categorize product information: from categories to attributes. Best for extensions that provide new ways to describe products, e.g., product identifiers, statuses, special tags, etc. +- **Pricing:** Regular price, sale price, and tax options. Best for extensions that allow merchants to set up additional payment methods (e.g., Subscriptions) or add advanced pricing schemes, like wholesale. +- **Inventory:** Basic inventory settings and stock management options. Here merchants come to update the quantity at hand or mark the product as out of stock. Best for extensions that enable conditional inventory management, dropshipping options, or various restrictions. +- **Shipping:** All the information merchants need to enter to present customers with accurate shipping rates at checkout. Best for physical product details that may impact shipping (e.g. capacity or volume), additional shipping carrier settings, or custom shipping options. +- **Variations:** Contains variation options and product variations. Custom product types manage the visibility of the default groups and add new ones. This is particularly useful if a custom product has a unique structure and requires extra information that isn't included in the default groups. diff --git a/packages/js/product-editor/changelog/enhancement-45883 b/packages/js/product-editor/changelog/enhancement-45883 new file mode 100644 index 00000000000..b32a3b3401f --- /dev/null +++ b/packages/js/product-editor/changelog/enhancement-45883 @@ -0,0 +1,4 @@ +Significance: minor +Type: enhancement + +Replace copy: List Price to Regular Price diff --git a/packages/js/product-editor/src/blocks/product-fields/regular-price/edit.tsx b/packages/js/product-editor/src/blocks/product-fields/regular-price/edit.tsx index 5353a4160ef..75bf62fda09 100644 --- a/packages/js/product-editor/src/blocks/product-fields/regular-price/edit.tsx +++ b/packages/js/product-editor/src/blocks/product-fields/regular-price/edit.tsx @@ -68,7 +68,7 @@ export function Edit( { if ( listPrice ) { if ( listPrice < 0 ) { return __( - 'List price must be greater than or equals to zero.', + 'Regular price must be greater than or equals to zero.', 'woocommerce' ); } @@ -77,7 +77,7 @@ export function Edit( { listPrice <= Number.parseFloat( salePrice ) ) { return __( - 'List price must be greater than the sale price.', + 'Regular price must be greater than the sale price.', 'woocommerce' ); } diff --git a/packages/js/product-editor/src/blocks/product-fields/sale-price/edit.tsx b/packages/js/product-editor/src/blocks/product-fields/sale-price/edit.tsx index 58cab6e232c..4af2067ed09 100644 --- a/packages/js/product-editor/src/blocks/product-fields/sale-price/edit.tsx +++ b/packages/js/product-editor/src/blocks/product-fields/sale-price/edit.tsx @@ -70,7 +70,7 @@ export function Edit( { listPrice <= Number.parseFloat( salePrice ) ) { return __( - 'Sale price must be lower than the list price.', + 'Sale price must be lower than the regular price.', 'woocommerce' ); } diff --git a/packages/js/product-editor/src/components/variations-table/pricing-menu-item/pricing-menu-item.tsx b/packages/js/product-editor/src/components/variations-table/pricing-menu-item/pricing-menu-item.tsx index 84941404897..999d5a38948 100644 --- a/packages/js/product-editor/src/components/variations-table/pricing-menu-item/pricing-menu-item.tsx +++ b/packages/js/product-editor/src/components/variations-table/pricing-menu-item/pricing-menu-item.tsx @@ -87,7 +87,7 @@ export function PricingMenuItem( { ) } renderContent={ () => (
- + - { __( 'Increase list price', 'woocommerce' ) } + { __( 'Increase regular price', 'woocommerce' ) } { @@ -178,7 +178,7 @@ export function PricingMenuItem( { onClose(); } } > - { __( 'Decrease list price', 'woocommerce' ) } + { __( 'Decrease regular price', 'woocommerce' ) } diff --git a/packages/js/product-editor/src/components/variations-table/set-list-price-menu-item/set-list-price-menu-item.tsx b/packages/js/product-editor/src/components/variations-table/set-list-price-menu-item/set-list-price-menu-item.tsx index 7f894653ec5..935237cb622 100644 --- a/packages/js/product-editor/src/components/variations-table/set-list-price-menu-item/set-list-price-menu-item.tsx +++ b/packages/js/product-editor/src/components/variations-table/set-list-price-menu-item/set-list-price-menu-item.tsx @@ -46,7 +46,7 @@ export function SetListPriceMenuItem( { onClose(); } } > - { __( 'Set list price', 'woocommerce' ) } + { __( 'Set regular price', 'woocommerce' ) } ); } diff --git a/packages/js/product-editor/src/components/variations-table/variation-actions-menus/test/variation-actions.test.tsx b/packages/js/product-editor/src/components/variations-table/variation-actions-menus/test/variation-actions.test.tsx index f02e5bcabfd..79a5abdc829 100644 --- a/packages/js/product-editor/src/components/variations-table/variation-actions-menus/test/variation-actions.test.tsx +++ b/packages/js/product-editor/src/components/variations-table/variation-actions-menus/test/variation-actions.test.tsx @@ -72,7 +72,7 @@ describe( 'MultipleUpdateMenu', () => { ); fireEvent.click( getByRole( 'button', { name: 'Quick update' } ) ); expect( queryByText( 'Update stock' ) ).toBeInTheDocument(); - expect( queryByText( 'Set list price' ) ).toBeInTheDocument(); + expect( queryByText( 'Set regular price' ) ).toBeInTheDocument(); expect( queryByText( 'Toggle visibility' ) ).toBeInTheDocument(); } ); diff --git a/plugins/woocommerce-admin/client/products/fills/pricing-section/pricing-field-list.tsx b/plugins/woocommerce-admin/client/products/fills/pricing-section/pricing-field-list.tsx index 01cb22e5079..bad22842e38 100644 --- a/plugins/woocommerce-admin/client/products/fills/pricing-section/pricing-field-list.tsx +++ b/plugins/woocommerce-admin/client/products/fills/pricing-section/pricing-field-list.tsx @@ -98,7 +98,7 @@ export const PricingListField: React.FC< PricingListFieldProps > = ( { 10, 'attributes' => array( 'name' => 'regular_price', - 'label' => __( 'List price', 'woocommerce' ), + 'label' => __( 'Regular price', 'woocommerce' ), 'help' => $is_calc_taxes_enabled ? null : sprintf( /* translators: %1$s: store settings link opening tag. %2$s: store settings link closing tag.*/ __( 'Per your %1$sstore settings%2$s, taxes are not enabled.', 'woocommerce' ),