load_settings(); add_action('woocommerce_email_order_meta', array($this, 'add_custom_fields_to_email'), 10, 4); add_action('woocommerce_order_details_after_order_table', array($this, 'add_custom_fields_to_order_confirmation'), 10, 1); } private function load_settings() { $settings = get_option('enspireplugins_acfw_settings', array()); $this->custom_fields = isset($settings['custom_fields']) ? $settings['custom_fields'] : array(); } /** * Add custom fields to WooCommerce emails */ public function add_custom_fields_to_email($order, $sent_to_admin, $plain_text, $email) { if (empty($this->custom_fields)) { return; } static $email_displayed_orders = array(); $order_id = $order->get_id(); $email_key = $email->id . '_' . $order_id; if (in_array($email_key, $email_displayed_orders)) { return; } $email_displayed_orders[] = $email_key; $custom_fields_data = $this->get_custom_fields_data($order, 'email'); if (empty($custom_fields_data)) { return; } if (!$this->should_display_in_email($email->id)) { return; } if ($plain_text) { $this->display_plain_text_fields($custom_fields_data); } else { $this->display_fields($custom_fields_data); } } /** * Add custom fields to order confirmation page */ public function add_custom_fields_to_order_confirmation($order) { if (defined('WOOCOMMERCE_CHECKOUT') || is_admin() || wp_doing_ajax()) { return; } if (!is_wc_endpoint_url('order-received')) { return; } static $displayed_orders = array(); $order_id = $order->get_id(); if (in_array($order_id, $displayed_orders)) { return; } $displayed_orders[] = $order_id; if (empty($this->custom_fields)) { return; } $custom_fields_data = $this->get_custom_fields_data($order, 'order_confirmation'); if (empty($custom_fields_data)) { return; } $this->display_fields($custom_fields_data); } /** * Get custom fields data from order */ private function get_custom_fields_data($order, $context = 'email') { $custom_fields_data = array(); $active_fields = array_filter($this->custom_fields, function($field) { return isset($field['active']) && $field['active'] === 'yes'; }); foreach ($active_fields as $field) { if ($context === 'email') { $show_in_context = isset($field['show_in_emails']) && $field['show_in_emails'] === 'yes'; } else { $show_in_context = isset($field['show_in_order_confirmation']) && $field['show_in_order_confirmation'] === 'yes'; } if (!$show_in_context) { continue; } if ($field['type'] === 'heading') { $custom_fields_data[] = array( 'label' => $field['label'], 'value' => '', 'type' => 'heading' ); } else { $field_id = 'enspireplugins_acfw_' . $field['id']; $field_value = $order->get_meta($field_id, true); $has_value = false; if ($field['type'] === 'checkbox') { $has_value = true; } else { $has_value = !empty($field_value) || $field_value === '0' || $field_value === 0; } $custom_fields_data[] = array( 'label' => $field['label'], 'value' => $this->format_field_value($field_value, $field), 'type' => $field['type'], 'has_value' => $has_value ); } } return $custom_fields_data; } /** * Check if we should display fields in this email type */ private function should_display_in_email($email_id) { $allowed_emails = array( 'new_order', 'customer_processing_order', 'customer_completed_order', 'customer_invoice', 'customer_note', 'customer_on_hold_order', 'customer_refunded_order', 'cancelled_order', 'failed_order' ); return in_array($email_id, $allowed_emails); } /** * Display fields */ private function display_fields($custom_fields_data) { ?>