0

0

WooCommerce 单产品页复制加购按钮并实现自定义重定向教程

花韻仙語

花韻仙語

发布时间:2025-10-03 14:10:07

|

776人浏览过

|

来源于php中文网

原创

woocommerce 单产品页复制加购按钮并实现自定义重定向教程

本文详细介绍了如何在 WooCommerce 单产品页面复制“添加到购物车”按钮,并为其配置独立的自定义重定向逻辑,同时确保原始加购功能及其相关钩子不受影响。通过结合使用 WooCommerce 动作钩子、jQuery 动态添加隐藏字段以及 woocommerce_add_to_cart_redirect 过滤器,实现了一个既能触发标准加购流程又能灵活控制重定向目标的“报价”按钮。

在构建复杂的 WooCommerce 网店时,有时我们需要在单产品页面提供额外的购买或询价选项,例如一个“添加到报价”按钮,它应具备与“添加到购物车”按钮类似的功能,但在点击后重定向到不同的页面。本教程将指导您如何实现这一需求,确保所有自定义购物车项数据等相关钩子依然正常工作。

1. 添加自定义加购按钮

首先,我们需要在现有“添加到购物车”按钮下方添加一个新的按钮。这可以通过 WooCommerce 提供的动作钩子 woocommerce_after_add_to_cart_button 来实现,避免直接修改模板文件。新按钮将与原始按钮共享大部分功能,但会额外添加一个用于后续识别的 CSS 类。

// 在添加到购物车按钮后添加新的自定义按钮
function custom_add_to_quote_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' ) ) {
            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', 'custom_add_to_quote_button', 10 );

代码说明:

  • 我们使用 woocommerce_after_add_to_cart_button 钩子,它会在原始加购按钮渲染后执行。
  • 新按钮的 name 属性仍为 add-to-cart,value 为产品 ID(简单产品),这确保了 WooCommerce 能够识别并处理其为加购操作,从而触发所有相关的购物车钩子(如 woocommerce_add_to_cart_item_data)。
  • 关键在于我们为新按钮添加了一个独特的类 custom_redirect_button,这将用于在前端通过 JavaScript 识别它。

2. 通过 JavaScript 识别自定义按钮点击

为了区分原始加购按钮和我们新添加的自定义按钮,我们需要在自定义按钮被点击时,通过 JavaScript 动态地向表单中添加一个隐藏字段。这个隐藏字段将作为后端重定向逻辑的判断依据。

将以下 jQuery 代码添加到您的主题的 functions.php 文件中,或者通过外部 JS 文件引入(推荐)。

Bolt.new
Bolt.new

Bolt.new是一个免费的AI全栈开发工具

下载
// 在页面底部添加 jQuery 脚本
function custom_redirect_script_to_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-quote-value" />' );
                }
            });
        });
        </script>
        <?php
    }
}
add_action( 'wp_footer', 'custom_redirect_script_to_footer', 10 );

代码说明:

  • wp_footer 钩子确保 JavaScript 代码在页面底部加载,避免阻塞页面渲染。
  • is_product() 条件确保脚本只在单产品页面执行,优化性能。
  • 当带有 custom_redirect_button 类的按钮被点击时,一段 <input type="hidden" name="custom-redirect" value="my-quote-value" /> 会被添加到表单中。这个 name 和 value 将是我们后端判断的关键。您可以将 my-quote-value 替换为任何您希望的值。

3. 实现条件性重定向逻辑

最后一步是利用 WooCommerce 的 woocommerce_add_to_cart_redirect 过滤器来拦截默认的重定向行为,并根据我们添加的隐藏字段来决定是重定向到购物车页面还是自定义页面。

// 过滤添加到购物车后的重定向 URL
function custom_add_to_cart_redirect_logic( $redirect_url, $product ) {   
    // 检查是否存在自定义重定向标记
    if ( isset( $_REQUEST['custom-redirect'] ) ) {      
        // 如果标记的值与我们预设的值匹配
        if ( $_REQUEST['custom-redirect'] == 'my-quote-value' ) { 
            // 设置自定义重定向 URL (例如:页面ID为1的页面)
            $redirect_url = get_permalink( 1 ); // 请将 '1' 替换为您希望重定向到的页面ID或直接提供URL
        }
    }

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

代码说明:

  • woocommerce_add_to_cart_redirect 过滤器允许我们修改添加到购物车操作完成后的重定向 URL。
  • 我们检查 $_REQUEST['custom-redirect'] 是否存在,并且其值是否与我们在 JavaScript 中设置的 my-quote-value 匹配。
  • 如果匹配,则将 $redirect_url 更新为我们自定义的页面链接。get_permalink( 1 ) 是一个示例,其中 1 是您目标页面的 ID。您可以将其替换为任何有效的页面 ID 或直接硬编码一个 URL,例如 'https://yourwebsite.com/your-custom-page/'。
  • 如果 custom-redirect 字段不存在或值不匹配,函数将返回原始的 $redirect_url,这意味着默认的重定向行为(通常是购物车页面)将保持不变。

注意事项与总结

  • 代码放置位置: 所有的 PHP 代码都应该放置在您的子主题的 functions.php 文件中,或者通过一个自定义插件来管理。直接修改父主题文件会导致更新时代码丢失。
  • 页面 ID: 在 get_permalink( 1 ) 中,请务必将 1 替换为您实际希望重定向到的目标页面的 ID。您可以在 WordPress 后台编辑页面时,从浏览器地址栏中获取页面 ID。
  • CSS 样式: 新添加的按钮默认会继承 WooCommerce 的按钮样式。您可能需要为 custom_redirect_button 类添加额外的 CSS 样式,使其在视觉上与原始加购按钮有所区分,例如:
    .single_product .custom_redirect_button {
        background-color: #0073aa; /* 示例颜色 */
        color: #fff;
        /* 其他样式调整 */
    }
  • 兼容性: 本方案利用了 WooCommerce 的核心功能和钩子,通常具有良好的兼容性。然而,如果您的网站使用了大量自定义代码或第三方插件,请务必在开发或测试环境中进行充分测试。
  • 功能复制: 这种方法的核心在于新按钮依然触发了标准的 WooCommerce “添加到购物车”操作。这意味着所有依赖于此操作的钩子(如 woocommerce_add_to_cart_item_data)都会正常执行,确保了购物车项数据的完整性。

通过以上步骤,您已经成功在 WooCommerce 单产品页面复制了一个“添加到购物车”按钮,并为其配置了独立的自定义重定向功能,同时保持了原始加购按钮的默认行为。

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

WorkBuddy
WorkBuddy

腾讯云推出的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的详细内容,可以访问本专题下面的文章。

335

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.4万人学习

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

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