
在 woocommerce 中,当用户完成购买并被重定向到“订单已接收”(order-received)页面时,直接使用 get_the_id() 或依赖全局 $post 对象来获取购物车中产品的自定义字段是不可行的。这是因为在 template_redirect 钩子下,order-received 页面上下文通常指向的是该页面的本身,而非购买的商品。为了正确地获取与已购买商品相关的自定义字段,我们需要通过订单对象来访问其包含的商品信息。
正确的做法是首先获取当前的订单对象,然后遍历订单中的所有商品,针对每个商品获取其对应的产品ID,进而读取该产品的自定义字段。一旦找到包含重定向URL的自定义字段,即可执行重定向操作。
以下是实现此功能的详细代码和解释:
/**
* 根据产品自定义字段在 WooCommerce 结账后进行重定向。
*
* 此函数在 template_redirect 钩子上执行,用于检查是否在订单接收页面,
* 然后获取订单商品的产品ID,并根据产品自定义字段的值进行重定向。
*/
add_action('template_redirect', 'my_redirect_after_purchase');
function my_redirect_after_purchase() {
// 1. 验证当前页面是否为 WooCommerce 订单接收页面,并检查订单密钥是否存在。
// 确保我们只在正确的上下文执行重定向逻辑。
if ( !is_wc_endpoint_url( 'order-received' ) || empty( $_GET['key'] ) ) {
return;
}
// 2. 使用订单密钥获取订单ID。
// 订单密钥是安全获取订单信息的关键。
$order_id = wc_get_order_id_by_order_key( $_GET['key'] );
// 3. 根据订单ID获取订单对象。
// 订单对象包含了所有购买商品的信息。
$order = wc_get_order( $order_id );
// 4. 遍历订单中的所有商品项。
// 对于每个购买的商品,我们需要检查其自定义字段。
foreach( $order->get_items() as $item ) {
// 5. 从当前商品项中获取产品ID。
// $item['product_id'] 包含的是简单产品或可变产品父产品的ID。
// 如果是可变产品变体,可以使用 $item['variation_id']。
$product_id = $item['product_id'];
// 6. 根据产品ID获取名为 '_my_redirect' 的自定义字段值。
// '_my_redirect' 是您在产品编辑页面添加的自定义字段的键名。
$my_redirect = get_post_meta( $product_id, '_my_redirect', true );
// 7. 如果自定义字段值不为空,则执行重定向。
if ( !empty( $my_redirect ) ) {
// 使用 wp_redirect 进行重定向,并确保 URL 是安全的。
wp_redirect( esc_url( $my_redirect ) );
exit; // 重定向后必须调用 exit 终止脚本执行。
}
}
}add_action('template_redirect', 'my_redirect_after_purchase');
if ( !is_wc_endpoint_url( 'order-received' ) || empty( $_GET['key'] ) ) { return; }
$order_id = wc_get_order_id_by_order_key( $_GET['key'] );
$order = wc_get_order( $order_id );
foreach( $order->get_items() as $item ) { ... }
$my_redirect = get_post_meta( $product_id, '_my_redirect', true );
if ( !empty( $my_redirect ) ) { wp_redirect( esc_url( $my_redirect ) ); exit; }
通过上述方法,您可以灵活地根据 WooCommerce 产品的自定义字段,在用户结账后实现动态且有针对性的页面重定向,从而满足各种个性化的业务需求。
以上就是实现 WooCommerce 结账后基于产品自定义字段的动态重定向的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号