当前位置: 首页 > news >正文

wordpress woocommer 添加代码实现,点击按钮,将产品添加到购物车并且跳转到结账页面

wordpress woocommer 添加代码实现,点击按钮,将产品添加到购物车并且跳转到结账页面

案列代码1,解决的是普通产品的

//短代码生成按钮,传入短代码,点击直接到达结账页面
function add_product_to_cart_button($atts) {// 定义默认值$defaults = array('id' => null,'label' => '立即购买',);// 使用 shortcode_atts 处理用户传入的参数$atts = shortcode_atts($defaults, $atts, 'add_to_cart_button');// 获取参数值$product_id = $atts['id'];$button_label = $atts['label'];// 检查产品ID是否有效if (!$product_id || !is_numeric($product_id)) {return '无效的产品ID。';}// 生成按钮HTML$button_html = sprintf('<form class="add_to_cart_form" method="post" action="%s"><input type="hidden" name="action" value="add_to_cart_and_checkout" /><input type="hidden" name="product_id" value="%d" /><button type="submit" class="button">%s</button></form>',esc_url(admin_url('admin-post.php')),intval($product_id),esc_html($button_label));return $button_html;
}// 注册短代码
add_shortcode('add_to_cart_button', 'add_product_to_cart_button');function handle_add_to_cart_and_checkout() {// 确保 WooCommerce 环境已加载if (!function_exists('wc')) {include_once ABSPATH . 'wp-content/plugins/woocommerce/includes/wc-core-functions.php';}// 初始化 WooCommerce 购物车if (function_exists('wc_load_cart')) {wc_load_cart();}// 获取产品ID$product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : 0;// 检查产品ID是否有效if ($product_id > 0 && WC()->cart) {// 检查购物车中是否已经存在产品$cart_contains_product = false;foreach (WC()->cart->get_cart() as $cart_item_key => $cart_item) {if ($cart_item['product_id'] == $product_id) {// 如果购物车中已经存在相同的产品,则增加产品数量WC()->cart->set_quantity($cart_item_key, $cart_item['quantity'] + 1);$cart_contains_product = true;break;}}// 如果购物车中不存在相同的产品,则添加新产品到购物车if (!$cart_contains_product) {// 添加产品到购物车WC()->cart->add_to_cart($product_id);}}// 跳转到结账页面wp_safe_redirect(wc_get_checkout_url());exit;
}// 注册处理表单提交的操作
add_action('admin_post_nopriv_add_to_cart_and_checkout', 'handle_add_to_cart_and_checkout');
add_action('admin_post_add_to_cart_and_checkout', 'handle_add_to_cart_and_checkout');

在前台使用段代码

[add_to_cart_button id="213148" label="buy now"]

下面是案列代码2,解决的是复杂产品的

