You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WooCommerce售后跳转自定义页面插件开发问题求助

问题原因
  • woocommerce_payment_complete 钩子仅在在线支付成功完成时触发,而货到付款(COD)属于离线支付方式,订单创建后直接进入「处理中」状态,不会触发该钩子。
解决方案

改用 woocommerce_thankyou 钩子——这个钩子会在用户完成结账、进入「感谢页面」时触发,适用于所有支付方式,包括COD。同时修正订单项获取产品ID的错误(原代码用get_id()获取的是订单项ID,而非产品ID)。

修正后的完整代码
<?php
/*
Plugin Name: Custom Redirect After Sale
Description: Redirects customers to a custom page after a successful sale.
*/

// 注册产品自定义元框
add_action( 'add_meta_boxes', 'custom_redirect_meta_box' );
function custom_redirect_meta_box() {
    add_meta_box( 'custom_redirect_meta_box', '自定义跳转URL', 'custom_redirect_meta_box_callback', 'product', 'side' );
}

function custom_redirect_meta_box_callback( $post ) {
    $value = get_post_meta( $post->ID, '_custom_redirect_url', true );
    echo '<label for="custom_redirect_url">自定义跳转URL:</label>';
    echo '<input type="text" id="custom_redirect_url" name="custom_redirect_url" value="' . esc_attr( $value ) . '" style="width:100%">';
}

// 保存产品自定义元数据
add_action( 'save_post_product', 'save_custom_redirect_meta_box_data' );
function save_custom_redirect_meta_box_data( $post_id ) {
    // 验证权限与非自动保存
    if ( !current_user_can( 'edit_post', $post_id ) || defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
        return;
    }
    
    if ( isset( $_POST['custom_redirect_url'] ) ) {
        update_post_meta( $post_id, '_custom_redirect_url', sanitize_text_field( $_POST['custom_redirect_url'] ) );
    }
}

// 结账完成后跳转至自定义页面
add_action( 'woocommerce_thankyou', 'custom_redirect_after_sale' );

function custom_redirect_after_sale( $order_id ) {
    if ( !$order_id ) return;
    
    $order = wc_get_order( $order_id );
    $items = $order->get_items();
    
    // 获取订单中第一个产品
    $order_item = reset( $items );
    if ( !$order_item ) return;
    
    // 获取产品ID(注意:订单项用get_product_id()获取关联产品ID)
    $product_id = $order_item->get_product_id();
    $redirect_url = get_post_meta( $product_id, '_custom_redirect_url', true );
    
    if ( $redirect_url ) {
        wp_redirect( esc_url( $redirect_url ) );
        exit;
    }
}
额外优化说明
  • 增加了权限验证与自动保存判断,避免不必要的元数据更新
  • 对跳转URL使用esc_url()进行安全过滤,符合WordPress安全规范
  • 增加了空值判断,避免因订单无商品等异常情况导致报错

内容的提问来源于stack exchange,提问作者dtommy1979

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 04:20:23