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 添加代码实现,点击按钮,将产品添加到购物车并且跳转到结账页面 案列代码1,解决的是普通产品的 //短代码生成按钮,传入短代码,点击直接到达结账页面 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自动化的时候,有些操作无法直接通过selenium自带方法操 作成功,那么就需要借助前端js操作实现。 比如浏览器的滚动条这种不是html页面的内容,无法直接通过selenium 控制到。需要借助JavaScript控制。比如有些点击操作无法通过普通点击鼠…...
雪花算法 代码
/*** author lwh* date 2023/9/5* description 批量插入,手动设置**/ public class IdWorker {//因为二进制里第一个 bit 为如果是 1,那么都是负数,但是我们生成的 id 都是正数,所以第一个 bit 统一都是 0。//机器ID 2进制5位 3…...

我把PostgreSQL最核心的插件撸干净了!!!
作者:IT邦德 中国DBA联盟(ACDU)成员,10余年DBA工作经验, Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主,全网粉丝10万 擅长主流Oracle、MySQL、PG、高斯及Greenplum备份恢复, 安装迁移,性能优化、故障…...

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

使用Flask Swagger自动生成API文档
文章目录 安装Flask Swagger使用Flask Swagger生成API文档总结1. 自动化文档生成2. 交互式文档展示3. 规范化API设计4. 提升协作效率5. 支持多种格式 Flask Swagger是一种用于管理Flask API文档的工具。它基于OpenAPI规范,可以自动生成API的交互式文档。使用Flask S…...
操作系统408考研-经典例题
什么是操作系统?答:操作系统,是计算机系统中最基本、最重要的系统软件,是其它软件 的***支撑***。控制和管理计算机系统的硬件和软件资源,合理的组织计算机工 作流程,并为用户使用计算机提供公共和基本的服务 2.多道程序 (multiprogrammming) 和多重处理 (multiprocessi…...

工程项目管理系统源码与Spring Cloud:实现高效系统管理与二次开发
随着企业规模的不断扩大和业务的快速发展,传统的工程项目管理方式已经无法满足现代企业的需求。为了提高工程管理效率、减轻劳动强度、提高信息处理速度和准确性,企业需要借助先进的数字化技术进行转型。本文将介绍一款采用Spring CloudSpring BootMybat…...
react中hook 函数的使用
以 use 开头的函数被称为 Hook。useState 是 React 提供的一个内置 Hook。你可以在 React API 参考 中找到其他内置的 Hook。你也可以通过组合现有的 Hook 来编写属于你自己的 Hook。 Hook 比普通函数更为严格。你只能在你的组件(或其他 Hook)的 顶层 调…...

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

webgl入门-绘制三角形
绘制三角形 前言 三角形是一个最简单、最稳定的面,webgl 中的三维模型都是由三角面组成的。咱们这一篇就说一下三角形的绘制方法。 课堂目标 理解多点绘图原理。可以绘制三角形,并将其组合成多边形。 知识点 缓冲区对象点、线、面图形 第一章 web…...
深入分析 Android Activity (三)
深入分析 Android Activity (三) 1. Activity 的配置变化处理 当设备配置(如屏幕方向、语言、屏幕大小等)发生变化时,默认情况下,Android 会销毁并重新创建当前的 Activity。这种行为确保了新配置能够正确应用,但在某…...

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

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

C++:vector基础讲解
hello,各位小伙伴,本篇文章跟大家一起学习《C:vector基础讲解》,感谢大家对我上一篇的支持,如有什么问题,还请多多指教 ! 如果本篇文章对你有帮助,还请各位点点赞!&#…...
Grafana 路径遍历所有路径 CVE-2021-43798漏洞预警
简介 Grafana是一个跨平台、开源的数据可视化网络应用程序平台。用户配置连接的数据源之后,Grafana可以在网络浏览器里显示数据图表和警告。 漏洞危害等级 高危 CVE 编号 CVE-2021-43798 FOFA查询 app"Grafana" zoomeyes查询 app:"gr…...

基于Docker部署GitLab环境搭建
文件在D:\E\学习文档子目录压缩\专项进阶,如ngnix,webservice,linux,redis等\docker 建议虚拟机内存2G以上 1.下载镜像文件 docker pull beginor/gitlab-ce:11.0.1-ce.0 注意:一定要配置阿里云的加速镜像 创建GitLab 的配置 (etc) 、 日志 (log) 、数…...
初始化是什么
定义 初始化(Initialization)是指在计算机科学和软件开发中,将系统、变量、对象或其他可用组件设置为其初始状态或初始值的过程。这通常是在程序开始执行或组件第一次使用之前进行的,以确保其处于可预测和稳定的状态。 初始化的…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真
目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销,平衡网络负载,延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)
引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

python执行测试用例,allure报乱码且未成功生成报告
allure执行测试用例时显示乱码:‘allure’ �����ڲ����ⲿ���Ҳ���ǿ�&am…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

基于Java+VUE+MariaDB实现(Web)仿小米商城
仿小米商城 环境安装 nodejs maven JDK11 运行 mvn clean install -DskipTestscd adminmvn spring-boot:runcd ../webmvn spring-boot:runcd ../xiaomi-store-admin-vuenpm installnpm run servecd ../xiaomi-store-vuenpm installnpm run serve 注意:运行前…...
嵌入式常见 CPU 架构
架构类型架构厂商芯片厂商典型芯片特点与应用场景PICRISC (8/16 位)MicrochipMicrochipPIC16F877A、PIC18F4550简化指令集,单周期执行;低功耗、CIP 独立外设;用于家电、小电机控制、安防面板等嵌入式场景8051CISC (8 位)Intel(原始…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...