Add custom settings to the WooCommerce “Product data” meta box

/**
 * Adds "RRP" input field.
 *
 * @see https://wpcodebook.com/snippets/add-settings-to-woocommerce-product-data-meta-box/
 * @see https://github.com/woocommerce/woocommerce/blob/7.9.0/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-general.php#L73
 */
add_action( 'woocommerce_product_options_pricing', function () {
	global $product_object;
	woocommerce_wp_text_input(
		array(
			'id'        => 'rrp',
			'value'     => $product_object->get_meta( 'rrp', true, 'edit' ),
			'label'     => __( 'RRP' ) . ' (' . get_woocommerce_currency_symbol() . ')',
			'data_type' => 'price',
		)
	);
} );

/**
 * Saves "RRP" meta.
 *
 * @see https://wpcodebook.com/snippets/add-settings-to-woocommerce-product-data-meta-box/
 * @see https://github.com/woocommerce/woocommerce/blob/7.9.0/plugins/woocommerce/includes/admin/meta-boxes/class-wc-meta-box-product-data.php#L422
 */
add_action( 'woocommerce_admin_process_product_object', function ( $product ) {
	if ( isset( $_POST['rrp'] ) ) {
		$product->update_meta_data( 'rrp', wc_clean( wp_unslash( $_POST['rrp'] ) ) );
	}
} );

Similar actions to replace the woocommerce_product_options_pricing action in the snippet:

// General
woocommerce_product_options_external
woocommerce_product_options_pricing
woocommerce_product_options_downloads
woocommerce_product_options_tax
woocommerce_product_options_general_product_data

// Inventory
woocommerce_product_options_sku
woocommerce_product_options_stock
woocommerce_product_options_stock_fields
woocommerce_product_options_stock_status
woocommerce_product_options_sold_individually
woocommerce_product_options_inventory_product_data

// Shipping
woocommerce_product_options_dimensions
woocommerce_product_options_shipping
woocommerce_product_options_shipping_product_data

// Linked Products
woocommerce_product_options_related

// Attributes
woocommerce_product_options_attributes

// Advanced
woocommerce_product_options_reviews
woocommerce_product_options_advanced

Variations

/**
 * Adds variation "RRP" input field.
 *
 * @see https://wpcodebook.com/snippets/add-settings-to-woocommerce-product-data-meta-box/
 * @see https://github.com/woocommerce/woocommerce/blob/8.2.1/plugins/woocommerce/includes/admin/meta-boxes/views/html-variation-admin.php#L185
 */
add_action( 'woocommerce_variation_options_pricing', function ( $loop, $variation_data, $variation ) {
	$variation_object = wc_get_product( $variation->ID );
	woocommerce_wp_text_input(
		array(
			'id'            => "variable_rrp{$loop}",
			'name'          => "variable_rrp[{$loop}]",
			'value'         => $variation_object->get_meta( 'rrp', true, 'edit' ),
			'label'         => __( 'RRP' ) . ' (' . get_woocommerce_currency_symbol() . ')',
			'desc_tip'      => true,
			'description'   => __( 'Recommended retail price.' ),
			'data_type'     => 'price',
			'wrapper_class' => 'form-row form-row-full',
		)
	);
}, 10, 3 );

/**
 * Saves variation "RRP" meta.
 *
 * @see https://wpcodebook.com/snippets/add-settings-to-woocommerce-product-data-meta-box/
 * @see https://github.com/woocommerce/woocommerce/blob/8.2.1/plugins/woocommerce/includes/admin/meta-boxes/class-wc-meta-box-product-data.php#L564
 */
add_action( 'woocommerce_admin_process_variation_object', function ( $variation, $loop ) {
	if ( isset( $_POST['variable_rrp'][ $loop ] ) ) {
		$variation->update_meta_data( 'rrp', wc_clean( wp_unslash( $_POST['variable_rrp'][ $loop ] ) ) );
	}
}, 10, 2 );

Similar actions to replace the woocommerce_variation_options_pricing action in the snippet:

woocommerce_variation_options
woocommerce_variation_options_pricing
woocommerce_variation_options_inventory
woocommerce_variation_options_dimensions
woocommerce_variation_options_tax
woocommerce_variation_options_download
woocommerce_product_after_variable_attributes

Leave a Comment