* REST API Product Form Controller
* Handles requests to retrieve product form data.
namespace Automattic\WooCommerce\Admin\API;
use Automattic\WooCommerce\Internal\Admin\ProductForm\FormFactory;
defined( 'ABSPATH' ) || exit;
* ProductForm Controller.
* @extends WC_REST_Data_Controller
class ProductForm extends \WC_REST_Data_Controller {
protected $namespace = 'wc-admin';
protected $rest_base = 'product-form';
public function register_routes() {
'methods' => \WP_REST_Server::READABLE,
'callback' => array( $this, 'get_form_config' ),
'permission_callback' => array( $this, 'get_product_form_permission_check' ),
'schema' => array( $this, 'get_public_item_schema' ),
'/' . $this->rest_base . '/fields',
'methods' => \WP_REST_Server::READABLE,
'callback' => array( $this, 'get_fields' ),
'permission_callback' => array( $this, 'get_product_form_permission_check' ),
'schema' => array( $this, 'get_public_item_schema' ),
* Check if a given request has access to manage woocommerce.
* @param WP_REST_Request $request Full details about the request.
* @return WP_Error|boolean
public function get_product_form_permission_check( $request ) {
if ( ! current_user_can( 'manage_woocommerce' ) ) {
return new \WP_Error( 'woocommerce_rest_cannot_create', __( 'Sorry, you are not allowed to retrieve product form data.', 'woocommerce' ), array( 'status' => rest_authorization_required_code() ) );
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error
public function get_fields( $request ) {
return $field->get_json();
FormFactory::get_fields()
return rest_ensure_response( $json );
* @param WP_REST_Request $request Full details about the request.
* @return WP_REST_Response|WP_Error
public function get_form_config( $request ) {
return $field->get_json();
FormFactory::get_fields()
$subsections = array_map(
function( $subsection ) {
return $subsection->get_json();
FormFactory::get_subsections()
return $section->get_json();
FormFactory::get_sections()
return rest_ensure_response(
'subsections' => $subsections,