Редирект на произвольную страницу «Спасибо» после оформления заказа

По умолчанию после оформления заказа / оплаты пользователя перенаправляет на стандартную страницу WooCommerce «Заказ принят». Но что, если вам полностью хочется передалать станицу «Спасибо»?

Сделать полноценный лендос – добавить туда предложения партнёров например. В таком случае не очень удобно будет всё это менять в шаблоне WooCommerce, проще редиректнуть на какую-то произольную страницу.

Прежде чем мы начнём, хочу порекомендовать вам свой видеокурс по WooCommerce 🚀

Способ 1. Редирект уже на самой странице «Заказ принят»

Когда мы говорим о редиректах в WordPress, мы всегда имеем ввиду экшн-хук template_redirect. И данная ситуация не исключение.

Код из этого урока можете вставлять в файл functions.php вашей текущей темы, хорошо бы, если это дочерняя тема или ваша кастомная.

add_action( 'template_redirect', 'truemisha_redirect_to_thank_you' );
 
function truemisha_redirect_to_thank_you() {
 
	// если не страница "Заказ принят", то ничего не делаем
	if( ! is_order_received_page() ) {
		return;
	}
 
	// неплохо бы проверить статус заказа, не редиректим зафейленные заказы
	if( isset( $_GET[ 'key' ] ) ) {
		$order_id = wc_get_order_id_by_order_key( $_GET[ 'key' ] );
		$order = wc_get_order( $order_id );
		if( $order->has_status( 'failed' ) ) {
			return;
		}
	}
 
 
	wp_redirect( site_url( 'new-thank-you' ) );
	exit;
 
}
  • Нахождение на странице «Заказ принят» можно проверить условным тегом is_order_received_page().
  • Так как стандартная страница «Спасибо» WooCommerce используется на только для успешных заказов, но и для тех, оплата которых не прошла, то мы добавляем проверку на строках 10-17, чтобы редиректить только успешные заказы.

Способ 2. Подмена урла страницы «Заказ принят» в хуке

Тут мы по сути экономим на одном редиректе. А ещё взгляните, как сильно упростился наш код.

add_action( 'woocommerce_get_return_url', 'truemisha_redirect_to_thank_you_2', 90, 2 );
 
function truemisha_redirect_to_thank_you_2( $thank_you_url, $order ) {
 
	// неплохо бы проверить статус заказа, не редиректим зафейленные заказы
	if( $order->has_status( 'failed' ) ) {
		return $thank_you_url;
	}
 
	return site_url( 'new-thank-you' );
 
}

Выбирайте тот способ, который вы считаете более правильным или удобным для себя.

Миша

В последние годы я долго не знал, что мне делать с сайтом misha.blog, ведь он практически не приносит никакого профита, но недавно я осознал, что моя миссия – способствовать распространению WordPress. Ведь WordPress – это лучший движок для разработки сайтов – как для тех, кто готов использовать заложенную структуру этой CMS, так и для тех, кто предпочитает headless решения.

Сам же я впервые познакомился с WordPress в 2009 году. Организатор WordCamp. Преподаватель в школах Epic Skills и LoftSchool.

Если вам нужна помощь с вашим сайтом или может даже разработка с нуля на WordPress / WooCommerce — пишите. Я и моя команда сделаем вам всё на лучшем уровне.

Оставить комментарий

Если вы хотите добавить код, не забудьте обернуть его в <pre lang="php"></pre>, если же код – меньше одной строчки, то можно и в <code></code>.