You should use this plugin to add snippets (otherwise you should create child theme and put code to functions.php )
Following plugins supported: Checkout Add-ons, PDF Product Vouchers, Woocommerce Subscriptions, WooCommerce Bookings, WooCommerce Product Vendors, Local Pickup Plus, FooEvents, Tickera, Shipping Multiple Addresses, WooCommerce TM Extra Product Options
WooCommerce PDF Invoices & Packing Slips
// add Credit Note details add_filter('woe_get_order_fields', 'woe_add_order_fields'); function woe_add_order_fields($fields) { $fields['credit_note_number'] = array( 'label' => 'Credit Note Number', 'colname' => 'Credit Note Number', 'checked' => 1 ); $fields['credit_note_date'] = array( 'label' => 'Credit Note Date', 'colname' => 'Credit Note Date', 'checked' => 1 ); $fields['formatted_credit_note_number'] = array( 'label' => 'Formatted Credit Note Number', 'colname' => 'Formatted Credit Note Number', 'checked' => 1 ); return $fields; } add_filter('woe_get_order_value_credit_note_number', 'woe_get_credit_note_field', 10, 3); add_filter('woe_get_order_value_credit_note_date', 'woe_get_credit_note_field', 10, 3); add_filter('woe_get_order_value_formatted_credit_note_number', 'woe_get_credit_note_field', 10, 3); function woe_get_credit_note_field($value,$order, $field) { $refunds = $order->get_refunds(); if ( !empty( $refunds ) ) // take 1st! $value = get_post_meta( $refunds[0]->id, '_wcpdf_'.$field, true); return $value; }
WooCommerce Checkout Add-ons
// "Checkout Add-ons" plugin class WOE_Checkout_Addons_Mod { var $fields = array('Student Name','Student Grade Lavel','Teacher Name');// edit this line!! function __construct() { add_filter('woe_get_order_fields', array($this,'add_order_fields') ); add_action('woe_order_export_started', array($this,'get_fee_details') ); add_filter('woe_fetch_order_row', array($this,'fill_new_columns'), 10, 2); } function add_order_fields($fields) { foreach($this->fields as $pos=>$name) { $fields['fee_addon_'.$pos] = array('segment'=>'other','label'=>$name, 'colname'=>$name,'checked'=>1); } return $fields; } function get_fee_details($order_id) { $this->fee_data = array(); $order = new WC_Order($order_id); foreach($order->get_items("fee") as $item_id=>$item) { $pos = array_search($item['name'],$this->fields); if( $pos !== false) { $item_meta = $order->get_item_meta( $item_id ); $this->fee_data[$pos] = join(", ", $item_meta['_wc_checkout_add_on_value']); // many values? } } return $order_id; } // add new values to row function fill_new_columns($row,$order_id) { foreach($this->fields as $pos=>$name) { if(isset($row['fee_addon_'.$pos]) AND isset($this->fee_data[$pos]) ) $row['fee_addon_'.$pos] = $this->fee_data[$pos] ; } return $row; } } new WOE_Checkout_Addons_Mod();
PDF Product Vouchers
// Export product "Vouchers" class WOE_Product_Vouchers { function __construct() { // add new fields add_filter('woe_get_order_product_fields', function ($fields,$format) { $fields['voucher_number'] = array( 'label' => 'Voucher Number', 'colname' => 'Voucher Number', 'checked' => 1 ); $fields['voucher_value'] = array( 'label' => 'Voucher Value', 'colname' => 'Voucher Value', 'checked' => 1); $fields['voucher_value_incl_tax'] = array( 'label' => 'Voucher Value (+Tax)', 'colname' => 'Voucher Value(+Tax)', 'checked' => 1); $fields['voucher_recipient_name'] = array( 'label' => 'Recipient Name', 'colname' => 'Recipient Name', 'checked' => 1 ); $fields['voucher_message'] = array( 'label' => 'Message', 'colname' => 'Message', 'checked' => 1 ); return $fields; }, 10, 2); // get voucher for item add_action( "woe_get_order_product_item", function ($item) { $this->voucher = false; $voucher_meta = $item->get_meta( '_voucher_id', false ); if( $voucher_meta ) $this->voucher = wc_pdf_product_vouchers_get_voucher( $voucher_meta[0]->value ); }); // just return fields add_filter('woe_get_order_product_value_voucher_number', function ($value,$order, $item, $product) { if( $this->voucher ) $value = $this->voucher->get_voucher_number(); return $value; }, 10, 4); add_filter('woe_get_order_product_value_voucher_value', function ($value,$order, $item, $product) { if( $this->voucher ) $value = $this->voucher->get_voucher_value(); return $value; }, 10, 4); add_filter('woe_get_order_product_value_voucher_value_incl_tax', function ($value,$order, $item, $product) { if( $this->voucher ) $value = $this->voucher->get_voucher_value_incl_tax(); return $value; }, 10, 4); add_filter('woe_get_order_product_value_voucher_recipient_name', function ($value,$order, $item, $product) { if( $this->voucher ) $value = $this->voucher->get_recipient_name(); return $value; }, 10, 4); add_filter('woe_get_order_product_value_voucher_message', function ($value,$order, $item, $product) { if( $this->voucher ) $value = $this->voucher->get_message(); return $value; }, 10, 4); } } new WOE_Product_Vouchers();
Woocommerce Subscriptions
// add status and dates as new columns class WOE_Subscription_Fields_mod { function __construct() { add_filter('woe_get_order_fields', array($this,'add_order_fields') ); add_action('woe_order_export_started', array($this,'get_subscription_details') ); add_filter('woe_fetch_order_row', array($this,'fill_new_columns'), 10, 2); } function add_order_fields($fields) { $fields['sub_status'] = array('segment'=>'cart','label'=>'Sub. Status', 'colname'=>'Sub. Status', 'value'=>'','checked'=>1); $fields['sub_start_date'] = array('segment'=>'cart','label'=>'Sub. Start Date', 'colname'=>'Sub. Start Date', 'value'=>'','checked'=>1); $fields['sub_next_payment'] = array('segment'=>'cart','label'=>'Sub. Next Payment', 'colname'=>'Sub. Next Payment', 'value'=>'','checked'=>1); $fields['sub_last_order_date'] = array('segment'=>'cart','label'=>'Sub. Last Order Date', 'colname'=>'Sub. Last Order Date', 'value'=>'','checked'=>1); return $fields; } function get_subscription_details($order_id) { $this->sub = array(); if( WC_Order_Export_Data_Extractor::$object_type=='shop_order' ) { $subs = wcs_get_subscriptions_for_order($order_id, array('order_type'=>'any')); $subs = array_values($subs); if(!$subs) return $order_id; $sub = array_shift($subs); } elseif(WC_Order_Export_Data_Extractor::$object_type=='shop_subscription' ) { $sub = wcs_get_subscription($order_id); } else { return $order_id;// unknow type } $this->sub['status'] = $sub->get_status(); //$this->sub['start_date'] = $sub->get_date_to_display("start_date"); //was $this->sub['start_date'] = date_i18n( wc_date_format(), $sub->get_time( 'date_created', 'site' ) ); $this->sub['next_payment'] = $sub->get_time( 'next_payment_date', 'site' ) ? date_i18n( wc_date_format(), $sub->get_time( 'next_payment_date', 'site' ) ) : '-'; $this->sub['last_order_date'] = date_i18n( wc_date_format(), $sub->get_time( 'last_order_date_created', 'site' ) ); return $order_id; } // add new values to row function fill_new_columns($row,$order_id) { foreach($this->sub as $k=>$v) if(isset($row['sub_'.$k])) $row['sub_'.$k] = $v; return $row; } } new WOE_Subscription_Fields_mod();
WooCommerce Bookings
class WOE_Bookings{ function __construct() { add_filter('woe_get_order_product_fields',array($this,'add_product_fields') ); add_filter('woe_get_order_product_item',array($this,'fetch_booking') ); add_filter('woe_get_order_product_value_booking_status', array($this,'get_booking_field_status'), 10, 4 ); add_filter('woe_get_order_product_value_booking_start_date', array($this,'get_booking_field_start_date'), 10, 4 ); add_filter('woe_get_order_product_value_booking_start_time', array($this,'get_booking_field_start_time'), 10, 4 ); add_filter('woe_get_order_product_value_booking_end_date', array($this,'get_booking_field_end_date'), 10, 4 ); add_filter('woe_get_order_product_value_booking_end_time', array($this,'get_booking_field_end_time'), 10, 4 ); } function add_product_fields($fields) { $fields['booking_status'] = array('label'=>'Booking Status','colname'=>'Booking Status','checked'=>1,'segment'=>'cart'); $fields['booking_start_date'] = array('label'=>'Booking Start Date','colname'=>'Booking Start Date','checked'=>1,'segment'=>'cart'); $fields['booking_start_time'] = array('label'=>'Booking Start Time','colname'=>'Booking Start Time','checked'=>1,'segment'=>'cart'); $fields['booking_end_date'] = array('label'=>'Booking End Date','colname'=>'Booking End Date','checked'=>1,'segment'=>'cart'); $fields['booking_end_time'] = array('label'=>'Booking End Time','colname'=>'Booking End Time','checked'=>1,'segment'=>'cart'); return $fields; } // booking for item function fetch_booking($item) { global $wpdb; $this->booking = false; $booking_id = $wpdb->get_var( "SELECT post_id FROM {$wpdb->postmeta} WHERE meta_key= '_booking_order_item_id' AND meta_value=" . intval( $item->get_id() ) ); if( $booking_id ) { $this->booking = new WC_Booking($booking_id); } return $item; } function get_booking_field_status($value,$order, $item, $product) { return $this->booking ? $this->booking->get_status() : $value; } function get_booking_field_start_date($value,$order, $item, $product) { return $this->booking ? date_i18n( wc_date_format(), $this->booking->start) : $value; } function get_booking_field_start_time($value,$order, $item, $product) { return $this->booking ? date_i18n( wc_time_format(), $this->booking->start) : $value; } function get_booking_field_end_date($value,$order, $item, $product) { return $this->booking ? date_i18n( wc_date_format(), $this->booking->end) : $value; } function get_booking_field_end_time($value,$order, $item, $product) { return $this->booking ? date_i18n( wc_time_format(), $this->booking->end) : $value; } } new WOE_Bookings();
WooCommerce Product Vendors
// add product fields "Vendor Email" and "Vendor Name" add_filter('woe_get_order_product_fields', function ($fields,$format) { $fields['vendor_email'] = array( 'label' => 'Vendor email', 'colname' => 'Vendor email', 'checked' => 1 ); $fields['vendor_name'] = array( 'label' => 'Vendor email', 'colname' => 'Vendor email', 'checked' => 1 ); return $fields; }, 10, 2); add_filter('woe_get_order_product_value_vendor_email', function ($value,$order, $item, $product,$itemmeta) { $vendor = WC_Product_Vendors_Utils::is_vendor_product( $item['product_id'] ); if ( $vendor AND !empty( $vendor[0] ) ) { $vendor_data = WC_Product_Vendors_Utils::get_vendor_data_by_id($vendor[0]->term_id); if ( ! empty( $vendor_data ) ) $value = $vendor_data['email']; } return $value; }, 10, 5); add_filter('woe_get_order_product_value_vendor_name', function ($value,$order, $item, $product,$itemmeta) { $vendor = WC_Product_Vendors_Utils::is_vendor_product( $item['product_id'] ); if ( $vendor AND !empty( $vendor[0] ) ) { $vendor_data = WC_Product_Vendors_Utils::get_vendor_data_by_id($vendor[0]->term_id); if ( ! empty( $vendor_data ) ) $value = $vendor_data['name']; } return $value; }, 10, 5);
Local Pickup Plus
// one location per order class Woe_Pickup_Location_Fields_to_Order{ var $shipping_info; var $names = array("_pickup_location_id","_pickup_location_name","_pickup_location_address","_pickup_location_phone","_pickup_date","_pickup_items"); function __construct() { add_filter('woe_get_order_fields', array($this,'add_shipping_fields') ); add_filter('woe_settings_validate_defaults', array($this,'hook_new_fields') ); add_filter('woe_order_export_started',array($this,'fetch_order_shipping'), 10, 1); } function add_shipping_fields($fields) { foreach($this->names as $f) { $l = ucwords(trim(str_replace("_"," ",$f))); $fields[$f] = array('label'=>$l,'checked' => 1, 'colname'=>$l); add_filter('woe_get_order_value_'.$f, array($this,'get_shipping_value'), 10, 3 ); } return $fields; } function hook_new_fields($settings) { foreach($this->names as $f) { add_filter('woe_get_order_value_'.$f, array($this,'get_shipping_value'), 10, 3 ); } return $settings; } function fetch_order_shipping($order_id) { //reset values $this->shipping_info = array(); //take 1st ? $order = new WC_Order($order_id); foreach($order->get_items('shipping') as $shipping) { foreach($shipping->get_meta_data() as $meta) { $this->shipping_info[$meta->key] = $meta->value; } break; } // convert some values if( is_array($this->shipping_info['_pickup_location_address']) ) { // MODIFY it? $_parts = array( $this->shipping_info['_pickup_location_address']['address_1'], $this->shipping_info['_pickup_location_address']['address_2'], $this->shipping_info['_pickup_location_address']['city'], $this->shipping_info['_pickup_location_address']['postcode'], $this->shipping_info['_pickup_location_address']['state'], $this->shipping_info['_pickup_location_address']['country'], ); $this->shipping_info['_pickup_location_address'] = join(", ", array_filter($_parts)); } if( is_array($this->shipping_info['_pickup_items']) ){ $items = $order->get_items('line_item'); $item_names = array(); foreach($this->shipping_info['_pickup_items'] as $id) { if(isset($items[$id])) $item_names[] = $items[$id]['name'] . ' x ' . $items[$id]['name']; } $this->shipping_info['_pickup_items'] = join(",", $item_names); } return $order_id; } function get_shipping_value($value,$order,$field) { if( isset($this->shipping_info[$field]) ) { $value = $this->shipping_info[$field]; } return $value; } } new Woe_Pickup_Location_Fields_to_Order();
FooEvents For WooCommerce
You should EDIT and TWEAK code , see comments!
class WOE_FooTickets_As_Products { var $fields = array("TicketType"=>"Ticket Type","Status"=>"Ticket Status","AttendeeName"=>"Attendee First Name","AttendeeLastName"=>"Attendee Last Name", "AttendeeEmail"=>"Attendee Email","AttendeeTelephone"=>"Attendee Phone","AttendeeCompany"=>"Attendee Company","AttendeeDesignation"=>"Attendee Designation", "PurchaserFirstName"=>"Purchaser First Name","PurchaserLastName"=>"Purchaser Last Name","PurchaserEmail"=>"Purchaser Email"); var $custom_fields = array("nom_participant"=>"Nom participant","club_participant"=>"club Participant"); // ADD as "field"=>"label" function __construct() { add_filter('woe_get_order_product_fields', function ($fields) { foreach($this->fields as $field=>$label) $fields['ticket_standard_'.$field] = array( 'label' => $label, 'colname' => $label, 'checked' => 1 ); foreach($this->custom_fields as $field=>$label) $fields['ticket_custom_'.$field] = array( 'label' => $label, 'colname' => $label, 'checked' => 1 ); return $fields; }); add_filter('woe_fetch_order_products',function ($products,$order,$labels, $format, $static_vals) { $tickets_set = get_post_meta($order->id, "WooCommerceEventsOrderTickets", true); $this->line_id = 1; $results = array(); $pos = 0; $products = array_values($products); foreach ( $order->get_items('line_item') as $item_id=>$item ) { $found_ticket = false; // seek for assigned tickets $product_data = $products[$pos++]; // take already extracted data for product! foreach($tickets_set as $tickets) { foreach($tickets as $ticket) { // found assigned tickets?? if( $item['product_id'] AND !$item['variation_id'] AND ($ticket['WooCommerceEventsProductID'] == $item['product_id']) OR $item['variation_id'] AND ($ticket['WooCommerceEventsVariationID'] == $item['variation_id']) ) { $this->add_ticket($results, $ticket,$labels,$product_data); $found_ticket = true; } } } if( ! $found_ticket ) // not ticket, stay unchanaged! $results[] = $product_data; } return $results; },10,5); }// end __construct function add_ticket(&$results, $ticket,$labels,$product_data) { $row = array(); foreach ( $labels as $field => $label ) { if ( $field == 'line_id' ) { $row[ $field ] = $this->line_id++; } elseif ( preg_match('#ticket_standard_(.+)$#',$field,$m) ) { // FooEvents field $row[ $field ] = $ticket["WooCommerceEvents".$m[1]]; } elseif ( preg_match('#ticket_custom_(.+)$#',$field,$m) ) { // FooEvents custom field $row[ $field ] = $ticket["WooCommerceEventsCustomAttendeeFields"]["fooevents_custom_".$m[1]]; } elseif ( isset( $product_data[$field]) ) { // Item field ? $row[ $field ] = $product_data[$field]; } else $row[ $field ] = ''; } $results[] = $row; } } new WOE_FooTickets_As_Products();
Tickera
add_filter('woe_get_order_product_fields', 'woe_add_ticket_fields'); function woe_add_ticket_fields($fields) { $fields['event_name'] = array('label'=>'Event Name','colname'=>'Event Name','checked'=>1); $fields['event_start_at'] = array('label'=>'Event Start','colname'=>'Event Start','checked'=>1); $fields['event_end_at'] = array('label'=>'Event End','colname'=>'Event End','checked'=>1); $fields['event_location'] = array('label'=>'Event Location','colname'=>'Event Location','checked'=>1); $fields['ticket_type'] = array('label'=>'Ticket Type','colname'=>'Ticket Type','checked'=>1); $fields['ticket_owner'] = array('label'=>'Ticket Owner Name','colname'=>'Ticket Owner Name','checked'=>1); $fields['ticket_email'] = array('label'=>'Ticket Owner Email','colname'=>'Ticket Owner Email','checked'=>1); $fields['ticket_code'] = array('label'=>'Ticket Code','colname'=>'Ticket Code','checked'=>1); return $fields; } add_filter('woe_fetch_order_products', 'woe_fill_ticket_fields',10,5); function woe_fill_ticket_fields($data, $order, $labels, $format, $static_vals ) { $args = array( 'posts_per_page' => -1, 'orderby' => 'post_date', 'order' => 'ASC', 'post_type' => 'tc_tickets_instances', 'post_parent' => $order->get_id(), ); $tickets = get_posts($args); $data = array_values($data); //we dont need item ids here! foreach($tickets as $pos=>$ticket) { // copy data from first line if(!isset($data[$pos])) $data[$pos] = $data[0]; //fill ticket data $ticket_type_id = get_post_meta($ticket->ID, 'ticket_type_id', true); if( $ticket_type_id ) { $ticket_type = new TC_Ticket($ticket_type_id); if( $ticket_type ) { $event_id = $ticket_type->get_ticket_event(); $event = get_post($event_id, ARRAY_A); $data[$pos]['event_name'] = $event['post_title']; $data[$pos]['event_start_at'] = get_post_meta( $event_id , 'event_date_time', true); $data[$pos]['event_end_at'] = get_post_meta( $event_id , 'event_end_date_time', true); $data[$pos]['event_location'] = get_post_meta( $event_id , 'event_location', true); $data[$pos]['ticket_type'] = $ticket_type->details->post_title; $data[$pos]['ticket_owner'] = get_post_meta($ticket->ID, 'first_name', true) ." " .get_post_meta($ticket->ID, 'last_name', true); $data[$pos]['ticket_email'] = get_post_meta($ticket->ID, 'owner_email', true); $data[$pos]['ticket_code'] = get_post_meta($ticket->ID, 'ticket_code', true); } } } return $data; }
Shipping Multiple Addresses
//this code adds shipping information for each product class WOE_add_product_shipping{ var $items_shipping; function __construct() { add_filter('woe_get_order_product_fields', array($this,'add_shipping_fields'), 10, 2); add_filter('woe_order_export_started',array($this,'fetch_product_shipping'), 10, 1); add_filter('woe_fetch_order_product',array($this,'fill_product_shipping'), 10, 5); } function add_shipping_fields($fields,$format) { $names = array('first_name','last_name','full_name','company','country','address_1','address_2','city','state','postcode'); foreach($names as $f) { $fields['shipping_'.$f] = array('label'=>"Product Shipping ".$f,'checked' => 1, 'colname'=>"Product Shipping ".$f); } return $fields; } function fetch_product_shipping($order_id) { //reset values $this->items_shipping = array(); $shipping_packages = get_post_meta($order_id, '_wcms_packages', true ); foreach($shipping_packages as $pack) { $addr = $pack['destination']; foreach($pack["contents"] as $item) { $key = $item['product_id']."-".$item['variation_id']; $addr['full_name'] = trim($addr['first_name'] . " " . $addr['last_name']); // new field $this->items_shipping[$key] = $addr; } } return $order_id; } function fill_product_shipping($row, $order, $item, $product, $item_meta) { $key = $item['product_id']."-".$item['variation_id']; if( isset($this->items_shipping[$key]) ) { foreach($this->items_shipping[$key] as $k=>$v) { $k = 'shipping_'.$k; if( isset($row[$k]) ) $row[$k] = $v; } } return $row; } } new WOE_add_product_shipping();
WooCommerce TM Extra Product Options
You should EDIT and TWEAK code! See below how to get “Element id”.
class WOE_add_extra_fields { // EDIT list here, use pair 'Element id'=>'Label' var $tm_fields = array( '5bfe34979a8f16.53431994'=>'Age','5bfe34e59a8f25.82473886'=>'Sex'); function __construct() { add_filter('woe_get_order_product_fields',array($this,'add_product_fields') ); add_filter('woe_get_order_product_item_meta', array($this,'fill_tm_fields') ); } function add_product_fields($fields) { foreach($this->tm_fields as $element_id=>$name) { $fields['tm_field_'.$element_id] = array('label'=>$name,'colname'=>$name,'checked'=>1); } return $fields; } //TWEAK output for each field function format_line($tm_field) { return $tm_field['value']; // can use $tm_field['name'], $tm_field['price'] , $tm_field['quantity'] } function fill_tm_fields($item_meta) { // Gather TM values to array $product_fields = array(); $product_fields[] = array(); //Cart Fees if( isset($item_meta["_tmcartfee_data"]) AND is_array($tmfields = maybe_unserialize($item_meta["_tmcartfee_data"][0])) ) { foreach($tmfields[0] as $tm_field) { $element_id = $tm_field['section']; if( !isset($product_fields[$element_id]) ) $product_fields[$element_id] = array(); $product_fields[$element_id][] = $this->format_line($tm_field); } } //Cart Items if( isset($item_meta["_tmcartepo_data"]) AND is_array($tmfields = maybe_unserialize($item_meta["_tmcartepo_data"][0])) ) { foreach($tmfields as $tm_field) { $element_id = $tm_field['section']; if( !isset($product_fields[$element_id]) ) $product_fields[$element_id] = array(); $product_fields[$element_id][] = $this->format_line($tm_field); } } //make list foreach($product_fields as $element_id=>$values) $product_fields[ $element_id ] = join("\n", $values); // add to item meta foreach($this->tm_fields as $element_id=>$name) { // it must be array ! $item_meta['tm_field_'.$element_id] = array( isset($product_fields[$element_id]) ? $product_fields[$element_id] : "" ); } return $item_meta; } } new WOE_add_extra_fields();