当前位置: 首页 > 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>

相关文章:

  • 西储大学数据集学习
  • 2024年华为OD机试真题-火星文计算-C++-OD统一考试(C卷D卷)
  • Linux 删除SSH密钥(id_ed25519),重新生成
  • 生成式AI模型大PK——GPT-4、Claude 2.1和Claude 3.0 Opus
  • WPF之TextBlock文本标签
  • nuxt3+Element Plus项目搭建过程记录
  • 【源码】Spring Data JPA原理解析之Repository执行过程及SimpleJpaRepository源码
  • K-独立钻石(dfs),G-邪恶铭刻(贪心)
  • 反编译 Trino Dockerfile
  • 基于单片机的自行车里程监测系统的设计
  • 撤销最近一次的提交,使用git revert 和 git reset的区别
  • 【HarmonyOS尝鲜课】- 前言
  • TransFormer学习之VIT算法解析
  • 【调试笔记-20240525-Windows-配置 QEMU/x86_64 运行 OpenWrt-23.05 发行版并搭建 WordPress 博客网站】
  • 汽车制造业安全有效的设计图纸文件外发系统是什么样的?
  • 【附node操作实例】redis简明入门系列—字符串类型
  • 2017 年终总结 —— 在路上
  • canvas 绘制双线技巧
  • eclipse的离线汉化
  • ERLANG 网工修炼笔记 ---- UDP
  • gf框架之分页模块(五) - 自定义分页
  • Git初体验
  • JavaScript实现分页效果
  • js对象的深浅拷贝
  • mysql外键的使用
  • scala基础语法(二)
  • vue:响应原理
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 关于springcloud Gateway中的限流
  • 基于webpack 的 vue 多页架构
  • 聊聊flink的BlobWriter
  • 算法系列——算法入门之递归分而治之思想的实现
  • 要让cordova项目适配iphoneX + ios11.4,总共要几步?三步
  • 怎样选择前端框架
  • 教程:使用iPhone相机和openCV来完成3D重建(第一部分) ...
  • ​​快速排序(四)——挖坑法,前后指针法与非递归
  • ​数据链路层——流量控制可靠传输机制 ​
  • #《AI中文版》V3 第 1 章 概述
  • #565. 查找之大编号
  • #调用传感器数据_Flink使用函数之监控传感器温度上升提醒
  • $().each和$.each的区别
  • $.each()与$(selector).each()
  • $emit传递多个参数_PPC和MIPS指令集下二进制代码中函数参数个数的识别方法
  • (1)Hilt的基本概念和使用
  • (1)svelte 教程:hello world
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (附源码)springboot家庭财务分析系统 毕业设计641323
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (剑指Offer)面试题34:丑数
  • (力扣)1314.矩阵区域和
  • (四)stm32之通信协议
  • .bat批处理(三):变量声明、设置、拼接、截取
  • .config、Kconfig、***_defconfig之间的关系和工作原理