Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
TommyKolkman opened this issue Jan 5, 2024 · 1 comment
Open

Comments

@TommyKolkman
Copy link

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:

  • woocommerce 8.0.1
  • polylang-wc 1.9.2
  • polylang-pro 3.5.3
  • mollie-payments-for-woocommerce 7.4.0

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:

  • Is the Mollie plugin actually firing woocommerce_order_status_pending_to_processing_notification, or does it not use that at all?
  • Could the prioritization of the filters be in the wrong order of some sorts?
  • Would there be a workaround?

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

Hope you guys can help.

@TommyKolkman
Copy link
Author

Bumping this: anyone?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant