Advertisement
Guest User

dynamiccheckoutfields

a guest
Jul 19th, 2016
378
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 9.67 KB | None | 0 0
  1. <?php
  2.  
  3. /* Add a new checkout field
  4.  *
  5.  * These is our base field group, later on, depending on product quanitiy, $key = 'passenger_title_1' for example
  6.  *
  7.  */
  8.  
  9. function supreme_filter_checkout_fields($fields){
  10.     $fields['extra_fields'] = array(
  11.     'passenger_title' => array(
  12.         'type' => 'select',
  13.         'options' => array( 'mr' => __( 'Mr' ), 'mrs' => __( 'Mrs' ), 'miss' => __( 'Miss' ) ),
  14.         'required'      => false,
  15.         'label' => __( 'Title' )
  16.         ),
  17.     'passenger_first_name' => array(
  18.         'type' => 'text',
  19.         'required'      => false,
  20.         'label' => __( 'First Name' )
  21.         ),
  22.     'passenger_middle_name' => array(
  23.         'type' => 'text',
  24.         'required'      => false,
  25.         'label' => __( 'Middle Name' )
  26.         ),
  27.     'passenger_last_name' => array(
  28.         'type' => 'text',
  29.         'required'      => false,
  30.         'label' => __( 'Last Name' )
  31.         ),
  32.     'passenger_date_of_birth' => array(
  33.         'type'          => 'text',
  34.         'class'         => array('date-of-birth form-row-wide'),
  35.         'required'      => false,
  36.         'label'         => __('Date of Birth'),
  37.         'placeholder'       => __('Select Date'),
  38.         'options'     =>   array('' => __('Date of Birth', 'woocommerce' ))
  39.         ),
  40.     'passenger_dietry_required' => array(
  41.         'type' => 'select',
  42.         'class'         => array('dietry-required form-row-wide'),
  43.         'options' => array( '' => __( 'Please Select' ), 'y' => __( 'Yes' ), 'n' => __( 'No' ) ),
  44.         'required'      => false,
  45.         'label' => __( 'Dietry Requirements?' )
  46.         ),
  47.     'passenger_dietry_preference' => array(
  48.         'type' => 'select',
  49.         'class'         => array('dietry-requirements form-row-wide'),
  50.         'options' => array( 'v' => __( 'Vegetarian' ), 'GF' => __( 'Gluten Free' ) ),
  51.         'required'      => false,
  52.         'label' => __( 'Meal Preferences' )
  53.         )
  54.             );
  55.  
  56.     return $fields;
  57.  
  58. }
  59. add_filter( 'woocommerce_checkout_fields', 'supreme_filter_checkout_fields' );
  60.  
  61. // display the extra field on the checkout form
  62. function supreme_extra_checkout_fields(){
  63.  
  64.     $checkout = WC()->checkout();
  65.  
  66.     $op_cart_count = WC()->cart->get_cart_contents_count();
  67.  
  68.     $new_fields_array = array();
  69.  
  70.     for ( $i = 1; $i <= $op_cart_count; $i++) {
  71.  
  72.         $op_prepend = '_' . $i;
  73.  
  74.         foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) :
  75.  
  76.                 woocommerce_form_field( $key . $op_prepend, $field, $checkout->get_value( $key . $op_prepend ) );
  77.  
  78.                 /* Why? we've modified the initial extra_fields to have a number appended
  79.                  * I'd need to access this new array, containing all of our new fields later on */
  80.                 array_push($new_fields_array, $key . $op_prepend);
  81.  
  82.         endforeach;
  83.        
  84.     }
  85.    
  86.     return $new_fields_array;
  87.  
  88. }
  89. add_action( 'woocommerce_after_order_notes' ,'supreme_extra_checkout_fields' );
  90.  
  91.  
  92. // get our new array of field names
  93. function new_field_array_names(){
  94.  
  95.     $new_fields_array[] = '';
  96.  
  97.     $checkout = WC()->checkout();
  98.  
  99.     $op_cart_count = WC()->cart->get_cart_contents_count();
  100.     echo $op_cart_count . ' Products in cart';
  101.  
  102.     for ( $i = 1; $i <= $op_cart_count; $i++) {
  103.  
  104.         $op_prepend = '_' . $i;
  105.  
  106.         foreach ( $checkout->checkout_fields['extra_fields'] as $key => $field ) :
  107.  
  108.                 array_push($new_fields_array, $key . $op_prepend);
  109.  
  110.         endforeach;
  111.        
  112.     }
  113.    
  114.     return $new_fields_array;
  115.  
  116. }
  117.  
  118.  
  119. add_action( 'woocommerce_checkout_update_order_meta', 'supreme_custom_checkout_field_update_order_meta' );
  120. function supreme_custom_checkout_field_update_order_meta( $order_id ) {
  121.    
  122.     $new_fields_array = new_field_array_names();
  123.    
  124.     $checkout = WC()->checkout();
  125.  
  126.     $op_cart_count = WC()->cart->get_cart_contents_count();
  127.    
  128.     $i = 1;
  129.     if ( $i <= $op_cart_count ) {
  130.  
  131.         foreach ( $new_fields_array as $a => $v ) :
  132.  
  133.                 if ( ! empty( $_POST[$v] ) ) {
  134.                     update_post_meta( $order_id, $v, $_POST[$v] );
  135.                 }
  136.  
  137.         endforeach;
  138.  
  139.     $i++;
  140.    
  141.     }
  142. }
  143.  
  144.  
  145.  
  146. // display the extra data in the order admin panel
  147. function kia_display_order_data_in_admin( $order ){  
  148.    
  149.     ?>
  150.     <div class="order_data_column">
  151.  
  152.         <h4><?php _e( 'Extra Details', 'woocommerce' ); ?><a href="#" class="edit_address"><?php _e( 'Edit', 'woocommerce' ); ?></a></h4>
  153.         <div class="address">
  154.         <?php
  155.             echo '<p><strong>' . __( 'passenger_title_1' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_title_1', true ) . '</p>';
  156.             echo '<p><strong>' . __( 'passenger_first_name_1' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_first_name_1', true ) . '</p>';
  157.             echo '<p><strong>' . __( 'passenger_middle_name_1' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_middle_name_1', true ) . '</p>';
  158.             echo '<p><strong>' . __( 'passenger_last_name_1' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_last_name_1', true ) . '</p>';
  159.             echo '<p><strong>' . __( 'passenger_date_of_birth_1' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_date_of_birth_1', true ) . '</p>';
  160.             echo '<p><strong>' . __( 'passenger_dietry_required_1' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_dietry_required_1', true ) . '</p>';
  161.             echo '<p><strong>' . __( 'passenger_dietry_preference_1' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_dietry_preference_1', true ) . '</p>';
  162.            
  163.             echo '<p><strong>' . __( 'passenger_title_2' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_title_2', true ) . '</p>';
  164.             echo '<p><strong>' . __( 'passenger_first_name_2' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_first_name_2', true ) . '</p>';
  165.             echo '<p><strong>' . __( 'passenger_middle_name_2' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_middle_name_2', true ) . '</p>';
  166.             echo '<p><strong>' . __( 'passenger_last_name_2' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_last_name_2', true ) . '</p>';
  167.             echo '<p><strong>' . __( 'passenger_date_of_birth_2' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_date_of_birth_2', true ) . '</p>';
  168.             echo '<p><strong>' . __( 'passenger_dietry_required_2' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_dietry_required_2', true ) . '</p>';
  169.             echo '<p><strong>' . __( 'passenger_dietry_preference_2' ) . ':</strong>' . get_post_meta( $order->id, 'passenger_dietry_preference_2', true ) . '</p>';
  170.  
  171.     ?>
  172.         </div>
  173.         <div class="edit_address">
  174.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_title_1', 'label' => __( 'passenger_title_1' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  175.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_first_name_1', 'label' => __( 'passenger_first_name_1' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  176.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_middle_name_1', 'label' => __( 'passenger_middle_name_1' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  177.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_last_name_1', 'label' => __( 'passenger_last_name_1' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  178.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_date_of_birth_1', 'label' => __( 'passenger_date_of_birth_1' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  179.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_dietry_required_1', 'label' => __( 'passenger_dietry_required_1' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  180.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_dietry_preference_1', 'label' => __( 'passenger_dietry_preference_1' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  181.            
  182.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_title_2', 'label' => __( 'passenger_title_2' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  183.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_first_name_2', 'label' => __( 'passenger_first_name_2' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  184.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_middle_name_2', 'label' => __( 'passenger_middle_name_2' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  185.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_last_name_2', 'label' => __( 'passenger_last_name_2' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  186.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_date_of_birth_2', 'label' => __( 'passenger_date_of_birth_2' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  187.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_dietry_required_2', 'label' => __( 'passenger_dietry_required_2' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  188.             <?php woocommerce_wp_text_input( array( 'id' => 'passenger_dietry_preference_2', 'label' => __( 'passenger_dietry_preference_2' ), 'wrapper_class' => '_billing_company_field' ) ); ?>
  189.            
  190.         </div>
  191.     </div>
  192. <?php }
  193. add_action( 'woocommerce_admin_order_data_after_order_details', 'kia_display_order_data_in_admin' );
  194.  
  195. function kia_save_extra_details( $post_id, $post ){
  196.     update_post_meta( $post_id, '_some_field', wc_clean( $_POST[ 'passenger_title_1' ] ) );
  197.     update_post_meta( $post_id, '_another_field', wc_clean( $_POST[ 'passenger_first_name_1' ] ) );
  198. }
  199. add_action( 'woocommerce_process_shop_order_meta', 'kia_save_extra_details', 45, 2 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement