/**
* Adds "GTIN" admin input field to the "Product data" meta box > "Inventory" tab.
*
* @see https://wpcodebook.com/snippets/add-gtin-ean-upc-to-woocommerce-products-with-php/
* @see https://github.com/woocommerce/woocommerce/blob/7.9.0/plugins/woocommerce/includes/admin/meta-boxes/views/html-product-data-inventory.php#L32
* @see https://github.com/woocommerce/woocommerce/blob/7.9.0/plugins/woocommerce/includes/admin/wc-meta-box-functions.php#L23
*/
add_action( 'woocommerce_product_options_sku', function () {
global $product_object;
woocommerce_wp_text_input(
array(
'id' => 'gtin',
'value' => $product_object->get_meta( 'gtin', true, 'edit' ),
'label' => __( 'GTIN' ),
)
);
} );
/**
* Saves "GTIN" admin input field in product meta.
*
* @see https://wpcodebook.com/snippets/add-gtin-ean-upc-to-woocommerce-products-with-php/
* @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['gtin'] ) ) {
$product->update_meta_data( 'gtin', wc_clean( wp_unslash( $_POST['gtin'] ) ) );
}
} );
/**
* Displays GTIN in the product's meta section on the frontend.
*
* @see https://wpcodebook.com/snippets/add-gtin-ean-upc-to-woocommerce-products-with-php/
* @see https://github.com/woocommerce/woocommerce/blob/7.9.0/plugins/woocommerce/templates/single-product/meta.php#L26
*/
add_action( 'woocommerce_product_meta_start', function () {
global $product;
if ( $gtin = $product->get_meta( 'gtin' ) ) {
printf( '<span class="gtin">%s: %s</span>', esc_html__( 'GTIN' ), $gtin );
}
} );
/**
* Adds GTIN to product structured data.
*
* @see https://wpcodebook.com/snippets/add-gtin-ean-upc-to-woocommerce-products-with-php/
* @see https://github.com/woocommerce/woocommerce/blob/7.9.0/plugins/woocommerce/includes/class-wc-structured-data.php#L334
*/
add_filter( 'woocommerce_structured_data_product', function ( $markup, $product ) {
if ( '' !== ( $gtin = $product->get_meta( 'gtin' ) ) ) {
$markup['gtin'] = $gtin;
}
return $markup;
}, 10, 2 );