讲师中心 微信公众号

工具推荐

视频效率加速
Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

Laper
Laper

剧本策划到成片协作

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

胖萱姑娘_5936

胖萱姑娘_5936

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

|

796人浏览过

|

来源于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 文件引入(推荐)。

Expanso yaml-to-json
Expanso yaml-to-json

使用 Expanso Edge 管道将 YAML 输入转换为 JSON 格式。

下载
// 在页面底部添加 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 类的按钮被点击时,一段 会被添加到表单中。这个 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工具

更多
Lovart
Lovart Hot

一款面向视觉设计创作的AI设计平台,可通过智能体和画布工作流辅助制作海报、Logo、网页、PPT及其他视觉内容。

SkildArt
SkildArt Hot

SkildArt是一款AI文本写作工具,一站式 AI 视觉创作平台。

创客贴AI

创客贴AI是一款AI图像与设计工具,AI辅助的智能在线设计工具。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

函子Zion

一款支持AI搭建、可视化编辑和多端发布的全栈无代码开发平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

相关专题

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

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

621

2023.09.12

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

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

1276

2023.10.13

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

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

2362

2023.11.10

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

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

2168

2023.12.04

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

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

513

2023.12.06

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

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

337

2024.02.23

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

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

906

2024.02.23

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

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

309

2026.01.13

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

0

2026.11.12

热门下载

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

精品课程

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn