如何在Woocommerce的加入购物车与结账流程之间添加自定义页面
WooCommerce 购物车到结账节点插入自定义页面方案
方案1:内置钩子+代码实现(灵活性最高,适合有代码基础的用户)
你已经完成了自定义页面创建,只需按以下步骤配置跳转和校验逻辑即可:
- 先记录你创建好的所有自定义页面的
slug(比如条款页是custom-terms、抽奖页是coupon-lottery)和页面对应ID,后续调用需要用到 - 第一步:修改购物车页面结账按钮的默认跳转地址,把默认跳转的结账页替换为你流程里第一个自定义页面
将以下代码添加到当前主题的functions.php文件,或者自定义代码片段插件中:
// 替换购物车结账按钮跳转地址为首个自定义页面 add_filter( 'woocommerce_get_checkout_url', 'custom_redirect_after_cart', 999 ); function custom_redirect_after_cart( $checkout_url ) { // 仅在购物车页面且购物车非空时触发跳转 if ( is_cart() && ! WC()->cart->is_empty() ) { // 替换为你首个自定义页面的slug $first_custom_page_slug = 'custom-terms'; $checkout_url = get_permalink( get_page_by_path( $first_custom_page_slug ) ); } return $checkout_url; }
- 第二步:配置自定义页面的顺序跳转逻辑
按你规划的流程顺序,比如 购物车→T&C页→优惠券领取页→抽奖页→结账页,给每个自定义页面添加下一步按钮,按钮跳转地址填写下一个节点的页面链接,最后一个自定义页面的下一步按钮直接链接到WooCommerce默认结账页即可。 - 第三步(可选):添加强制流程校验,防止用户跳过步骤
如果要求用户必须走完所有自定义步骤才能进入结账页,可以添加校验逻辑,示例代码如下:
// 校验用户是否完成全部自定义流程,未完成则跳转回对应步骤 add_action( 'template_redirect', 'custom_checkout_process_validation', 999 ); function custom_checkout_process_validation() { // 仅在访问结账页且购物车非空时触发校验 if ( is_checkout() && ! is_wc_endpoint_url( 'order-received' ) && ! WC()->cart->is_empty() ) { // 示例:校验用户是否已同意T&C,可替换为你自己的校验逻辑,比如是否领取优惠券、是否参与抽奖 if ( ! isset( $_COOKIE['agreed_terms'] ) ) { // 未完成对应步骤则跳转回对应页面 wp_redirect( get_permalink( get_page_by_path( 'custom-terms' ) ) ); exit; } } }
你可以根据流程节点设置对应的校验标记,比如用户点击同意T&C按钮时设置对应cookie、领取优惠券后设置对应状态标记即可。
方案2:流程编辑器插件配置(适合无代码基础的用户)
- 你可以使用支持自定义WooCommerce购物流的扩展插件,在插件的可视化编辑器里直接拖拽调整流程节点,把你已经创建好的自定义页面添加到购物车和结账页之间的位置,设置好每个节点的跳转逻辑和前置条件即可,无需编写代码。
- 配置时建议开启强制流程校验选项,避免用户直接输入结账页地址跳过你添加的自定义步骤。
注意事项
- 如果是多语言站点,要给自定义页面配置对应语言的版本,跳转时根据当前站点语言加载对应页面
- 所有修改完成后请清空WooCommerce缓存、浏览器缓存,走完整购物流测试,确认跳转逻辑、校验逻辑都正常
- 修改
functions.php文件前建议先做站点全量备份,避免代码语法错误导致站点报错
内容的提问来源于stack exchange,提问作者hindisong.cc
相关产品推荐
相关产品推荐

