' . __('Provider:', 'wc_shipment_tracking') . '
';
echo '' . __('Custom Provider', 'wc_shipment_tracking') . '';
$selected_provider = get_post_meta( $post->ID, '_tracking_provider', true );
if ( ! $selected_provider )
$selected_provider = sanitize_title( apply_filters( 'woocommerce_shipment_tracking_default_provider', '' ) );
foreach ( $this->get_providers() as $provider_group => $providers ) {
echo '';
foreach ( $providers as $provider => $url ) {
echo '' . $provider . '';
}
echo '';
}
echo ' ';
woocommerce_wp_text_input( array(
'id' => 'custom_tracking_provider',
'label' => __('Provider Name:', 'wc_shipment_tracking'),
'placeholder' => '',
'description' => '',
'value' => get_post_meta( $post->ID, '_custom_tracking_provider', true )
) );
woocommerce_wp_text_input( array(
'id' => 'tracking_number',
'label' => __('Tracking number:', 'wc_shipment_tracking'),
'placeholder' => '',
'description' => '',
'value' => get_post_meta( $post->ID, '_tracking_number', true )
) );
woocommerce_wp_text_input( array(
'id' => 'custom_tracking_link',
'label' => __('Tracking link:', 'wc_shipment_tracking'),
'placeholder' => 'http://',
'description' => '',
'value' => get_post_meta( $post->ID, '_custom_tracking_link', true )
) );
woocommerce_wp_text_input( array(
'id' => 'date_shipped',
'label' => __('Date shipped:', 'wc_shipment_tracking'),
'placeholder' => 'YYYY-MM-DD',
'description' => '',
'class' => 'date-picker-field',
'value' => ( $date = get_post_meta( $post->ID, '_date_shipped', true ) ) ? date( 'Y-m-d', $date ) : ''
) );
// Live preview
echo '
' . __('Preview:', 'wc_shipment_tracking') . ' ' . __('Click here to track your shipment', 'wc_shipment_tracking') . '
'; $provider_array = array(); foreach ( $this->get_providers() as $providers ) { foreach ( $providers as $provider => $format ) { $provider_array[sanitize_title( $provider )] = urlencode( $format ); } } $js = " jQuery('p.custom_tracking_link_field, p.custom_tracking_provider_field').hide(); jQuery('input#custom_tracking_link, input#tracking_number, #tracking_provider').change(function(){ var tracking = jQuery('input#tracking_number').val(); var provider = jQuery('#tracking_provider').val(); var providers = jQuery.parseJSON( '" . json_encode( $provider_array ) . "' ); var postcode = jQuery('#_shipping_postcode').val(); if ( ! postcode ) postcode = jQuery('#_billing_postcode').val(); postcode = encodeURIComponent( postcode ); var link = ''; if ( providers[ provider ] ) { link = providers[provider]; link = link.replace( '%251%24s', tracking ); link = link.replace( '%252%24s', postcode ); link = decodeURIComponent( link ); jQuery('p.custom_tracking_link_field, p.custom_tracking_provider_field').hide(); } else { jQuery('p.custom_tracking_link_field, p.custom_tracking_provider_field').show(); link = jQuery('input#custom_tracking_link').val(); } if ( link ) { jQuery('p.preview_tracking_link a').attr('href', link); jQuery('p.preview_tracking_link').show(); } else { jQuery('p.preview_tracking_link').hide(); } }).change(); "; if ( function_exists( 'wc_enqueue_js' ) ) { wc_enqueue_js( $js ); } else { $woocommerce->add_inline_js( $js ); } } /** * Order Downloads Save * * Function for processing and storing all order downloads. */ public function save_meta_box( $post_id, $post ) { if ( isset( $_POST['tracking_number'] ) ) { // Download data $tracking_provider = wc_clean( $_POST['tracking_provider'] ); $custom_tracking_provider = wc_clean( $_POST['custom_tracking_provider'] ); $custom_tracking_link = wc_clean( $_POST['custom_tracking_link'] ); $tracking_number = wc_clean( $_POST['tracking_number'] ); $date_shipped = wc_clean( strtotime( $_POST['date_shipped'] ) ); // Update order data update_post_meta( $post_id, '_tracking_provider', $tracking_provider ); update_post_meta( $post_id, '_custom_tracking_provider', $custom_tracking_provider ); update_post_meta( $post_id, '_tracking_number', $tracking_number ); update_post_meta( $post_id, '_custom_tracking_link', $custom_tracking_link ); update_post_meta( $post_id, '_date_shipped', $date_shipped ); } } /** * Display Shipment info in the frontend (order view/tracking page). * * @access public */ public function display_tracking_info( $order_id, $for_email = false ) { $tracking_provider = get_post_meta( $order_id, '_tracking_provider', true ); $tracking_number = get_post_meta( $order_id, '_tracking_number', true ); $date_shipped = get_post_meta( $order_id, '_date_shipped', true ); $postcode = get_post_meta( $order_id, '_shipping_postcode', true ); if ( ! $postcode ) $postcode = get_post_meta( $order_id, '_billing_postcode', true ); if ( ! $tracking_number ) return; if ( $date_shipped ) $date_shipped = ' ' . sprintf( __( 'el %s', 'wc_shipment_tracking' ), date_i18n( __( 'l j F Y', 'wc_shipment_tracking'), $date_shipped ) ); $tracking_link = ''; if ( $tracking_provider ) { $link_format = ''; foreach ( $this->get_providers() as $providers ) { foreach ( $providers as $provider => $format ) { if ( sanitize_title( $provider ) == $tracking_provider ) { $link_format = $format; $tracking_provider = $provider; break; } } if ( $link_format ) break; } if ( $link_format ) { $link = sprintf( $link_format, $tracking_number, urlencode( $postcode ) ); if ( $for_email ) { $tracking_link = sprintf( __('Haga clic aquí para rastrear su envío', 'wc_shipment_tracking') . ': %s', $link, $link ); } else { $tracking_link = sprintf( '' . __('Haga clic aquí para rastrear su envío', 'wc_shipment_tracking') . '.', $link, $link ); } } $tracking_provider = ' ' . __('por', 'wc_shipment_tracking') . ' ' . $tracking_provider . ''; echo wpautop( sprintf( __('Su pedido fue enviado%s%s. El número de rastreo %s. %s', 'wc_shipment_tracking'), $date_shipped, $tracking_provider, $tracking_number, $tracking_link ) ); } else { $custom_tracking_link = get_post_meta( $order_id, '_custom_tracking_link', true ); $custom_tracking_provider = get_post_meta( $order_id, '_custom_tracking_provider', true ); if ( $custom_tracking_provider ) $tracking_provider = ' ' . __('por', 'wc_shipment_tracking') . ' ' . $custom_tracking_provider . ''; else $tracking_provider = ''; if ( $custom_tracking_link ) { $tracking_link = sprintf( '' . __('Haga clic aquí para rastrear su envío', 'wc_shipment_tracking') . '.', $custom_tracking_link . $tracking_number ); } elseif ( strstr( $tracking_number, '%s.', $tracking_number, $tracking_number ); } else { $tracking_link = ''; } echo wpautop( sprintf( __('Su pedido fue enviado%s%s. El número de rastreo %s. %s', 'wc_shipment_tracking'), $date_shipped, $tracking_provider, $tracking_number, $tracking_link ) ); } } /** * Display shipment info in customer emails. * * @access public * @return void */ public function email_display( $order ) { $this->display_tracking_info( $order->id, true ); } /** * Adds support for Customer/Order CSV Export by adding appropraite column headers * * @param array $headers existing array of header key/names for the CSV export * @return array */ public function add_tracking_info_to_csv_export_column_headers( $headers ) { $headers['tracking_provider'] = 'tracking_provider'; $headers['custom_tracking_provider'] = 'custom_tracking_provider'; $headers['tracking_number'] = 'tracking_number'; $headers['custom_tracking_link'] = 'custom_tracking_link'; $headers['date_shipped'] = 'date_shipped'; return $headers; } /** * Adds support for Customer/Order CSV Export by adding data for the column headers * * @param array $order_data generated order data matching the column keys in the header * @param WC_Order $order order being exported * @param \WC_CSV_Export_Generator $csv_generator instance * @return array */ public function add_tracking_info_to_csv_export_column_data( $order_data, $order, $csv_generator ) { $tracking_provider = get_post_meta( $order->id, '_tracking_provider', true ); $custom_tracking_provider = get_post_meta( $order->id, '_custom_tracking_provider', true ); $tracking_number = get_post_meta( $order->id, '_tracking_number', true ); $custom_tracking_link = get_post_meta( $order->id, '_custom_tracking_link', true ); $date_shipped = get_post_meta( $order->id, '_date_shipped', true ); $tracking_data = array( 'tracking_provider' => $tracking_provider, 'custom_tracking_provider' => $custom_tracking_provider, 'tracking_number' => $tracking_number, 'custom_tracking_link' => $custom_tracking_link, 'date_shipped' => $date_shipped ? date_i18n( __( 'Y-m-d', 'wc_shipment_tracking' ), $date_shipped ) : '', ); $new_order_data = array(); if ( isset( $csv_generator->order_format ) && ( 'default_one_row_per_item' == $csv_generator->order_format || 'legacy_one_row_per_item' == $csv_generator->order_format ) ) { foreach ( $order_data as $data ) { $new_order_data[] = array_merge( (array) $data, $tracking_data ); } } else { $new_order_data = array_merge( $order_data, $tracking_data ); } return $new_order_data; } /** * Prevents data being copied to subscription renewals */ public function woocommerce_subscriptions_renewal_order_meta_query( $order_meta_query, $original_order_id, $renewal_order_id, $new_order_role ) { $order_meta_query .= " AND `meta_key` NOT IN ( '_tracking_provider', '_custom_tracking_provider', '_tracking_number', '_custom_tracking_link', '_date_shipped' )"; return $order_meta_query; } } } /** * Register this class globally */ $GLOBALS['WC_Shipment_Tracking'] = new WC_Shipment_Tracking(); }