//短代码生成按钮,传入短代码,点击直接到达结账页面
function add_product_to_cart_button($atts) {// 定义默认值$defaults = array('id' => null,'label' => '立即购买',);// 使用 shortcode_atts 处理用户传入的参数$atts = shortcode_atts($defaults, $atts, 'add_to_cart_button');// 获取参数值$product_id = $atts['id'];$button_label = $atts['label'];// 检查产品ID是否有效if (!$product_id || !is_numeric($product_id)) {return '无效的产品ID。';}// 获取产品对象$product = wc_get_product($product_id);if (!$product) {return '产品不存在。';}// 如果产品是变体产品,获取变体信息$variation_fields = '';if ($product->is_type('variable')) {// 获取所有变体$available_variations = $product->get_available_variations();if (!empty($available_variations)) {$variation_fields .= '<select name="variation_id">';$variation_fields .= '<option value="">' . __('Choose an option', 'woocommerce') . '</option>';foreach ($available_variations as $variation) {$variation_id = $variation['variation_id'];$variation_label = implode(' / ', $variation['attributes']);$variation_fields .= '<option value="' . $variation_id . '">' . $variation_label . '</option>';}$variation_fields .= '</select>';}}// 生成按钮HTML$button_html = sprintf('<form class="add_to_cart_form" method="post" action="%s"><input type="hidden" name="action" value="add_to_cart_and_checkout" /><input type="hidden" name="product_id" value="%d" />%s<button type="submit" class="button">%s</button></form>',esc_url(admin_url('admin-post.php')),intval($product_id),$variation_fields,esc_html($button_label));return $button_html;
}// 注册短代码
add_shortcode('add_to_cart_button', 'add_product_to_cart_button');
function handle_add_to_cart_and_checkout() {// 确保 WooCommerce 环境已加载if (!function_exists('wc')) {include_once ABSPATH . 'wp-content/plugins/woocommerce/includes/wc-core-functions.php';}// 初始化 WooCommerce 购物车if (function_exists('wc_load_cart')) {wc_load_cart();}// 获取产品ID和变体ID$product_id = isset($_POST['product_id']) ? intval($_POST['product_id']) : 0;$variation_id = isset($_POST['variation_id']) ? intval($_POST['variation_id']) : 0;// 检查产品ID是否有效if ($product_id > 0 && WC()->cart) {// 添加产品到购物车WC()->cart->add_to_cart($product_id, 1, $variation_id);// 跳转到结账页面wp_safe_redirect(wc_get_checkout_url());exit;} else {// 如果产品ID无效,返回错误信息wp_die('无效的产品ID。');}
}// 注册处理表单提交的操作
add_action('admin_post_nopriv_add_to_cart_and_checkout', 'handle_add_to_cart_and_checkout');
add_action('admin_post_add_to_cart_and_checkout', 'handle_add_to_cart_and_checkout');
<style>
.add_to_cart_form {text-align: center;
}
.add_to_cart_form button {background-color: #1F2E5C;width:141px;color:#ffffff;height:46px;line-height:46px;margin:auto;margin-top:20px;
}
</style>

相关文章:

wordpress woocommer 添加代码实现,点击按钮,将产品添加到购物车并且跳转到结账页面

wordpress woocommer 添加代码实现&#xff0c;点击按钮&#xff0c;将产品添加到购物车并且跳转到结账页面 案列代码1&#xff0c;解决的是普通产品的 //短代码生成按钮&#xff0c;传入短代码&#xff0c;点击直接到达结账页面 function add_product_to_cart_button($atts)…...

Scala学习笔记6: 类

目录 第六章 类1- 简单类和无参方法2- 带有getter和setter的属性3- 只带getter的属性4- 对象私有化5- 辅助构造器6- 主构造器7- 嵌套类end 第六章 类 在Scala中, 类用于创建对象的蓝图; 类可以包含方法、值、变量、类型、对象和特质等成员; 类名应该以大写字母开头, 可以包含…...

JS数组根据对象的某一个字段排序

const person [{ name: aa, age: 9 },{ name: bb, age: 17 },{ name: cc, age: 6 },{ name: dd, age: 18 }];// 升序const arr1 person.sort((a, b) > {return a.age - b.age;b})console.log(arr1)// 降序const arr2 person.sort((a, b) > {return b.age - a.age;})co…...

JavaScript操作

做UI自动化的时候&#xff0c;有些操作无法直接通过selenium自带方法操 作成功&#xff0c;那么就需要借助前端js操作实现。 比如浏览器的滚动条这种不是html页面的内容&#xff0c;无法直接通过selenium 控制到。需要借助JavaScript控制。比如有些点击操作无法通过普通点击鼠…...

雪花算法 代码

/*** author lwh* date 2023/9/5* description 批量插入&#xff0c;手动设置**/ public class IdWorker {//因为二进制里第一个 bit 为如果是 1&#xff0c;那么都是负数&#xff0c;但是我们生成的 id 都是正数&#xff0c;所以第一个 bit 统一都是 0。//机器ID 2进制5位 3…...

我把PostgreSQL最核心的插件撸干净了!!!

作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复&#xff0c; 安装迁移&#xff0c;性能优化、故障…...

Transformer详解(1)-结构解读

Transormer块主要由四个部分组成&#xff0c;注意力层、位置感知前馈神经网络、残差连接和层归一化。 1、注意力层(Multi-Head Attention) 使用多头注意力机制整合上下文语义&#xff0c;它使得序列中任意两个单词之间的依赖关系可以直接被建模而不基于传统的循环结构&#…...

使用Flask Swagger自动生成API文档

文章目录 安装Flask Swagger使用Flask Swagger生成API文档总结1. 自动化文档生成2. 交互式文档展示3. 规范化API设计4. 提升协作效率5. 支持多种格式 Flask Swagger是一种用于管理Flask API文档的工具。它基于OpenAPI规范&#xff0c;可以自动生成API的交互式文档。使用Flask S…...

操作系统408考研-经典例题

什么是操作系统?答:操作系统,是计算机系统中最基本、最重要的系统软件,是其它软件 的***支撑***。控制和管理计算机系统的硬件和软件资源,合理的组织计算机工 作流程,并为用户使用计算机提供公共和基本的服务 2.多道程序 (multiprogrammming) 和多重处理 (multiprocessi…...

工程项目管理系统源码与Spring Cloud:实现高效系统管理与二次开发

随着企业规模的不断扩大和业务的快速发展&#xff0c;传统的工程项目管理方式已经无法满足现代企业的需求。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性&#xff0c;企业需要借助先进的数字化技术进行转型。本文将介绍一款采用Spring CloudSpring BootMybat…...

react中hook 函数的使用

以 use 开头的函数被称为 Hook。useState 是 React 提供的一个内置 Hook。你可以在 React API 参考 中找到其他内置的 Hook。你也可以通过组合现有的 Hook 来编写属于你自己的 Hook。 Hook 比普通函数更为严格。你只能在你的组件&#xff08;或其他 Hook&#xff09;的 顶层 调…...

探索k8s集群中kubectl的陈述式资源管理

一、k8s集群资源管理方式分类 1.1陈述式资源管理方式&#xff1a;增删查比较方便&#xff0c;但是改非常不方便 使用一条kubectl命令和参数选项来实现资源对象管理操作 即通过命令的方式来实 1.2声明式资源管理方式&#xff1a;yaml文件管理 使用yaml配置文件或者json配置文…...

webgl入门-绘制三角形

绘制三角形 前言 三角形是一个最简单、最稳定的面&#xff0c;webgl 中的三维模型都是由三角面组成的。咱们这一篇就说一下三角形的绘制方法。 课堂目标 理解多点绘图原理。可以绘制三角形&#xff0c;并将其组合成多边形。 知识点 缓冲区对象点、线、面图形 第一章 web…...

深入分析 Android Activity (三)

深入分析 Android Activity (三) 1. Activity 的配置变化处理 当设备配置&#xff08;如屏幕方向、语言、屏幕大小等&#xff09;发生变化时&#xff0c;默认情况下&#xff0c;Android 会销毁并重新创建当前的 Activity。这种行为确保了新配置能够正确应用&#xff0c;但在某…...

电影《朝云暮雨》观后感

上周看了电影《朝云暮雨》&#xff0c;看完之后&#xff0c;感觉自己整个人都不太好了&#xff0c;也不是说电影太差&#xff0c;只是觉得电影没有传达正能量&#xff0c;让人很不舒服。 &#xff08;1&#xff09;演技在线 对于著名的演员“范伟”&#xff0c;或者说&#x…...

Isaac Sim仿真平台学习(1)认识Isaac Sim

0.前言 上一个教程中我们下载好了Isaac Sim&#xff0c;这一章我们将来简单了解一下Isaac Sim平台。 isaac Sim仿真平台安装-CSDN博客 1.Isaac Sim是啥&#xff1f; What Is Isaac Sim? — Omniverse IsaacSim latest documentation Isaac Sim是NVDIA Omniverse平台的机器…...

C++:vector基础讲解

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;vector基础讲解》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#…...

Grafana 路径遍历所有路径 CVE-2021-43798漏洞预警

简介​ ​Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后&#xff0c;Grafana可以在网络浏览器里显示数据图表和警告。 漏洞危害等级 高危 CVE 编号​ CVE-2021-43798 FOFA查询 ​app"Grafana" ​zoomeyes查询 ​app:"gr…...

基于Docker部署GitLab环境搭建

文件在D:\E\学习文档子目录压缩\专项进阶&#xff0c;如ngnix,webservice,linux,redis等\docker 建议虚拟机内存2G以上 1.下载镜像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意&#xff1a;一定要配置阿里云的加速镜像 创建GitLab 的配置 (etc) 、 日志 (log) 、数…...

初始化是什么

定义 初始化&#xff08;Initialization&#xff09;是指在计算机科学和软件开发中&#xff0c;将系统、变量、对象或其他可用组件设置为其初始状态或初始值的过程。这通常是在程序开始执行或组件第一次使用之前进行的&#xff0c;以确保其处于可预测和稳定的状态。 初始化的…...

MLOps实践指南:让AI模型持续交付

在人工智能技术日益渗透到各行各业核心业务的今天&#xff0c;一个严峻的现实是&#xff1a;大量机器学习模型在实验室里表现优异&#xff0c;却止步于概念验证阶段&#xff0c;难以稳定、高效地部署到生产环境。对于软件测试从业者而言&#xff0c;传统的测试方法与工具在应对…...

3分钟上手Hysteria2:从安装到连接的超简单教程

3分钟上手Hysteria2&#xff1a;从安装到连接的超简单教程 Hysteria2是一款高效的网络加速工具&#xff0c;通过一键安装脚本即可快速部署&#xff0c;特别适合新手用户。本教程将带你在3分钟内完成从安装到连接的全过程&#xff0c;让你轻松享受高速网络体验。 准备工作&#…...

C++的std--ranges适配器视图迭代器失效规则与悬垂引用

C的std::ranges适配器视图迭代器失效规则与悬垂引用 现代C引入了std::ranges库&#xff0c;为算法和范围操作提供了更强大的支持。使用适配器视图时&#xff0c;迭代器失效和悬垂引用问题可能成为隐藏的陷阱。理解这些规则对编写安全高效的代码至关重要。 视图的惰性求值特性…...

藏在化橘红里的数字农业隐喻:拼多多将“地方风物”做成了新爆款

图片 2026年两会期间&#xff0c;化橘红因为一个点赞意外“出圈”。 不少人将化橘红的“走红”归结为偶然的流量红利&#xff0c;只要深入化橘红的产业肌理&#xff0c;就会发现并非是一场单纯的“流量造神”&#xff0c;而是电商供应链、新农人回流、产业化升级交织下的必然。…...

为什么重写equals一定也要重写hashCode方法?

在技术领域&#xff0c;我们常常被那些闪耀的、可见的成果所吸引。今天&#xff0c;这个焦点无疑是大语言模型技术。它们的流畅对话、惊人的创造力&#xff0c;让我们得以一窥未来的轮廓。然而&#xff0c;作为在企业一线构建、部署和维护复杂系统的实践者&#xff0c;我们深知…...

OpenClaw配置避坑指南:Qwen3.5-9B接入时的5个常见错误解决

OpenClaw配置避坑指南&#xff1a;Qwen3.5-9B接入时的5个常见错误解决 1. 前言&#xff1a;为什么需要这份避坑指南&#xff1f; 上周我在本地部署OpenClaw对接Qwen3.5-9B模型时&#xff0c;连续踩了三个坑&#xff1a;网关端口被占用、飞书机器人反复掉线、模型地址少写了个…...

Ostrakon-VL-8B构建智能相册:基于自然语言的照片检索与回忆生成

Ostrakon-VL-8B构建智能相册&#xff1a;基于自然语言的照片检索与回忆生成 你有没有过这样的经历&#xff1f;手机里存了几千张照片&#xff0c;想找一张去年夏天在山上拍的照片&#xff0c;却要翻上十几分钟&#xff0c;甚至最后也没找到。或者&#xff0c;看着一堆旅行照片…...

良心推荐!阿贝云免费云服务器,新手小白也能轻松上手

最近在折腾个人网站&#xff0c;想找个免费的云服务器练练手&#xff0c;试了好几家都不太满意。后来朋友推荐了阿贝云&#xff0c;体验下来感觉真的不错。 首先&#xff0c;阿贝云的免费云服务器配置很实在&#xff1a;1核CPU、1GB内存、5M带宽&#xff0c;还带独立公网IP。对…...

OpenCore Legacy Patcher终极指南:老款Mac焕新升级的完整解决方案

OpenCore Legacy Patcher终极指南&#xff1a;老款Mac焕新升级的完整解决方案 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher是一款…...

LAV Filters专业配置进阶指南:深度解析开源解码器架构与性能优化

LAV Filters专业配置进阶指南&#xff1a;深度解析开源解码器架构与性能优化 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters LAV Filters是一套基于FFmpeg的高…...