我正在尝试为显示woocommerce插件的2个不同的感谢页面做一些新的工作。当用户选择了不同的运输方式,如本地提货,我想在结账后将他们重定向到不同的感谢页面。
我已经添加了以下代码,但它不工作重定向到默认值。我做错了什么
// Thank you page redirect
add_action( 'template_redirect', 'woo_custom_redirect_after_purchase' );
function woo_custom_redirect_after_purchase() {
global $wp;
if ( is_checkout() && !empty( $wp->query_vars['order-received'] ) ) {
wp_redirect( 'https://mywebsite.com/thank-you-page-1/' );
exit;
}
elseif( $order->has_shipping_method('local_pickup:7') ) {
wp_redirect( 'https://mywebsite.com/thank-you-page-2/' );
exit;
}
elseif( $order->has_shipping_method('flat_rate:1') ) {
wp_redirect( 'https://mywebsite.com/thank-you-page-3/' );
exit;
}
}
不知道发生了什么,可能是我错过了或做错了什么。
一定要重定向吗?我不知道你到底在做什么,但也许根据装运方式显示不同的内容就足够了?如果是,你可以编辑thankyou.php模板。
首先将文件plugins/woocommerce/templates/checkout/thankyou.php
复制到主题目录themes/(your-theme)/woocommerce/checkout/tankyou.php
。在这里,您可以更改thankyou模板,而不会在woocommerce更新后丢失更改。(模板结构&;(通过主题重写模板)
现在你可以调整thankyou.php
(在你的主题目录),并在正确的地方添加你的条件:
if ( $order->has_shipping_method('local_pickup:7') ) {
echo "thank you content 2";
}
elseif ( $order->has_shipping_method('flat_rate:1') ) {
include 'path-to/my-tankyou-content3-file.php';
}
在函数中,您没有定义$order
。您需要在访问任何方法之前获得$order Object。由于$order
没有定义,其他情况下elseif
都不为真。
// Thank you page redirect
add_action( 'template_redirect', 'woo_custom_redirect_after_purchase' );
function woo_custom_redirect_after_purchase() {
global $wp;
// Get the order object
$order = new WC_Order($wp->query_vars['order-received']);
if ( is_checkout() && !empty( $wp->query_vars['order-received'] ) ) {
wp_redirect( 'https://mywebsite.com/thank-you-page-1/' );
exit;
}
elseif( $order->has_shipping_method('local_pickup:7') ) {
wp_redirect( 'https://mywebsite.com/thank-you-page-2/' );
exit;
}
elseif( $order->has_shipping_method('flat_rate:1') ) {
wp_redirect( 'https://mywebsite.com/thank-you-page-3/' );
exit;
}
}
//使用这个钩子来定位你的感谢页面。
<?php
add_action( 'woocommerce_thankyou', 'your_function_name');
function your_function_name($order_get_id){
// Here comes your code
}