0

0

WooCommerce 单产品页复制“加入购物车”按钮并实现自定义重定向

聖光之護

聖光之護

发布时间:2025-10-03 14:24:01

|

977人浏览过

|

来源于php中文网

原创

WooCommerce 单产品页复制“加入购物车”按钮并实现自定义重定向

本教程旨在指导如何在 WooCommerce 单产品页面复制“加入购物车”按钮,并使其在保留原有功能(如购物车商品数据挂钩)的同时,实现点击后重定向至指定自定义页面,而非默认的购物车页面。核心方法包括通过钩子添加新按钮、利用 JavaScript 动态添加标识符,以及使用过滤器根据标识符条件性修改重定向 URL。

在构建复杂的电子商务网站时,我们可能需要在 woocommerce 单产品页面提供多种“加入购物车”功能,例如一个标准的“加入购物车”按钮和一个用于“加入报价清单”的按钮。后者的核心需求是复制标准“加入购物车”按钮的所有功能(包括任何自定义的购物车商品数据处理),但点击后应重定向到特定的自定义页面,而不是默认的购物车页面。本文将详细介绍如何通过三个关键步骤实现这一功能。

步骤一:添加自定义“加入购物车”按钮

首先,我们需要在现有“加入购物车”按钮的下方添加一个新的按钮。为了不直接修改 WooCommerce 模板文件,我们利用 WooCommerce 提供的动作钩子 (woocommerce_after_add_to_cart_button) 来插入我们的自定义按钮。这个新按钮将与原按钮具有相同的 name 和 value 属性(对于简单产品),以确保触发标准的加入购物车流程。关键在于为其添加一个独特的 CSS 类(例如 custom_redirect_button),以便后续通过 JavaScript 进行区分。

以下是添加新按钮的代码示例:

// 添加新的/额外的按钮
function action_woocommerce_after_add_to_cart_button() {
    global $product;

    // 按钮文本
    $button_text = __( '加入报价清单', 'woocommerce' ); // 可以自定义文本

    // 检查是否为 WooCommerce 产品
    if ( is_a( $product, 'WC_Product' ) ) {
        // 简单产品
        if ( $product->is_type( 'simple' ) ) {
            echo '<button type="submit" name="add-to-cart" value="'. esc_attr( $product->get_id() ) . '" class="single_add_to_cart_button button alt custom_redirect_button">' . $button_text . '</button>';
        // 可变产品
        } elseif( $product->is_type( 'variable' ) ) {
            // 可变产品不需要value属性,因为其值由JS动态传递
            echo '<button type="submit" class="single_add_to_cart_button button alt custom_redirect_button">' . $button_text . '</button>';
        }
    }
}
add_action( 'woocommerce_after_add_to_cart_button', 'action_woocommerce_after_add_to_cart_button', 10 );

这段代码会在原“加入购物车”按钮之后插入一个新的提交按钮。对于简单产品,它会包含 name="add-to-cart" 和 value (产品ID),确保触发正常的加入购物车逻辑。对于可变产品,它仅复制按钮结构,value 会在表单提交时由 JavaScript 动态处理。最重要的是,我们为这个新按钮添加了 custom_redirect_button 类,这是我们后续识别它的关键。

步骤二:区分按钮点击事件

由于两个按钮都触发相同的加入购物车机制,我们需要一种方式来区分是哪个按钮被点击了,以便应用不同的重定向逻辑。这可以通过 JavaScript (jQuery) 实现。当带有 custom_redirect_button 类的按钮被点击时,我们动态地向表单中添加一个隐藏的输入字段。

以下是添加 JavaScript 代码的示例:

有道智云AI开放平台
有道智云AI开放平台

有道智云AI开放平台

下载
// 将 jQuery 添加到页脚
function action_wp_footer() {
    // 仅在单产品页面加载
    if ( is_product() ) {
        ?>
        <script type="text/javascript">
        jQuery( function($) {           
            // 当自定义重定向按钮被点击时
            $( document ).on( 'click', '.custom_redirect_button', function () {
                // 确保按钮未被禁用
                if ( ! $( this ).hasClass( 'disabled' ) ) { 
                    // 在按钮后添加一个隐藏的输入字段
                    $( this ).after( '<input type="hidden" name="custom-redirect" value="my-value" />' );
                }
            });
        });
        </script>
        <?php
    }
}
add_action( 'wp_footer', 'action_wp_footer', 10 );

这段 JavaScript 代码会在页面加载完成后执行。它监听所有带有 custom_redirect_button 类的按钮的点击事件。当这些按钮被点击且未被禁用时,它会在当前按钮之后插入一个隐藏的 字段。这个字段的值 (my-value) 将在表单提交时随数据一起发送到服务器,作为我们区分按钮的标识符。

步骤三:实现自定义重定向逻辑

最后一步是利用 WooCommerce 的 woocommerce_add_to_cart_redirect 过滤器来根据我们添加的隐藏字段的值,条件性地修改重定向 URL。这个过滤器在产品成功加入购物车后触发,允许我们自定义用户将被重定向到的页面。

以下是实现自定义重定向逻辑的代码示例:

// 重定向
function filter_woocommerce_add_to_cart_redirect( $redirect_url, $product ) {   
    // 检查是否存在自定义重定向标识符
    if ( isset( $_REQUEST['custom-redirect'] ) ) {      
        // 如果标识符的值与我们设定的值匹配
        if ( $_REQUEST['custom-redirect'] == 'my-value' ) { 
            // 设置要重定向到的自定义 URL(例如,页面 ID 为 1 的页面)
            // 请将 1 替换为您的目标页面 ID
            $redirect_url = get_permalink( 1 ); 
        }
    }

    return $redirect_url;
}
add_filter( 'woocommerce_add_to_cart_redirect', 'filter_woocommerce_add_to_cart_redirect', 10, 2 );

这段 PHP 代码挂钩到 woocommerce_add_to_cart_redirect 过滤器。它首先检查 $_REQUEST 超全局变量中是否存在 custom-redirect 字段。如果存在且其值等于我们预设的 my-value,那么就意味着是我们的自定义按钮被点击了。此时,我们将 $redirect_url 修改为目标自定义页面的 URL(例如,通过 get_permalink(1) 获取 ID 为 1 的页面的永久链接)。

注意事项

  • 页面 ID 替换: 在步骤三的代码中,get_permalink(1) 中的 1 是一个示例页面 ID。您需要将其替换为您希望重定向到的实际页面的 ID。您可以在 WordPress 后台编辑页面时,在浏览器地址栏中找到页面的 post= 参数来获取其 ID。
  • 代码位置: 所有的 PHP 代码都应该放置在您的主题的 functions.php 文件中,或者最好是放置在一个自定义插件中,以确保在主题更新时代码不会丢失。JavaScript 代码可以通过 wp_footer 钩子直接输出,或者更推荐的方式是将其放入一个外部 .js 文件中,并通过 wp_enqueue_script 函数正确地引入。
  • CSS 样式: 新添加的按钮默认会继承 WooCommerce 的按钮样式。如果需要,您可以为 custom_redirect_button 类添加自定义 CSS 样式,使其在视觉上与原始按钮有所区别。
  • 兼容性: 这种方法通过模拟原始“加入购物车”的表单提交行为,并仅在重定向环节进行干预,因此它能够很好地兼容 WooCommerce 的核心功能以及大多数依赖于标准加入购物车流程的自定义钩子(例如,添加购物车商品数据的钩子)。
  • 安全性: 在处理用户输入和重定向 URL时,始终确保使用 WordPress 提供的安全函数(如 esc_attr())进行数据清理和验证。

总结

通过上述三个步骤,我们成功地在 WooCommerce 单产品页面上复制了一个“加入购物车”按钮,并为其赋予了自定义的重定向行为,同时完整保留了原始按钮的购物车处理逻辑。这种方法灵活且易于维护,是实现复杂电子商务功能的一个有效途径。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
jquery插件有哪些
jquery插件有哪些

jquery插件有jQuery UI、jQuery Validate、jQuery DataTables、jQuery Slick、jQuery LazyLoad、jQuery Countdown、jQuery Lightbox、jQuery FullCalendar、jQuery Chosen和jQuery EasyUI等。本专题为大家提供jquery插件相关的文章、下载、课程内容,供大家免费下载体验。

156

2023.09.12

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

334

2023.10.13

jquery删除元素的方法
jquery删除元素的方法

jquery可以通过.remove() 方法、 .detach() 方法、.empty() 方法、.unwrap() 方法、.replaceWith() 方法、.html('') 方法和.hide() 方法来删除元素。更多关于jquery相关的问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

406

2023.11.10

jQuery hover()方法的使用
jQuery hover()方法的使用

hover()是jQuery中一个常用的方法,它用于绑定两个事件处理函数,这两个函数将在鼠标指针进入和离开匹配的元素时执行。想了解更多hover()的相关内容,可以阅读本专题下面的文章。

515

2023.12.04

jquery实现分页方法
jquery实现分页方法

在jQuery中实现分页可以使用插件或者自定义实现。想了解更多jquery分页的相关内容,可以阅读本专题下面的文章。

312

2023.12.06

jquery中隐藏元素是什么
jquery中隐藏元素是什么

jquery中隐藏元素是非常重要的一个概念,在使用jquery隐藏元素之前,需要先了解css样式中关于元素隐藏的属性,比如display、visibility、opacity等属性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

128

2024.02.23

jquery中什么是高亮显示
jquery中什么是高亮显示

jquery中高亮显示是指对页面搜索关键词时进行高亮显示,其实现办法:1、先获取要高亮显示的行,获取搜索的内容,再遍历整行内容,最后添加高亮颜色;2、使用“jquery highlight”高亮插件。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

183

2024.02.23

jQuery 正则表达式相关教程
jQuery 正则表达式相关教程

本专题整合了jQuery正则表达式相关教程大全,阅读专题下面的文章了解更多详细内容。

51

2026.01.13

C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.6万人学习

CSS教程
CSS教程

共754课时 | 42.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号