保留商品上的元数据,并在结帐完成时检索

2024-01-16

我试图在将某个项目添加到购物车时对其设置元数据,在每个页面重新加载时保留它,并在结账成功时检索元数据以传递到单独的 API。

下面的代码是成功的,因为它在页面重新加载后回显元数据,因此我认为这是成功的。

add_action('woocommerce_order_status_completed', 'order_system');
add_filter('woocommerce_add_cart_item_data', 'nick_add_cart_item_data', 10, 2);
add_filter('woocommerce_get_cart_item_from_session', 'nick_get_cart_item_from_session', 10, 2);

function nick_add_cart_item_data($cart_item_meta, $product_id) {
    global $woocommerce;
    $nick_form_data = get_post_meta($product_id, '_nick_form_data', true);

    $cart_item_meta['_nick_form_data'] = $nick_form_data;
    $cart_item_meta['_nick_credential_data']['username'] = ( isset( $_POST['username'] ) && $_POST['username'] != '') ? $_POST['username'] : '';
    $cart_item_meta['_nick_credential_data']['password'] = ( isset( $_POST['password'] ) && $_POST['password'] != '') ? $_POST['password'] : '';

    return $cart_item_meta;
}

function nick_get_cart_item_from_session($cart_item, $values) {

if (isset($values['_nick_form_data'])) {
        $cart_item['_nick_form_data'] = $values['_nick_form_data'];
    }

    if (isset($values['_nick_credential_data'])) {
        $cart_item['_nick_credential_data'] = $values['_nick_credential_data'];
    echo $values['_nick_credential_data']['username'] . $values['_nick_credential_data']['password'] ;
    }

    return $cart_item;
}

当我调用此函数(该函数在订单完成时触发)时,我无法保留任何项目元数据。

