Skip to content

Instantly share code, notes, and snippets.

@delvinkrasniqi
Created February 20, 2023 19:08
Show Gist options
  • Save delvinkrasniqi/3bf4d0652d4d6b0b22afa3d291635263 to your computer and use it in GitHub Desktop.
Save delvinkrasniqi/3bf4d0652d4d6b0b22afa3d291635263 to your computer and use it in GitHub Desktop.
/**
* @snippet Add an input field to products - WooCommerce
*/
// -----------------------------------------
// 1. Show custom input field above Add to Cart
add_action( 'woocommerce_before_add_to_cart_button', 'njengah_product_add_on', 9 );
function njengah_product_add_on() {
$value = isset( $_POST['artist_name_add_on'] ) ? sanitize_text_field( $_POST['artist_name_add_on'] ) : '';
$songNameValue = isset( $_POST['song_name_add_on'] ) ? sanitize_text_field( $_POST['song_name_add_on'] ) : '';
$parentalAdvisoryValue = isset( $_POST['parental_advisory_add_on'] ) ? sanitize_text_field( $_POST['parental_advisory_add_on'] ) : '';
echo '<div class="additional-inputs"><div class="additional-input"><label>Artist Name <abbr class="required" title="required">*</abbr></label><p><input name="artist_name_add_on" value="' . $value . '"></p></div><div class="additional-input"><label>Song Name <abbr class="required" title="required">*</abbr></label><p><input name="song_name_add_on" value="' . $songNameValue . '"></p></div><div class="additional-input"><label>Parental Advisory?</label><p><input name="parental_advisory_add_on" type="checkbox" value="yes"></p></div></div>';
}
// -----------------------------------------
// 2. Throw error if custom input field empty
add_filter( 'woocommerce_add_to_cart_validation', 'njengah_product_add_on_validation', 10, 3 );
function njengah_product_add_on_validation( $passed, $product_id, $qty ){
if( isset( $_POST['artist_name_add_on'] ) && sanitize_text_field( $_POST['artist_name_add_on'] ) == '' ) {
wc_add_notice( 'Artist Name is a required field', 'error' );
$passed = false;
}
elseif( isset( $_POST['song_name_add_on'] ) && sanitize_text_field( $_POST['song_name_add_on'] ) == '' ) {
wc_add_notice( 'Song Name is a required field', 'error' );
$passed = false;
}
return $passed;
}
// -----------------------------------------
// 3. Save custom input field value into cart item data
add_filter( 'woocommerce_add_cart_item_data', 'njengah_product_add_on_cart_item_data', 10, 2 );
function njengah_product_add_on_cart_item_data( $cart_item, $product_id ){
if( isset( $_POST['artist_name_add_on'] ) ) {
$cart_item['artist_name_add_on'] = sanitize_text_field( $_POST['artist_name_add_on'] );
}
if( isset( $_POST['song_name_add_on'] ) ) {
$cart_item['song_name_add_on'] = sanitize_text_field( $_POST['song_name_add_on'] );
}
if( isset( $_POST['parental_advisory_add_on'] ) ) {
$cart_item['parental_advisory_add_on'] = sanitize_text_field( $_POST['parental_advisory_add_on'] );
}
return $cart_item;
}
// -----------------------------------------
// 4. Display custom input field value @ Cart
add_filter( 'woocommerce_get_item_data', 'njengah_product_add_on_display_cart', 10, 2 );
function njengah_product_add_on_display_cart( $data, $cart_item ) {
if ( isset( $cart_item['artist_name_add_on'] ) ){
$data[] = array(
'name' => 'Artist Name',
'value' => sanitize_text_field( $cart_item['artist_name_add_on'] )
);
}
return $data;
}
// -----------------------------------------
// 5. Save custom input field value into order item meta
add_action( 'woocommerce_add_order_item_meta', 'njengah_product_add_on_order_item_meta', 10, 2 );
function njengah_product_add_on_order_item_meta( $item_id, $values ) {
if ( ! empty( $values['artist_name_add_on'] ) ) {
wc_add_order_item_meta( $item_id, 'Artist Name', $values['artist_name_add_on'], true );
}
if( ! empty( $values['song_name_add_on'] ) ) {
wc_add_order_item_meta( $item_id, 'Song Name:', $values['song_name_add_on'], true );
}
if( ! empty( $values['parental_advisory_add_on'] ) ) {
wc_add_order_item_meta( $item_id, 'Parental Advisory', $values['parental_advisory_add_on'], true );
}
}
// -----------------------------------------
// 6. Display custom input field value into order table
add_filter( 'woocommerce_order_item_product', 'njengah_product_add_on_display_order', 10, 2 );
function njengah_product_add_on_display_order( $cart_item, $order_item ){
if( isset( $order_item['artist_name_add_on'] ) ){
$cart_item['artist_name_add_on'] = $order_item['artist_name_add_on'];
}
if( isset( $order_item['song_name_add_on'] ) ){
$cart_item['song_name_add_on'] = $order_item['song_name_add_on'];
}
if( isset( $order_item['parental_advisory_add_on'] ) ){
$cart_item['parental_advisory_add_on'] = $order_item['parental_advisory_add_on'];
}
return $cart_item;
}
// -----------------------------------------
// 7. Display custom input field value into order emails
add_filter( 'woocommerce_email_order_meta_fields', 'njengah_product_add_on_display_emails' );
function njengah_product_add_on_display_emails( $fields ) {
$fields['artist_name_add_on'] = 'Artist Name';
$fields['song_name_add_on'] = 'Song Name';
$fields['parental_advisory_add_on'] = 'Parental Advisory';
return $fields;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment