custom_statuses = array( 'wc-to-print' => array( 'label' => _x('Prepare to Printing', 'Order status', 'studiou-wc-ord-print-statuses'), 'label_count' => _n_noop('Prepare to Printing (%s)', 'Prepare to Printing (%s)', 'studiou-wc-ord-print-statuses') ), 'wc-in-print' => array( 'label' => _x('In Printing', 'Order status', 'studiou-wc-ord-print-statuses'), 'label_count' => _n_noop('In Printing (%s)', 'In Printing (%s)', 'studiou-wc-ord-print-statuses') ) ); add_action('init', array($this, 'register_custom_order_statuses')); add_filter('wc_order_statuses', array($this, 'add_custom_order_statuses_to_list')); add_action('woocommerce_order_status_changed', array($this, 'handle_status_transitions'), 10, 3); add_action('woocommerce_payment_complete', array($this, 'set_order_processing_status')); } public function register_custom_order_statuses() { foreach ($this->custom_statuses as $status_slug => $status_args) { register_post_status($status_slug, array( 'label' => $status_args['label'], 'public' => true, 'exclude_from_search' => false, 'show_in_admin_all_list' => true, 'show_in_admin_status_list' => true, 'label_count' => $status_args['label_count'] )); } UtilsLog::log('Statuses registered'); } public function add_custom_order_statuses_to_list($order_statuses) { $new_order_statuses = array(); foreach ($order_statuses as $key => $status) { $new_order_statuses[$key] = $status; if ($key === 'wc-processing') { foreach ($this->custom_statuses as $status_slug => $status_args) { $new_order_statuses[$status_slug] = $status_args['label']; } } } return $new_order_statuses; } public function handle_status_transitions($order_id, $old_status, $new_status) { // Handle status transitions here // For example: UtilsLog::log('Order #' . $order_id . ' status change ' . $old_status . ' -> ' . $new_status); if ($new_status === 'to-print') { update_post_meta($order_id, 'to_print_date', current_time('mysql')); } elseif ($new_status === 'in-print') { update_post_meta($order_id, 'in_print_date', current_time('mysql')); } } public function set_order_processing_status($order_id) { UtilsLog::log('Order #' . $order_id . ' payment complete'); $order = wc_get_order($order_id); if ($order && !$order->has_status('completed')) { UtilsLog::log('Order #' . $order_id . ' will be move to processing'); $order->update_status('processing', __('Payment received, order is now processing.', 'studiou-wc-ord-print-statuses')); // Add a note to the order $order->add_order_note(__('Order automatically set to processing by Studiou WC Order Print Statuses plugin.', 'studiou-wc-ord-print-statuses')); } } public function get_custom_statuses() { return $this->custom_statuses; } }