mollie / WooCommerce

Official Mollie extension for WooCommerce
https://wordpress.org/plugins/mollie-payments-for-woocommerce/
Other
131 stars 53 forks source link

Email translation lost when being redirected to the thank you page #871

Open TommyKolkman opened 9 months ago

TommyKolkman commented 9 months ago

At first let me say I know that you guys are not officially supporting Polylang -- I'm just investigating an issue with it and am a bit lost which plugin is responsible.

Situation:

When a payment is redirected back via the webhookUrl, the order is updated to processing, of course. On that moment, the 'polylang-wc' plugin adds a filter that sets the language:

    /**
     * Setups actions related to emails sent to a customer.
     *
     * @since 1.7
     *
     * @return void
     */
    protected function customer_emails_init() {
        /**
         * Filters the actions used to send translated customer emails related to an order.
         * The actions in the list must pass a `WC_Order` or order id as first parameter.
         *
         * @since 1.6
         *
         * @param string[] $email_actions Array of actions used to send order emails.
         */
        $actions = apply_filters(
            'pllwc_order_email_actions',
            array(
                // Completed order.
                'woocommerce_order_status_completed_notification',
                // Customer note.
                'woocommerce_new_customer_note_notification',
                // On hold.
                'woocommerce_order_status_failed_to_on-hold_notification',
                'woocommerce_order_status_pending_to_on-hold_notification',
                'woocommerce_order_status_cancelled_to_on-hold_notification',
                // Processing.
                'woocommerce_order_status_cancelled_to_processing_notification',
                'woocommerce_order_status_failed_to_processing_notification',
                'woocommerce_order_status_on-hold_to_processing_notification',
                'woocommerce_order_status_pending_to_processing_notification',
                // Refunded order.
                'woocommerce_order_fully_refunded_notification',
                'woocommerce_order_partially_refunded_notification',
            )
        );

        foreach ( $actions as $action ) {
            add_action( $action, array( $this, 'before_order_email' ), 1 ); // Switch the language for the email.
            add_action( $action, array( $this, 'after_email' ), 999 ); // Switch the language back after the email has been sent.
        }
    }

    /**
     * Sets the email language depending on the order language.
     * Hooked to order notifications.
     *
     * @since  0.1
     *
     * @param int|array|WC_Order $order Order or order ID.
     * @return void
     */
    public function before_order_email( $order ) {
        if ( is_numeric( $order ) ) {
            $order_id = $order;
        } elseif ( is_array( $order ) ) {
            $order_id = $order['order_id'];
        } elseif ( is_object( $order ) ) {
            $order_id = $order->get_id();
        }

        if ( ! empty( $order_id ) ) {
            $lang = $this->data_store->get_language( $order_id );
            $language = PLL()->model->get_language( $lang );
            if ( $language ) {
                $this->set_email_language( $language );
            }
        }
    }

    /**
     * Restores the current language after the email has been sent.
     * Hooked to order and user notifications.
     *
     * @since 0.1
     *
     * @return void
     */
    public function after_email() {
        if ( empty( $this->previous_languages ) ) {
            return;
        }

        $previous = array_pop( $this->previous_languages );

        if ( $previous['switched'] ) {
            restore_previous_locale();
        }

        PLL()->curlang = $previous['language'];
    }

This does work, I can confirm from making a status change on an order in the back-end. With other payment methods it works too.

However, when using Mollie it does not.

So I am investigating:

The clients customers are receiving default mails now, while they should get them in the site's language.

Hope you guys can help.

TommyKolkman commented 7 months ago

Bumping this: anyone?