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>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/840065.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

案例题(第一版)

案例题目 软件架构设计考点&#xff08;历年必考&#xff09; 软件架构设计通常在每年的第一题&#xff0c;该题必考 必备概念 必备概念即考试必须要默写出来的概念 概念描述软件架构风格是指描述特定软件系统组织方式和惯用模式。组织方式描述了系统的组成构件和这些构件的组…

在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换

在现代的企业应用开发中&#xff0c;使用多数据源是一个常见的需求。尤其在关键应用中&#xff0c;设置主备数据库可以提高系统的可靠性和可用性。在这篇博客中&#xff0c;我将展示如何在Spring Boot项目中通过自定义注解实现多数据源以及主备数据库切换。 在此说明&#xff…

【HTML】制作一个跟随鼠标的流畅线条引导页界面(可直接复制源码)

目录 前言 HTML部分 CSS部分 JS部分 效果图 总结 前言 无需多言&#xff0c;本文将详细介绍一段HTML代码&#xff0c;图中线条可跟随鼠标移动&#xff0c;具体内容如下&#xff1a; 开始 首先新建一个HTML的文本&#xff0c;文本名改为[index.html]&#xff0c;创建好后右…

【逻辑漏洞】验证码绕过

【逻辑漏洞】验证码绕过 参数操纵值提取和重用自动化和识别其他测试 参数操纵 随机应变的请求方法&#xff1a;清空发送验证码参数。尝试更改HTTP方法从POST到GET或其他动词&#xff0c;并更改数据格式&#xff0c;例如在表单数据和JSON之间切换。发送空验证码&#xff1a;提交…

第十一节 SpringBoot Starter 面试题

一、面试题 很多同学的简历都写着熟悉 SpringBoot&#xff0c; 而 Starter 的实现原理被当作的考题的的情况越来越多。 来源牛客网关于 starter 的一些面试题 情景一、路虎一面 情景二、蔚来 情景三、同花顺 Starter 频频出现&#xff0c;因此在面试准备时&#xff0c;这道题…

mdm 推送证书制作教程

第一步点击获取&#xff0c;点击以后会下载一个zip压缩包 解压以后&#xff1a;会得到四个文件&#xff0c;请务必保存好&#xff0c;待会需要使用 登录apple开发者官网 https://developer.apple.com/account/resources/certificates/list 点击添加证书 找到mdm csr 然后点击…

赶紧收藏!2024 年最常见 20道 Redis面试题(六)

上一篇地址&#xff1a;赶紧收藏&#xff01;2024 年最常见 20道 Redis面试题&#xff08;五&#xff09;-CSDN博客 十一、Redis集群之间是如何复制的&#xff1f; Redis 集群是一个分布式系统&#xff0c;它由多个节点组成&#xff0c;这些节点共同存储数据并提供服务。在 R…

C++小游戏 合集

生化危机 #include<conio.h> #include<string.h> #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<time.h> #include<direct.h> int n,round,gold0; bool f1,f2,f3,deadfalse,PC_64Bit; char str[4]; struct n…

用Python代码批量提取PDF文件中的表格

PDF文档中常常包含大量数据&#xff0c;尤其是官方报告、学术论文、财务报表等文档&#xff0c;往往包含了结构化的表格数据。表格作为承载关键信息的载体&#xff0c;其内容的准确提取对于数据分析、研究论证乃至业务决策具有重大意义。然而&#xff0c;PDF格式虽保证了文档的…

Vue从入门到实战Day12

一、Pinia快速入门 1. 什么是Pinia Pinia是Vue的最新状态管理工具&#xff0c;是Vuex的替代品 1. 提供更加简单的API&#xff08;去掉了mutation&#xff09; 2. 提供符合组合式风格的API&#xff08;和Vue3新语法统一&#xff09; 3. 去掉了modules的概念&#xff0c;每一…

C++|设计模式(二)|简单工厂和工厂方法模式

本文探讨两种广泛使用的创建型模式——简单工厂模式和工厂方法模式&#xff0c;解释他们的实现细节、优势以及应用场景。 在下一篇文章中&#xff0c;我会补充抽象工厂模式&#xff0c;其实工厂模式主要就是为了封装对象的创建过程&#xff0c;如果我们不进行封装&#xff0c;…

人工智能应用-实验7-胶囊网络分类minst手写数据集

文章目录 &#x1f9e1;&#x1f9e1;实验内容&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;代码&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;分析结果&#x1f9e1;&#x1f9e1;&#x1f9e1;&#x1f9e1;实验总结&#x1f9e1;&#x1f9e1; &#x1f9…

Python TCP编程简单实例

客户端&#xff1a;创建TCP链接时&#xff0c;主动发起连接的叫做客户端 服务端&#xff1a;接收客户端的连接 连接其他服务器 可以通过tcp连接其他服务器。 示例&#xff1a; import socket# 1.创建一个socket # 参数1&#xff1a;指定协议 AF_INET&#xff08;ipv4&#…

LeetCode1466重新规划路线

题目描述 n 座城市&#xff0c;从 0 到 n-1 编号&#xff0c;其间共有 n-1 条路线。因此&#xff0c;要想在两座不同城市之间旅行只有唯一一条路线可供选择&#xff08;路线网形成一颗树&#xff09;。去年&#xff0c;交通运输部决定重新规划路线&#xff0c;以改变交通拥堵的…

vite项目怎么build打包成不同环境的代码?从而适配不同环境api接口

在开发 Web 应用的过程中&#xff0c;我们需要在不同的环境中运行和测试我们的应用程序&#xff08;如开发环境、测试环境和生产环境&#xff09;。每个环境都有其特定的 API 接口和配置。Vite&#xff0c;一个基于 ESBuild 的前端构建工具&#xff0c;可以帮助我们实现这个需求…

判断当前系统是linux、windows还是MacOS (python)

在很多情况下&#xff0c;需要在python中获取当前系统的类型&#xff0c;用于判断是unix/windows/mac或者java虚拟机等&#xff0c;python中提供了os.name&#xff0c; sys.platform&#xff0c; platform.system等方式 sys sys.platform会返回当前系统平台的标识符&#xff…

Linux系统——面试题分享

目录 1.现在给你三百台服务器&#xff0c;你怎么对他们进行管理&#xff1f; 2.简述 raid0 raid1 raid5 三种工作模式的工作原理及特点 2.1RAID 0 ——可以是一块盘和 N 个盘组合 2.2RAID 1 ——只能2块盘&#xff0c;盘的大小可以不一样&#xff0c;以小的为准 2.3RAID 5 …

ganglia的安装使用

1.集群内分别安装epel-release依赖&#xff0c;更新yum源 sudo yum -y install epel-release 2&#xff0e;各节点上分别安装gmond sudo yum -y install ganglia-gmond 3.监控节点上安装gmetad和web(这里安装在node1上) sudo yum -y install ganglia-gmetad sudo yum -y insta…

现代密码学——消息认证和哈希函数

1.概述 1.加密-->被动攻击&#xff08;获取消息内容、业务流分析&#xff09; 消息认证和数字签名-->主动攻击&#xff08;假冒、重放、篡改、业务拒绝&#xff09; 2.消息认证作用&#xff1a; 验证消息源的真实性&#xff0c; 消息的完整性&#xff08;未被篡改…