WooCommerce: Warum funktioniert bei mir template_redirect auf benutzerdefinierte Dankeseite nicht?

roses 4798572 1920
Bild von Myriam Zilles auf Pixabay

In Anleitungen aber auch entsprechenden Plugins wird die Weiterleitung auf eine Dankeseite nach einer Bestellung über den Hook template_redirect vorgenommen (manchmal auch schon gesehen, mit woocommerce_thankyou, funktionierte allerdings bei Tests nicht)

Der Code

function custom_plugin_redirect_after_order(){
	global $wp;
	$options = get_option('flxo_catalog_options');
	$redirect = !empty( $options['thankyou_redirect'] ) ? $options['thankyou_redirect'] : false; 

	if ( is_checkout() && ! empty( $wp->query_vars['order-received'] ) && false !== $redirect ) {
		wp_safe_redirect( $redirect );
		exit;
	}
}

Der Hook

$this->loader->add_action( 'template_redirect', $plugin_public, 'custom_plugin_redirect_after_inquiry' );

Doch jedes Szenario ist anders, daher funktioniert nicht immer alles genau so, wie man es erwartet. In diesem Fall gab es beispielsweise ein individuell entwickeltes Plugin zur Erweiterung von WooCommerce.

Unter anderem wurden in diesem Plugin auch benutzerdefinierte Templates vorgehalten, und festgelegt, dass das Plugin die primäre Anlaufstelle ist, die WooCommerce zum Laden von Templates prüfen soll.

$this->loader->add_filter( 'wc_get_template' , $plugin_public, 'custom_plugin_template_replace' , 10 , 5 );
$this->loader->add_filter( 'wc_get_template_part', $plugin_public, 'custom_plugin_template_replace' , 10 , 3 );

Möglicherweise war unser template_redirect zu spät dran, denn die Funktion custom_plugin_redirect_after_order kam nicht zum Zug.

Was (in diesem Fall) funktionierte

add_action( 'woocommerce_before_thankyou', 'my_plugin_custom_redirect' );

function my_plugin_custom_redirect( $order_id ){
	$url = get_the_permalink($page_id); // my thank you page

	$order = new WC_Order( $order_id );
	$order_status = $order->get_status();

	if ( $order_status != 'failed' ) {
		if( filter_var( $url, FILTER_VALIDATE_URL) ){
			wp_redirect( $url );
			exit;
		}
	}
}

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable