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

По умолчанию после оформления заказа / оплаты пользователя перенаправляет на стандартную страницу 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' );
 
}

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

Миша

Впервые познакомился с WordPress в 2009 году. Организатор и спикер на конференциях WordCamp. Преподаватель в школе Нетология.

Пишите, если нужна помощь с сайтом или разработка с нуля.

Комментарии — 10

Чтобы оставить комментарий, пожалуйста, зарегистрируйтесь или войдите.

Миша Рудрастых и WordPress

Полезности из мира WordPress и жизни студии.

Мой телеграм-канал