WooCommerce 支付成功后,默认会跳转到Thankyou页面,在这个页面可以看到订单信息和订单中的商品。对于一些业务来说,支付成功后需要跳转到商品页面,在商品页面进行一些操作。比如,在付费阅读的站点中,我们是用 WooCommerce 作为付费阅读功能的支付系统,在支付成功后,用户可以直接跳转回商品(付费文章)页面来阅读付费的内容,而不用再点击一下来阅读文章。
支付后跳转回商品页面的实现代码
得益于 WordPress 灵活的 Hook 系统,在 WooCommerce 中实现这个功能非常容易,下面是具体的代码。
add_action('template_redirect', function ()
{
global $wp;
if (is_checkout() && ! empty($wp->query_vars[ 'order-received' ])) {
$order_id = $wp->query_vars[ 'order-received' ];
$order = wc_get_order($order_id);
$items = $order->get_items();
foreach ($items as $item) {
$product = $item->get_product();
wp_redirect(get_permalink($product->get_id()));
}
}
});
在上面的代码中,我们通过检查当前页面是否为支付页,以及页面是否包含order-received
这个查询参数来判断页面是否为支付成功页面,如果是,我们就可以遍历订单中的商品来获取商品链接了,因为在这样的系统中,一个订单中只有一个商品,我们直接在循环中跳转到第一个商品页面即可。
实现一次只能购买一个商品的参考代码
实现一次只允许购买一个商品的方法也很简单,只需要在商品加入购物车之前,清空购物车即可。
add_filter('woocommerce_add_to_cart_validation', function ($passed)
{
wc_empty_cart();
return $passed;
}, 9999);
在实际应用中的注意事项
上面的代码默认把全部订单的支付成功页面都跳转回了订单中第一个商品页面,如果网站中还有其他类型的订单,我们可能需要在跳转之前做一些判断,如果商品类型为付费阅读商品,或者订单中只有一个商品时才跳转,其他情况显示默认的支付成功页面。
另外,支付成功并不代表订单完成,因为有些支付是异步的线下付款,这种情况需要根据实际的订单状态来进行判断处理。