function order_system($order_id)
{
global $woocommerce;

try {
    // do something that can go wrong
    // instantiate new order from WooCommerce
    $order  = new WC_Order($order_id);
    $userid = $order->user_id;

foreach ($order->get_items() as $item_id => $values) :  
                if (isset($values['_nick_form_data'])) :
// Not getting inside this case statement
                endif;
    endforeach;
....

我不确定我做错了什么,非常感谢任何帮助。谢谢你!!


虽然有点晚了,但是:尽管您将元数据附加到cart项目,它们随后不会被添加到order创建订单时的项目。要做到这一点:

function nick_add_order_item_meta($itemID, $values) {

    $nick_form_data = $values['_nick_form_data'];

    if (!empty($nick_form_data)) {
        wc_add_order_item_meta($itemID, '_nick_form_data', $nick_form_data);
    }
}

add_action('woocommerce_add_order_item_meta','nick_add_order_item_meta', 1, 2);

创建订单时,您的购物车商品元数据_nick_form_data将附加到每个项目。然后,当您查看订单时,您将能够在 WooCommerce 后端看到它:每个订单项目都应该有一个[?]它旁边将显示附加的元数据。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

保留商品上的元数据,并在结帐完成时检索 的相关文章

  • php56 - CentOS - Remi 仓库

    我刚刚在测试盒上安装了 php 5 6 正常的 cli php 解释器似乎不存在 gt php v bash php command not found gt php56 v PHP 5 6 13 cli built Sep 3 2015
  • 如何显示 PHP 对象

    我有这样的代码 dataRecord1 client gt GetRecord token table filter echo pre print r dataRecord1 echo pre foreach dataRecord1 gt
  • file_get_contents,HTTP 请求失败

    我尝试使用以下方式从另一个网站获取内容file get contents但我总是收到 无法打开流 HTTP 请求失败 allow url fopen 已打开 并且我已经在防火墙关闭的情况下进行了测试 但还是会出现这种情况 请问还有什么原因呢
  • 如何改进 PHP 分页算法?

    我正在研究 PHP 中的分页算法 我可以猜测它需要改进的空间 所以我想对如何改进它有一些想法 无论是从 UI UX 的角度清理代码本身 还是你能想到的任何其他东西 该算法应输出如下所示的分页 1 2 3 6 7 8 97 98 99 or
  • CodeIgniter/PHP - 从视图内调用视图

    基本上 对于我的网络应用程序 我正在尝试更好地组织它 目前 每次我想加载页面时 我都必须从控制器中执行此操作 如下所示 this gt load gt view subviews template headerview this gt lo
  • php/symfony/doctrine 内存泄漏?

    我在使用 symfony 1 4 和原则 1 2 将对象批量插入数据库时 遇到问题 我的模型有一种称为 Sector 的对象 每个对象都有多个 Cupo 类型的对象 通常范围从 50 到 200000 这些物体非常小 只是一个短标识符字符串
  • PHP 多个 Ajax 请求:第一个请求阻止第二个请求

    我在一页上有 2 个 ajax 请求 我运行了第一个请求并单独启动了第二个请求 但第二个在第一个运行后停止工作 第一次结束后继续 第一个请求需要很长时间 大约 30 60 秒 此时我需要第二个请求来显示日志第一个请求发生的情况 我尝试使用
  • 很简单的PHP加法问题

    我想我已经关注这个问题太久了 为什么这段代码打印 no 它应该打印 yes 不是吗 我在 PHP 5 3 和 PHP 5 2 上尝试过 都打印 no See 比较浮点数 http www cygnus software com papers
  • 使用活动目录对 Intranet 站点上的用户进行身份验证

    我建立了一个 内联网 站点 它有自己的登录系统 用户注册为新用户 并使用其上的用户名 密码登录该站点 但是 现在我想扩展它 让 Intranet 站点使用现有的 ActiveDirectory 进行身份验证 这就是我正在寻找的 前进 当用户
  • FPM 与 apache2 无法工作(权限被拒绝)

    我正在尝试使用 apache fastcgi 和 fpm 设置一个 Debian Web 服务器 但我越来越恼火 一旦我停用 mod php 我就会收到以下错误 2014 年 5 月 22 日星期四 12 16 10 错误 客户端 xxx
  • 如何使用 PATCH 更新简单的数据库字段?

    我是 php 和 API 的新手 我正在尝试学习这些方法 但我无法执行 PATCH 或 PUT 来更新我的简单 mysql 数据库 我使用了以下代码 if isset PATCH con mysqli connect localhost r
  • Twitch API - 无法使用 PHP 获取身份验证令牌

    stackoverflow 的成员们大家好 我不是一个喜欢寻求帮助的人 但在这种情况下 我认为这是解决我的问题的唯一方法 谷歌并没有给我太大帮助 所以 我的问题 我想使用 Twitch API 获取一些数据 听起来很容易 我希望是这样 下面
  • 如何将路径添加到 Apache PATH 变量?

    我在 apache2 的 custom conf 文件中设置了以下内容 SetEnv PATH PATH opt local lib mysql5 bin this is a test 但是它不起作用 当我打电话时 hey shell ex
  • php - 重定向ajax请求[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 php wordpress 中重定向 ajax 请求 I tried header Location http redirect
  • PHP 何时实现了函数使用闭包? [复制]

    这个问题在这里已经有答案了 我在 PHP 手册中找不到解释的部分use 我有代码 num 0 array walk recursive REQUEST function mValue use num num 我的 Eclipse 抱怨 Pa
  • 将 Base64 字符串转换为图像文件? [复制]

    这个问题在这里已经有答案了 我正在尝试将我的 Base64 图像字符串转换为图像文件 这是我的 Base64 字符串 http pastebin com ENkTrGNG http pastebin com ENkTrGNG 使用以下代码将
  • Google Drive V3、Google API 客户端 2.0 - 批量上传失败

    使用 Google Drive V3 和 API v2 0 主分支进行批量上传失败 我已经修改了https github com google google api php client blob master examples batch
  • Laravel 5 Eloquent 在多个级别上将关系附加到 JSON

    因此 在模型中包含关系非常容易 例如 class User extends Model protected with roles class Role extends Model protected with permissions 当有对
  • 单元测试和静态方法

    阅读并学习单元测试 试图理解以下帖子 http misko hevery com 2008 12 15 static methods are death to testability 这解释了静态函数调用的困难 我不太清楚这个问题 我一直认
  • 如何强制下载图片?

    我的页面上有一个动态生成的图像 如下所示 img src 我不想告诉我的用户右键单击图像并点击保存 而是想公开一个下载链接 单击该链接将提示下载图像 如何实现这一目标 最初我在 js 中尝试这样做 var path my image att

随机推荐