Scriptfeeds Blog
  • Blog
  • WordPress
    • Woocommerce
    • WordPress Errors
    • WordPress Plugins
  • Development
    • WordPress Themes
  • Hire us
Cart / $0.00

No products in the cart.

No Result
View All Result
Scriptfeeds Blog
  • Blog
  • WordPress
    • Woocommerce
    • WordPress Errors
    • WordPress Plugins
  • Development
    • WordPress Themes
  • Hire us
Cart / $0.00

No products in the cart.

No Result
View All Result
Scriptfeeds Blog
No Result
View All Result
Home Wordpress Woocommerce

3 Steps to Add a extra Custom Checkout Field in WooCommerce

Scriptfeeds by Scriptfeeds
July 3, 2024
in Woocommerce, Wordpress
0
84
SHARES
Share on FacebookShare on TwitterWhatsapp this Blog

Let’s say you want to custom checkout field on WooCommerce checkout page without Plugin, to capture few extra details from your customer. For example, it might be a customer VAT number or a Company Name. In such cases there are many plugins available but problems with plugins are compatibility and Speed. So this blog help you to add custom checkout field using three step codes without any extra files or heavy css of separate plugins.

Table of Contents

  • Where to add Custom Checkout Field custom code?
  • Step 1 : PHP Snippet : Add New Custom checkout Field @ WooCommerce Page
  • Step 2 : Validation of Custom Field
  • Step 3 : Saving and Display of Custom field at WooCommerce Thank You Page, Order Page & Emails

Custom checkout fields which we creating using codes will show above the Checkout page order notes – right after the shipping form. It will feature a label, an input field and will be required, just like other fields of checkout page.

Custom Checkout Field

Where to add Custom Checkout Field custom code?

You should place custom PHP code in functions.php and custom CSS in style.css of your child theme

So, here’s step by step guide.

Step 1 : PHP Snippet : Add New Custom checkout Field @ WooCommerce Page

Here we display the new VAT field on the WooCommerce Checkout page above the “Order Notes” box

The new field ID is “TAX_no“, which will be useful to remember in Step 2 and 3.

/**
 * @snippet       Add Custom Field @ WooCommerce Checkout Page
 * @author        Scriptfeeds
 * @testedwith    WooCommerce 6.6
 * @community     https://scriptfeeds.com/
 */
  
add_action( 'woocommerce_before_order_notes', 'script_add_custom_checkout_field' );
  
function script_add_custom_checkout_field( $checkout ) { 
   $current_user = wp_get_current_user();
   $saved_tax_no = $current_user->tax_no;
   woocommerce_form_field( 'tax_no', array(        
      'type' => 'text',        
      'class' => array( 'form-row-wide' ),        
      'label' => 'BTW Number',        
      'placeholder' => 'CA12345678',        
      'required' => true,        
      'default' => $saved_tax_no,        
   ), $checkout->get_value( 'tax_no' ) ); 
}

Step 2 : Validation of Custom Field

To validate the fields, we will use “required” => true which means the field will have a required mark beside its label. But we also have to generate error message in case of empty field.

/**
 * @snippet       validating Custom Field
 * @author        Scriptfeeds
 * @testedwith    WooCommerce 6.6
 * @community     https://scriptfeeds.com
 */
 
add_action( 'woocommerce_checkout_process', 'script_validate_new_checkout_field' );
  
function script_validate_new_checkout_field() {    
   if ( ! $_POST['tax_no'] ) {
      wc_add_notice( 'Please enter your TAX Number', 'error' );
   }
}

Step 3 : Saving and Display of Custom field at WooCommerce Thank You Page, Order Page & Emails

After custom fields validation, order will be processes in WooCommerce. But to display custom fields value in orders and emails we need a function to display and save. Use below code to do the same.

/**
 * @snippet       Display of Custom Field
 * @author        Scriptfeeds
 * @testedwith    WooCommerce 6.6
 * @community     https://scriptfeeds.com
 */
 
add_action( 'woocommerce_checkout_update_order_meta', 'script_save_new_checkout_field' );
  
function script_save_new_checkout_field( $order_id ) { 
    if ( $_POST['tax_no'] ) update_post_meta( $order_id, '_tax_no', esc_attr( $_POST['tax_no'] ) );
}
 
add_action( 'woocommerce_thankyou', 'script_show_new_checkout_field_thankyou' );
   
function script_show_new_checkout_field_thankyou( $order_id ) {    
   if ( get_post_meta( $order_id, '_tax_no', true ) ) echo '<p><strong>Tax Number:</strong> ' . get_post_meta( $order_id, '_tax_no', true ) . '</p>';
}
  
add_action( 'woocommerce_admin_order_data_after_billing_address', 'script_show_new_checkout_field_order' );
   
function script_show_new_checkout_field_order( $order ) {    
   $order_id = $order->get_id();
   if ( get_post_meta( $order_id, '_tax_no', true ) ) echo '<p><strong>Tax Number:</strong> ' . get_post_meta( $order_id, '_tax_no', true ) . '</p>';
}
 
add_action( 'woocommerce_email_after_order_table', 'script_show_new_checkout_field_emails', 20, 4 );
  
function script_show_new_checkout_field_emails( $order, $sent_to_admin, $plain_text, $email ) {
    if ( get_post_meta( $order->get_id(), '_tax_no', true ) ) echo '<p><strong>Tax Number:</strong> ' . get_post_meta( $order->get_id(), '_tax_no', true ) . '</p>';
}

So that’s all you need to do to add Custom field on WooCommerce checkout Page without any Plugin. We tested it with latest version of WooCommerce. Please give a try and let us know how it goes.

For anything else, connect with our team.

Connect with Developer
  • United States+1
  • United Kingdom+44
  • Afghanistan (‫افغانستان‬‎)+93
  • Albania (Shqipëri)+355
  • Algeria (‫الجزائر‬‎)+213
  • American Samoa+1
  • Andorra+376
  • Angola+244
  • Anguilla+1
  • Antigua and Barbuda+1
  • Argentina+54
  • Armenia (Հայաստան)+374
  • Aruba+297
  • Ascension Island+247
  • Australia+61
  • Austria (Österreich)+43
  • Azerbaijan (Azərbaycan)+994
  • Bahamas+1
  • Bahrain (‫البحرين‬‎)+973
  • Bangladesh (বাংলাদেশ)+880
  • Barbados+1
  • Belarus (Беларусь)+375
  • Belgium (België)+32
  • Belize+501
  • Benin (Bénin)+229
  • Bermuda+1
  • Bhutan (འབྲུག)+975
  • Bolivia+591
  • Bosnia and Herzegovina (Босна и Херцеговина)+387
  • Botswana+267
  • Brazil (Brasil)+55
  • British Indian Ocean Territory+246
  • British Virgin Islands+1
  • Brunei+673
  • Bulgaria (България)+359
  • Burkina Faso+226
  • Burundi (Uburundi)+257
  • Cambodia (កម្ពុជា)+855
  • Cameroon (Cameroun)+237
  • Canada+1
  • Cape Verde (Kabu Verdi)+238
  • Caribbean Netherlands+599
  • Cayman Islands+1
  • Central African Republic (République centrafricaine)+236
  • Chad (Tchad)+235
  • Chile+56
  • China (中国)+86
  • Christmas Island+61
  • Cocos (Keeling) Islands+61
  • Colombia+57
  • Comoros (‫جزر القمر‬‎)+269
  • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
  • Congo (Republic) (Congo-Brazzaville)+242
  • Cook Islands+682
  • Costa Rica+506
  • Côte d’Ivoire+225
  • Croatia (Hrvatska)+385
  • Cuba+53
  • Curaçao+599
  • Cyprus (Κύπρος)+357
  • Czech Republic (Česká republika)+420
  • Denmark (Danmark)+45
  • Djibouti+253
  • Dominica+1
  • Dominican Republic (República Dominicana)+1
  • Ecuador+593
  • Egypt (‫مصر‬‎)+20
  • El Salvador+503
  • Equatorial Guinea (Guinea Ecuatorial)+240
  • Eritrea+291
  • Estonia (Eesti)+372
  • Eswatini+268
  • Ethiopia+251
  • Falkland Islands (Islas Malvinas)+500
  • Faroe Islands (Føroyar)+298
  • Fiji+679
  • Finland (Suomi)+358
  • France+33
  • French Guiana (Guyane française)+594
  • French Polynesia (Polynésie française)+689
  • Gabon+241
  • Gambia+220
  • Georgia (საქართველო)+995
  • Germany (Deutschland)+49
  • Ghana (Gaana)+233
  • Gibraltar+350
  • Greece (Ελλάδα)+30
  • Greenland (Kalaallit Nunaat)+299
  • Grenada+1
  • Guadeloupe+590
  • Guam+1
  • Guatemala+502
  • Guernsey+44
  • Guinea (Guinée)+224
  • Guinea-Bissau (Guiné Bissau)+245
  • Guyana+592
  • Haiti+509
  • Honduras+504
  • Hong Kong (香港)+852
  • Hungary (Magyarország)+36
  • Iceland (Ísland)+354
  • India (भारत)+91
  • Indonesia+62
  • Iran (‫ایران‬‎)+98
  • Iraq (‫العراق‬‎)+964
  • Ireland+353
  • Isle of Man+44
  • Israel (‫ישראל‬‎)+972
  • Italy (Italia)+39
  • Jamaica+1
  • Japan (日本)+81
  • Jersey+44
  • Jordan (‫الأردن‬‎)+962
  • Kazakhstan (Казахстан)+7
  • Kenya+254
  • Kiribati+686
  • Kosovo+383
  • Kuwait (‫الكويت‬‎)+965
  • Kyrgyzstan (Кыргызстан)+996
  • Laos (ລາວ)+856
  • Latvia (Latvija)+371
  • Lebanon (‫لبنان‬‎)+961
  • Lesotho+266
  • Liberia+231
  • Libya (‫ليبيا‬‎)+218
  • Liechtenstein+423
  • Lithuania (Lietuva)+370
  • Luxembourg+352
  • Macau (澳門)+853
  • Madagascar (Madagasikara)+261
  • Malawi+265
  • Malaysia+60
  • Maldives+960
  • Mali+223
  • Malta+356
  • Marshall Islands+692
  • Martinique+596
  • Mauritania (‫موريتانيا‬‎)+222
  • Mauritius (Moris)+230
  • Mayotte+262
  • Mexico (México)+52
  • Micronesia+691
  • Moldova (Republica Moldova)+373
  • Monaco+377
  • Mongolia (Монгол)+976
  • Montenegro (Crna Gora)+382
  • Montserrat+1
  • Morocco (‫المغرب‬‎)+212
  • Mozambique (Moçambique)+258
  • Myanmar (Burma) (မြန်မာ)+95
  • Namibia (Namibië)+264
  • Nauru+674
  • Nepal (नेपाल)+977
  • Netherlands (Nederland)+31
  • New Caledonia (Nouvelle-Calédonie)+687
  • New Zealand+64
  • Nicaragua+505
  • Niger (Nijar)+227
  • Nigeria+234
  • Niue+683
  • Norfolk Island+672
  • North Korea (조선 민주주의 인민 공화국)+850
  • North Macedonia (Северна Македонија)+389
  • Northern Mariana Islands+1
  • Norway (Norge)+47
  • Oman (‫عُمان‬‎)+968
  • Pakistan (‫پاکستان‬‎)+92
  • Palau+680
  • Palestine (‫فلسطين‬‎)+970
  • Panama (Panamá)+507
  • Papua New Guinea+675
  • Paraguay+595
  • Peru (Perú)+51
  • Philippines+63
  • Poland (Polska)+48
  • Portugal+351
  • Puerto Rico+1
  • Qatar (‫قطر‬‎)+974
  • Réunion (La Réunion)+262
  • Romania (România)+40
  • Russia (Россия)+7
  • Rwanda+250
  • Saint Barthélemy+590
  • Saint Helena+290
  • Saint Kitts and Nevis+1
  • Saint Lucia+1
  • Saint Martin (Saint-Martin (partie française))+590
  • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
  • Saint Vincent and the Grenadines+1
  • Samoa+685
  • San Marino+378
  • São Tomé and Príncipe (São Tomé e Príncipe)+239
  • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
  • Senegal (Sénégal)+221
  • Serbia (Србија)+381
  • Seychelles+248
  • Sierra Leone+232
  • Singapore+65
  • Sint Maarten+1
  • Slovakia (Slovensko)+421
  • Slovenia (Slovenija)+386
  • Solomon Islands+677
  • Somalia (Soomaaliya)+252
  • South Africa+27
  • South Korea (대한민국)+82
  • South Sudan (‫جنوب السودان‬‎)+211
  • Spain (España)+34
  • Sri Lanka (ශ්‍රී ලංකාව)+94
  • Sudan (‫السودان‬‎)+249
  • Suriname+597
  • Svalbard and Jan Mayen+47
  • Sweden (Sverige)+46
  • Switzerland (Schweiz)+41
  • Syria (‫سوريا‬‎)+963
  • Taiwan (台灣)+886
  • Tajikistan+992
  • Tanzania+255
  • Thailand (ไทย)+66
  • Timor-Leste+670
  • Togo+228
  • Tokelau+690
  • Tonga+676
  • Trinidad and Tobago+1
  • Tunisia (‫تونس‬‎)+216
  • Turkey (Türkiye)+90
  • Turkmenistan+993
  • Turks and Caicos Islands+1
  • Tuvalu+688
  • U.S. Virgin Islands+1
  • Uganda+256
  • Ukraine (Україна)+380
  • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
  • United Kingdom+44
  • United States+1
  • Uruguay+598
  • Uzbekistan (Oʻzbekiston)+998
  • Vanuatu+678
  • Vatican City (Città del Vaticano)+39
  • Venezuela+58
  • Vietnam (Việt Nam)+84
  • Wallis and Futuna (Wallis-et-Futuna)+681
  • Western Sahara (‫الصحراء الغربية‬‎)+212
  • Yemen (‫اليمن‬‎)+967
  • Zambia+260
  • Zimbabwe+263
  • Åland Islands+358
Loading
Tags: Custom checkout fieldsCustom fields without Plugin
Share34Tweet21Send

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

I agree to the Terms & Conditions and Privacy Policy.

Scriptfeeds Blog

© 2022 Scriptfeeds

Blog Categories

  • WordPress
  • Development
  • Reviews
  • Marketing

Connect us on

No Result
View All Result
  • Blog
  • WordPress
    • Woocommerce
    • WordPress Errors
    • WordPress Plugins
  • Development
    • WordPress Themes
  • Hire us

© 2022 Scriptfeeds

This website uses cookies. By continuing to use this website you are giving consent to cookies being used. Visit our Privacy and Cookie Policy.