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 '';
        // 针对可变产品
        } elseif( $product->is_type( 'variable' ) ) {
            echo '';
        }
    }
}
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 文件引入(推荐)。

Veggie AI
Veggie AI

Veggie AI 是一款利用AI技术生成可控视频的在线工具

下载
// 在页面底部添加 jQuery 脚本
function custom_redirect_script_to_footer() {
    // 仅在单产品页面加载脚本
    if ( is_product() ) {
        ?>
        
        

代码说明:

  • 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 单产品页面复制了一个“添加到购物车”按钮,并为其配置了独立的自定义重定向功能,同时保持了原始加购按钮的默认行为。

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2701

2023.09.01

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

1665

2023.10.11

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

1527

2023.10.11

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

974

2023.10.23

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

1443

2023.10.23

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

1235

2023.11.03

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1529

2023.11.09

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

1306

2023.11.13

Java JVM 原理与性能调优实战
Java JVM 原理与性能调优实战

本专题系统讲解 Java 虚拟机(JVM)的核心工作原理与性能调优方法,包括 JVM 内存结构、对象创建与回收流程、垃圾回收器(Serial、CMS、G1、ZGC)对比分析、常见内存泄漏与性能瓶颈排查,以及 JVM 参数调优与监控工具(jstat、jmap、jvisualvm)的实战使用。通过真实案例,帮助学习者掌握 Java 应用在生产环境中的性能分析与优化能力。

19

2026.01.20

热门下载

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

精品课程

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

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.9万人学习

CSS教程
CSS教程

共754课时 | 21.4万人学习

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

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