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;
}
}
}
Schreibe einen Kommentar