class-wcml-payment-method-filter.php
66 lines
| 1 | <?php |
| 2 | |
| 3 | use WCML\PaymentGateways\Strings; |
| 4 | use WPML\FP\Fns; |
| 5 | |
| 6 | class WCML_Payment_Method_Filter { |
| 7 | private $payment_gateway_cache = []; |
| 8 | |
| 9 | public function add_hooks() { |
| 10 | add_filter( |
| 11 | 'woocommerce_order_get_payment_method_title', |
| 12 | Fns::withoutRecursion( Fns::identity(), [ $this, 'payment_method_string' ] ), |
| 13 | 10, |
| 14 | 2 |
| 15 | ); |
| 16 | } |
| 17 | |
| 18 | public function payment_method_string( $title, $object ) { |
| 19 | |
| 20 | if ( ! empty( $title ) && $object->get_id() ) { |
| 21 | $payment_gateway = $this->get_payment_gateway( $object->get_id() ); |
| 22 | |
| 23 | if ( isset( $_POST['payment_method'] ) && $payment_gateway->id !== $_POST['payment_method'] && WC()->payment_gateways() ) { |
| 24 | $payment_gateways = WC()->payment_gateways()->payment_gateways(); |
| 25 | if ( isset( $payment_gateways[ $_POST['payment_method'] ] ) ) { |
| 26 | $payment_gateway = $payment_gateways[ $_POST['payment_method'] ]; |
| 27 | } |
| 28 | } |
| 29 | |
| 30 | if ( $payment_gateway ) { |
| 31 | $settings = maybe_unserialize( get_option( 'woocommerce_' . $payment_gateway->id . '_settings' ) ); |
| 32 | |
| 33 | $original_title = ! empty( $settings['title'] ) ? $settings['title'] : $payment_gateway->title; |
| 34 | if ( ! is_string( $original_title ) ) { |
| 35 | return $title; |
| 36 | } |
| 37 | $title = apply_filters( |
| 38 | 'wpml_translate_single_string', |
| 39 | $original_title, |
| 40 | Strings::TRANSLATION_DOMAIN, |
| 41 | Strings::getStringName( $payment_gateway->id, 'title' ) |
| 42 | ); |
| 43 | |
| 44 | if ( $title === $payment_gateway->title ) { |
| 45 | if ( 'cheque' === $payment_gateway->id ) { |
| 46 | $title = _x( $payment_gateway->title, 'Check payment method', 'woocommerce' ); |
| 47 | } else { |
| 48 | $title = __( $payment_gateway->title, 'woocommerce' ); |
| 49 | } |
| 50 | } |
| 51 | } |
| 52 | } |
| 53 | |
| 54 | return $title; |
| 55 | } |
| 56 | |
| 57 | private function get_payment_gateway( $object_id ) { |
| 58 | if ( ! array_key_exists( $object_id, $this->payment_gateway_cache ) ) { |
| 59 | $payment_gateway = wc_get_payment_gateway_by_order( $object_id ); |
| 60 | $this->payment_gateway_cache[ $object_id ] = $payment_gateway; |
| 61 | } |
| 62 | |
| 63 | return $this->payment_gateway_cache[ $object_id ]; |
| 64 | } |
| 65 | } |
| 66 |