Commit 8ea05f6fca9 for woocommerce

commit 8ea05f6fca968b3ed08f9092d7e1728fdfe46b8d
Author: Luigi Teschio <gigitux@gmail.com>
Date:   Fri May 29 09:37:31 2026 +0200

    Remove product editor template system feature flag (#65387)

diff --git a/packages/js/product-editor/changelog/remove-product-editor-template-system-flag b/packages/js/product-editor/changelog/remove-product-editor-template-system-flag
new file mode 100644
index 00000000000..a960a747e60
--- /dev/null
+++ b/packages/js/product-editor/changelog/remove-product-editor-template-system-flag
@@ -0,0 +1,4 @@
+Significance: patch
+Type: tweak
+
+Remove the disabled product editor template system feature flag.
diff --git a/packages/js/product-editor/src/blocks/product-fields/product-details-section-description/edit.tsx b/packages/js/product-editor/src/blocks/product-fields/product-details-section-description/edit.tsx
index 8c1d442b436..b48643482df 100644
--- a/packages/js/product-editor/src/blocks/product-fields/product-details-section-description/edit.tsx
+++ b/packages/js/product-editor/src/blocks/product-fields/product-details-section-description/edit.tsx
@@ -32,12 +32,10 @@ import { TRACKS_SOURCE } from '../../../constants';
 import { WPError, useErrorHandler } from '../../../hooks/use-error-handler';
 import type {
 	ProductEditorBlockEditProps,
-	ProductFormPostProps,
 	ProductTemplate,
 } from '../../../types';
 import { ProductDetailsSectionDescriptionBlockAttributes } from './types';
 import * as wooIcons from '../../../icons';
-import isProductFormTemplateSystemEnabled from '../../../utils/is-product-form-template-system-enabled';
 import { formatProductError } from '../../../utils/format-product-error';

 export function ProductDetailsSectionDescriptionBlockEdit( {
@@ -100,20 +98,6 @@ export function ProductDetailsSectionDescriptionBlockEdit( {
 	const [ unsupportedProductTemplate, setUnsupportedProductTemplate ] =
 		useState< ProductTemplate >();

-	// Pull the product templates from the store.
-	const productFormPosts = useSelect( ( sel ) => {
-		// Do not fetch product form posts if the feature is not enabled.
-		if ( ! isProductFormTemplateSystemEnabled() ) {
-			return [];
-		}
-
-		return (
-			sel( 'core' ).getEntityRecords( 'postType', 'product_form', {
-				per_page: -1,
-			} ) || []
-		);
-	}, [] ) as ProductFormPostProps[];
-
 	const { isSaving } = useSelect(
 		( select ) => {
 			const { isSavingEntityRecord } = select( 'core' );
@@ -382,22 +366,6 @@ export function ProductDetailsSectionDescriptionBlockEdit( {
 								) }
 							</MenuGroup>

-							{ isProductFormTemplateSystemEnabled() && (
-								<MenuGroup>
-									{ productFormPosts.map( ( formPost ) => (
-										<MenuItem
-											key={ formPost.id }
-											icon={ resolveIcon( 'external' ) }
-											info={ formPost.excerpt.raw }
-											iconPosition="left"
-											onClick={ onClose } // close the dropdown for now
-										>
-											{ formPost.title.rendered }
-										</MenuItem>
-									) ) }
-								</MenuGroup>
-							) }
-
 							{ unsupportedProductTemplates.length > 0 && (
 								<MenuGroup>
 									<Dropdown
diff --git a/packages/js/product-editor/src/components/block-editor/block-editor.tsx b/packages/js/product-editor/src/components/block-editor/block-editor.tsx
index 2cf06d6a7ab..2dcc2f6ec2f 100644
--- a/packages/js/product-editor/src/components/block-editor/block-editor.tsx
+++ b/packages/js/product-editor/src/components/block-editor/block-editor.tsx
@@ -3,7 +3,6 @@
  */
 import {
 	BlockInstance,
-	parse,
 	synchronizeBlocksWithTemplate,
 } from '@wordpress/blocks';
 import {
@@ -44,8 +43,7 @@ import { wooProductEditorUiStore } from '../../store/product-editor-ui';
 import { ProductEditorSettings } from '../editor';
 import { BlockEditorProps } from './types';
 import { LoadingState } from './loading-state';
-import type { ProductFormPostProps, ProductTemplate } from '../../types';
-import isProductFormTemplateSystemEnabled from '../../utils/is-product-form-template-system-enabled';
+import type { ProductTemplate } from '../../types';

 const PluginArea = lazy( () =>
 	import( '@wordpress/plugins' ).then( ( module ) => ( {
@@ -81,10 +79,6 @@ export function BlockEditor( {
 	productId,
 	setIsEditorLoading,
 }: BlockEditorProps ) {
-	const [ selectedProductFormId, setSelectedProductFormId ] = useState<
-		number | null
-	>( null );
-
 	useConfirmUnsavedProductChanges( postType );

 	/**
@@ -212,24 +206,6 @@ export function BlockEditor( {
 		{ id: productId !== -1 ? productId : 0 }
 	) as [ BlockInstance[], BlockChangeHandler, BlockChangeHandler ];

-	// Pull the product templates from the store.
-	const productForms = useSelect( ( sel ) => {
-		return (
-			sel( 'core' ).getEntityRecords( 'postType', 'product_form', {
-				per_page: -1,
-			} ) || []
-		);
-	}, [] ) as ProductFormPostProps[];
-
-	// Set the default product form template ID.
-	useEffect( () => {
-		if ( ! productForms.length ) {
-			return;
-		}
-
-		setSelectedProductFormId( productForms[ 0 ].id );
-	}, [ productForms ] );
-
 	const isEditorLoading =
 		! settings ||
 		! layoutTemplate ||
@@ -238,28 +214,6 @@ export function BlockEditor( {
 		productId === -1 ||
 		! hasResolved;

-	const productFormTemplate = useMemo(
-		function pickAndParseTheProductFormTemplate() {
-			if (
-				! isProductFormTemplateSystemEnabled() ||
-				! selectedProductFormId
-			) {
-				return undefined;
-			}
-
-			const productFormPost = productForms.find(
-				( form ) => form.id === selectedProductFormId
-			);
-
-			if ( productFormPost ) {
-				return parse( productFormPost.content.raw );
-			}
-
-			return undefined;
-		},
-		[ productForms, selectedProductFormId ]
-	);
-
 	useLayoutEffect(
 		function setupEditor() {
 			if ( isEditorLoading ) {
@@ -272,13 +226,7 @@ export function BlockEditor( {
 				layoutTemplate.blockTemplates
 			);

-			/*
-			 * If the product form template is not available, use the block instances.
-			 * ToDo: Remove this fallback once the product form template is stable/available.
-			 */
-			const editorTemplate = blockInstances ?? productFormTemplate;
-
-			onChange( editorTemplate, {} );
+			onChange( blockInstances, {} );

 			dispatch( 'core/editor' ).updateEditorSettings( {
 				...settings,
@@ -294,7 +242,6 @@ export function BlockEditor( {
 			layoutTemplate,
 			settings,
 			productTemplate,
-			productFormTemplate,
 			productId,
 		]
 	);
diff --git a/packages/js/product-editor/src/types.ts b/packages/js/product-editor/src/types.ts
index 5e1a2560d11..9dc455e259b 100644
--- a/packages/js/product-editor/src/types.ts
+++ b/packages/js/product-editor/src/types.ts
@@ -49,43 +49,3 @@ export interface Taxonomy {
 export interface TaxonomyMetadata {
 	hierarchical: boolean;
 }
-
-export type ProductFormPostProps = {
-	id: number;
-	date: string;
-	date_gmt: string;
-	guid: {
-		rendered: string;
-		raw: string;
-	};
-	modified: string;
-	modified_gmt: string;
-	password: string;
-	slug: string;
-	status: 'publish' | 'future' | 'draft' | 'pending' | 'private';
-	type: 'product_form';
-	link: string;
-	title: {
-		raw: string;
-		rendered: string;
-	};
-	content: {
-		raw: string;
-		rendered: string;
-		protected: false;
-		block_version: number;
-	};
-	excerpt: {
-		raw: string;
-		rendered: string;
-		protected: boolean;
-	};
-	featured_media: number;
-	comment_status: 'open' | 'closed';
-	ping_status: 'closed' | 'open';
-	template: '';
-	meta: [];
-	permalink_template: string;
-	generated_slug: string;
-	class_list: string[];
-};
diff --git a/packages/js/product-editor/src/utils/is-product-form-template-system-enabled.ts b/packages/js/product-editor/src/utils/is-product-form-template-system-enabled.ts
deleted file mode 100644
index 5645e6149b0..00000000000
--- a/packages/js/product-editor/src/utils/is-product-form-template-system-enabled.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-export default function isProductFormTemplateSystemEnabled() {
-	return !! window.wcAdminFeatures?.[ 'product-editor-template-system' ];
-}
diff --git a/plugins/woocommerce/changelog/remove-product-editor-template-system-flag b/plugins/woocommerce/changelog/remove-product-editor-template-system-flag
new file mode 100644
index 00000000000..a960a747e60
--- /dev/null
+++ b/plugins/woocommerce/changelog/remove-product-editor-template-system-flag
@@ -0,0 +1,4 @@
+Significance: patch
+Type: tweak
+
+Remove the disabled product editor template system feature flag.
diff --git a/plugins/woocommerce/client/admin/config/core.json b/plugins/woocommerce/client/admin/config/core.json
index b4cf5e4a387..395517b6dc5 100644
--- a/plugins/woocommerce/client/admin/config/core.json
+++ b/plugins/woocommerce/client/admin/config/core.json
@@ -40,7 +40,6 @@
 		"wc-pay-welcome-page": true,
 		"async-product-editor-category-field": false,
 		"launch-your-store": true,
-		"product-editor-template-system": false,
 		"use-wp-horizon": false,
 		"rest-api-v4": false,
 		"order-detail-redesign": false,
diff --git a/plugins/woocommerce/client/admin/config/development.json b/plugins/woocommerce/client/admin/config/development.json
index 756db8d4b46..7f42945fc4b 100644
--- a/plugins/woocommerce/client/admin/config/development.json
+++ b/plugins/woocommerce/client/admin/config/development.json
@@ -40,7 +40,6 @@
 		"wc-pay-welcome-page": true,
 		"async-product-editor-category-field": true,
 		"launch-your-store": true,
-		"product-editor-template-system": false,
 		"use-wp-horizon": false,
 		"rest-api-v4": false,
 		"order-detail-redesign": false,
diff --git a/plugins/woocommerce/includes/class-wc-post-types.php b/plugins/woocommerce/includes/class-wc-post-types.php
index 7efed18e73a..dec6caf8e33 100644
--- a/plugins/woocommerce/includes/class-wc-post-types.php
+++ b/plugins/woocommerce/includes/class-wc-post-types.php
@@ -12,7 +12,6 @@ defined( 'ABSPATH' ) || exit;

 use Automattic\WooCommerce\Enums\OrderInternalStatus;
 use Automattic\WooCommerce\Internal\DataStores\Orders\CustomOrdersTableController;
-use Automattic\WooCommerce\Admin\Features\Features;

 /**
  * Post types Class.
@@ -406,73 +405,6 @@ class WC_Post_Types {
 			)
 		);

-		// Register the product form post type when the feature is enabled.
-		if ( Features::is_enabled( 'product-editor-template-system' ) ) {
-			register_post_type(
-				'product_form',
-				/**
-				 * Allow developers to customize the product form post type registration arguments.
-				 *
-				 * @since 9.1.0
-				 * @param array $args The default post type registration arguments.
-				 */
-				apply_filters(
-					'woocommerce_register_post_type_product_form',
-					array(
-						'labels'
-						=> array(
-							'name'                  => __( 'Product Forms', 'woocommerce' ),
-							'singular_name'         => __( 'Product Form', 'woocommerce' ),
-							'all_items'             => __( 'All Product Form', 'woocommerce' ),
-							'menu_name'             => _x( 'Product Forms', 'Admin menu name', 'woocommerce' ),
-							'add_new'               => __( 'Add New', 'woocommerce' ),
-							'add_new_item'          => __( 'Add new product form', 'woocommerce' ),
-							'edit'                  => __( 'Edit', 'woocommerce' ),
-							'edit_item'             => __( 'Edit product form', 'woocommerce' ),
-							'new_item'              => __( 'New product form', 'woocommerce' ),
-							'view_item'             => __( 'View product form', 'woocommerce' ),
-							'view_items'            => __( 'View product forms', 'woocommerce' ),
-							'search_items'          => __( 'Search product forms', 'woocommerce' ),
-							'not_found'             => __( 'No product forms found', 'woocommerce' ),
-							'not_found_in_trash'    => __( 'No product forms found in trash', 'woocommerce' ),
-							'parent'                => __( 'Parent product form', 'woocommerce' ),
-							'featured_image'        => __( 'Product form image', 'woocommerce' ),
-							'set_featured_image'    => __( 'Set product form image', 'woocommerce' ),
-							'remove_featured_image' => __( 'Remove product form image', 'woocommerce' ),
-							'use_featured_image'    => __( 'Use as product form image', 'woocommerce' ),
-							'insert_into_item'      => __( 'Insert into product form', 'woocommerce' ),
-							'uploaded_to_this_item' => __( 'Uploaded to this product form', 'woocommerce' ),
-							'filter_items_list'     => __( 'Filter product forms', 'woocommerce' ),
-							'items_list_navigation' => __( 'Product forms navigation', 'woocommerce' ),
-							'items_list'            => __( 'Product forms list', 'woocommerce' ),
-							'item_link'             => __( 'Product form Link', 'woocommerce' ),
-							'item_link_description' => __( 'A link to a product form.', 'woocommerce' ),
-						),
-						'description'         => __( 'This is where you can set up product forms for various product types in your dashboard.', 'woocommerce' ),
-						'public'              => true,
-						'menu_icon'           => 'dashicons-forms',
-						'capability_type'     => 'product',
-						'map_meta_cap'        => true,
-						'publicly_queryable'  => true,
-						'hierarchical'        => false, // Hierarchical causes memory issues - WP loads all records!
-						'rewrite'             => $permalinks['product_rewrite_slug'] ? array(
-							'slug'       => $permalinks['product_rewrite_slug'],
-							'with_front' => false,
-							'feeds'      => true,
-						) : false,
-						'query_var'           => true,
-						'supports'            => $supports,
-						'has_archive'         => $has_archive,
-						'show_in_rest'        => true,
-						'show_ui'             => true,
-						'show_in_menu'        => true,
-						'exclude_from_search' => true,
-						'show_in_nav_menus'   => false,
-					)
-				)
-			);
-		}
-
 		register_post_type(
 			'product_variation',
 			apply_filters(
diff --git a/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/Init.php b/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/Init.php
index 071bbe13bff..7b10ca46402 100644
--- a/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/Init.php
+++ b/plugins/woocommerce/src/Admin/Features/ProductBlockEditor/Init.php
@@ -7,7 +7,6 @@ declare(strict_types = 1);

 namespace Automattic\WooCommerce\Admin\Features\ProductBlockEditor;

-use Automattic\WooCommerce\Admin\Features\Features;
 use Automattic\WooCommerce\Admin\Features\ProductBlockEditor\ProductTemplate;
 use Automattic\WooCommerce\Admin\PageController;
 use Automattic\WooCommerce\Enums\ProductType;
@@ -418,12 +417,6 @@ class Init {
 		);

 		$this->redirection_controller->set_product_templates( $this->product_templates );
-
-		// PFT: Initialize the product form controller.
-		if ( Features::is_enabled( 'product-editor-template-system' ) ) {
-			$product_form_controller = new ProductFormsController();
-			$product_form_controller->init();
-		}
 	}

 	/**