Created
February 20, 2023 19:08
-
-
Save delvinkrasniqi/3bf4d0652d4d6b0b22afa3d291635263 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* @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