在 WooCommerce 中添加到购物车之前尽早设置运输邮政编码

2023-12-03

我希望客户能够在将产品添加到购物车之前设置他们的邮政编码。
然后保存该邮政编码并用于定义可用的交付方式。

我已经制作了以下功能,但它并不总是有效,而且我不确定应该使用哪些 Woocommerce 方法以及它们之间有什么区别:

  • WC()->customer->set_shipping_postcode(...) and WC()->customer->get_shipping_postcode()
  • WC()->session->set('shipping_postcode', ...) and WC()->session->get('shipping_postcode')
  • update_user_meta(get_current_user_id(), 'shipping_postcode', ...) and get_user_meta(get_current_user_id(), 'shipping_postcode', true)

另外,我正在保存用于计费和运输的邮政编码,因为我不知道用户之前是否下过订单并选择将其交付到与帐单地址不同的送货地址。


function getDeliveryZipcode()
{
  $shipping_postcode = WC()->customer->get_shipping_postcode();
  $billing_postcode = WC()->customer->get_billing_postcode();
  return $shipping_postcode ? $shipping_postcode : $billing_postcode;
}

function setDeliveryZipcode()
{
  $zipcode = $_GET['zipcode'];

  // ...

  WC()->customer->set_shipping_postcode(wc_clean($zipcode));
  WC()->customer->set_billing_postcode(wc_clean($zipcode));
}

Thanks


您的代码大部分是正确的,但缺少一些内容,以避免出现任何问题:

// Important: Early enable customer WC_Session 
add_action( 'woocommerce_init', 'wc_session_enabler' );
function wc_session_enabler() {
    if ( ! is_admin() && ! WC()->session->has_session() ) {
        WC()->session->set_customer_session_cookie( true );
    }
}

function getDeliveryZipcode()
{
    $shipping_postcode = WC()->customer->get_shipping_postcode();
    $billing_postcode = WC()->customer->get_billing_postcode();
    
    return ! empty($shipping_postcode) ? $shipping_postcode : $billing_postcode;
}

function setDeliveryZipcode()
{
    if ( isset($_GET['zipcode']) ) {
        WC()->customer->set_shipping_postcode(wc_clean($_GET['zipcode']));
        WC()->customer->set_billing_postcode(wc_clean($_GET['zipcode']));
    }
}

代码位于活动子主题(或活动主题)的functions.php 文件中。经过测试并有效。


以下是解释之间的差异WC_Session, WC_Customer and WordPress与用户数据相关:

  • WC()->customer is the WC_Customer访问的对象来自定义的登录用户的注册用户数据(所以存储在数据库中的数据wp_users and wp_usermeta表)或它将读取访客的会话数据.
  • WC()->session数据存储在WooCommerce session对于任何客户或客人,通过链接到浏览器 cookie 和数据库wp_woocommerce_sessions table. 但请注意,“客户”WC 会话在第一次添加到购物车时启用。
  • WordPress 功能get_user_meta(), set_user_meta() and update_user_meta()允许读取/写入/更新用户元数据wp_usermeta注册用户的表。

Note:WooCommerce 中不存在以下内容:

$postcode = WC()->session->get('shipping_postcode'); 
WC()->session->set('shipping_postcode', $postcode);

可以使用以下方式读取客户会话数据:

// Get an array of the current customer data stored in WC session
$customer_data = (array) WC()->session->get('customer'); 

// Get the billing postcode
if ( isset( $customer_data['postcode'] ) )
    $postcode = $customer_data['postcode']; 

// Get the shipping postcode
if ( isset( $customer_data['shipping_postcode'] ) )
    $postcode = $customer_data['shipping_postcode'];

例如可以使用以下方式设置客户会话数据:

// Get an array of the current customer data stored in WC session
$customer_data = (array) WC()->session->get('customer'); 

// Change the billing postcode
$customer_data['postcode'] = '10670';

// Change the shipping postcode
$customer_data['shipping_postcode'] = '10670';

// Save the array of customer WC session data
WC()->session->set('customer', $customer_data);

For WC()->customer,您可以使用任何WC_Customer可用的 getter 和 setter 方法,但有些方法对客人不起作用。

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

在 WooCommerce 中添加到购物车之前尽早设置运输邮政编码 的相关文章

  • 如何将图像从 Android 应用程序上传到网络服务器的特定文件夹中

    如何将图像从 android 移动到 Web 服务器上的指定文件夹 这是我的安卓代码 package com example bitmaptest import java io ByteArrayOutputStream import ja
  • 所有 PHP 相等比较都是对称的吗?

    Is a b总是等价于 b a 我认为在 JavaScript 中 由于强制转换 有一些奇怪的情况并非如此 I think ide https stackoverflow com questions 4752579 are all php
  • 正则表达式上的换行符

    我试图替换两个标签之间的所有内容 但我无法构建正确的表达式 这就是我所做的
  • 简单的 PHP 回显代码不起作用

    这是我的 html 和 php 脚本 h1 Bob s Auto Parts h1 table width 100 tr tr table 为什么这个输出会出现一个 gt 我希望它是 这有效 仅有的 这是输出 鲍勃的汽车零件 鲍勃
  • php源代码到PO文件生成器

    我必须将我的所有回显 打印字符串转换为PHP源代码代码文件到PO file 为了语言翻译 有批次吗对流器可用于相同的 我如何做到这一点 make gettext在您的服务器上运行 setup a 翻译适配器 例如带有 gettext 适配器
  • laravel - 使用请求类或输入类

    在宁静的控制器中 我应该使用哪个类来获取传递的变量 member gt email Input get email or member gt email Request get email 两种选择都适合我 但有什么区别 Input get
  • 如何隐藏 URL 中的锚标记

    如何隐藏地址栏中以下链接 href 的哈希值 a href index php dev name 所以它会将我重定向到index php dev name 但我希望地址栏只显示index php 您可以使用 Javascript oncli
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • 从类似 cronjob 的语法创建“下次运行时间”日期

    在我正在创建的应用程序中 用户可以安排重复任务 生成间隔模式的简单值是 Minute 0 59 90 each minute Hour 0 23 90 each hour Day of month 1 31 90 each day of m
  • 使用 Instagram Basic Display API 时出现“无效平台应用程序”错误

    我正在尝试使用 Instagram Basic 显示 API 但是当我发布授权代码以获取访问令牌时 我不断收到以下错误 error type OAuthException 代码 400 error message 平台应用无效 我正在遵循此
  • 如何纠正这个非法字符串偏移?

    我收到此错误 警告 第 32 行 home mysite public html wp content themes evento lib php extra class php 中的非法字符串偏移 type 我意识到文件中的这部分代码是错
  • Facebook 应用程序无法获取会话

    我正在 Heroku 上为 Facebook 开发一个非常基本的 PHP 应用程序 它显示非常基本的用户信息 如姓名 个人资料图片 但该应用程序在 getToken 方法中停止 我在登录我的个人资料后尝试了该应用程序 但仍然出现相同的消息
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • 如何通过php获取网页的Open Graph协议?

    PHP 有一个简单的命令来获取网页的元标记 get meta tags 但这仅适用于具有名称属性的元标记 然而 开放图谱协议如今变得越来越流行 从网页获取 opg 值的最简单方法是什么 例如 我看到的基本方法是通过 cURL 获取页面并使用
  • 使用 json_encode() 函数在 PHP 数组中生成 JSON 键值对

    我正在尝试以特定语法获取 JSON 输出 这是我的代码 ss array 1 jpg 2 jpg dates array eu gt 59 99 us gt 39 99 array1 array name gt game1 publishe
  • PHP 中的引用

    我正在编写一个自定义博客引擎 并且希望拥有类似于 Wordpress 的引用 我可以查看 WordPress 源代码 但我真的更喜欢某种教程 但到目前为止我还没有找到 有没有关于在 PHP5 中实现 trackbacks 或 pingbac
  • WordPress 自定义帖子类型未显示在搜索结果中

    我在 WordPress 中遇到自定义帖子类型 测验 和搜索的问题 自定义帖子类型未显示在我的搜索结果页面中 我的搜索结果中仅显示默认的帖子内容 以下是我使用的代码 函数 php函数create posttype register post
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • phpActiveRecord 日期时间格式不正确

    当尝试使用 phpActiveRecord 在表中创建记录时 出现以下错误 Invalid datetime format 1292 Incorrect datetime value 2013 06 20 11 59 08 PDT for
  • 如何清除 APC 缓存而不使 Apache 崩溃?

    如果 APC 存储大量条目 清除它们会导致 httpd 崩溃 如果 apc clear cache user 花费的时间超过 phps max execution time 调用 apc clear cache 的脚本 将在之前被 php

随机推荐

  • jquery mobile w/ php 登录表单

    我是使用 jquery mobile 和 php 的新手 提交后 我的登录表单上的提交按钮出现了一些问题 它转到 home php 页面 但 url 也没有转到 home php 它仍然是 login php 我怎样才能解决这个问题
  • Android中如何将session_id保存为cookie值并将其发送到服务器?

    我正在开发一个使用网络服务调用的应用程序 我正在调用我的登录网络服务 如下所示 String url http mydomaim com login php UserFunctions userFunction new UserFuncti
  • 如何在php中回显echo?

    我有一些基本的 PHP 代码 raceramps56 short My Test Product leftMenu div class leftMenuProductButton div 不会回显 PHP 代码 仅回显元素 我尝试过类似的事
  • pyspark fillna 不适用于 ArrayType 列

    我有一个 Spark 集群版本 3 1 2 我有以下输入数据 name gender arr James M 60000 Michael M 70000 31 Robert null 44 400000 Maria F 500000 12
  • RStudio 中与 Shiny 相关的问题

    我想在从 RStudio 选择 Shiny 中定义的选项时插入表格和图表 当选择 选择所有属性 选项时 我想在同一页面上显示 Table1 和 Graph1 如果我按选项 排除产生小于 L 且大于 S 的属性 则仅显示 Table2 和 G
  • 根据另一行中的值获取平均值

    我的 Excel 文件中有这样的值 QR QR AVG val1 q1 5 q1 3 q1 4 q2 7 q2 9 q3 10 q3 11 q3 12 q3 11 q4 5 q5 5 q5 7 我希望 QR AVG 字段表示由不同 QR 值
  • Azure Active Directory 与 MVC,客户端和资源标识同一应用程序

    跟进这个问题 如何在 ASP NET MVC 上执行 Azure Active Directory 单点登录和表单身份验证 我尝试在默认 MVC 4 的登录操作上编写简单的代码 该代码同时使用默认的表单身份验证和 Azure Active
  • Firebase / Firestore 将文档添加到子集合版本 9

    出于某种原因 我只是不明白 我想将新文档添加到子集合中 这是我的布局如下 Users Collection UID Document Lists Collection Category Document Category Document
  • 如何更改 ColorDialog 的标题?

    我正在旋转一个ColorDialogWinForms 中的组件让用户选择特定自定义控件的图表的背景色和前景色 两个配置选项都位于配置对话框的同一页面上 因此我想在弹出对话框时将颜色对话框的标题设置为 背景颜色 以更改图表的背景 并将 网格颜
  • Jackson - 循环依赖导致反序列化失败

    好的 所以我正在尝试使用 jackson json 转换器测试一些东西 我正在尝试模拟图形行为 所以这些是我的 POJO 实体 JsonIdentityInfo generator ObjectIdGenerators PropertyGe
  • 使用 Castle Windsor 在 ASP.NET MVC 中实现多租户的最佳实践是什么?

    我有一个具有两种不同实现的服务 我想注入到控制器构造函数中 具体取决于一个标准 目前该标准是存储在会话中的一个简单值 这是我现在得到的 服务接口 public interface IService string GetSampleText
  • 如何向后视觉选择计算?

    我想直观地向后选择计算 p e 200 3 This is my text 300 2 9 3 This is text 0 25 2 000 sqrt 15 1 5 原因是我会在插入模式下使用它 编写计算后 我想选择计算 使用地图 并将计
  • getScript 或 eval 在特定位置?

    我想知道 eval 或 jQuery 的 getScript 的某些变体 是否可以用于将外部 javascript 定位在 DOM 末尾或头部以外的位置 我试过了 var head document getElementById fig 代
  • 如何将 Microsoft 用户从 Azure 同步到 Keycloak

    我们正在尝试找出一种将用户从 Azure 帐户同步到 Keycloak 的方法 不幸的是 我们找不到它的文档 你知道正确的方法吗 我想使用 Azure 作为外部数据库 可用于对用户进行身份验证 谢谢 我想使用 Azure 作为可用于进行身份
  • 使用 gcc、g++ 和 gdb 在 Window 7 上设置 VSCode 进行 C/C++ 调试

    我正在遵循以下指示here 安装了cpptools 已创建tasks json包含以下内容 version 0 1 0 command g isShellCommand true showOutput always args g hello
  • 如何将“setcdr”与缓冲区局部变量一起使用

    我正在使用的行为setcdr这似乎表明它不限于在不同缓冲区中包含相同名称的缓冲区局部变量 我尝试过使用with current buffer 但这并不能解决问题 例如 buffer A and buffer B两者都包含一个名为的局部变量v
  • 如何反转 Firebase 中的项目顺序

    如何在 Firebase 中反转此列表的顺序 我希望最后一项成为第一项 我尝试使用queryOrdered 但这并没有什么区别 我列出了从 Firebase 检索的数据结构的一个示例 KhPRPQEOiVzPW7G2iQI amount 2
  • JMeter:如何在多个线程组循环中重用/重新打开 CSV?

    在 JMeter 中 我有一个 CSV 用户列表 每个用户都应该上传一定数量的文件 这些文件列在第二个 CSV 中 每个用户必须上传所有文件 由于服务器无法一次处理所有线程 因此我将线程组设置为使用 X 个用户并循环 Y 次 以便最终所有用
  • dataWithContentsOfURL 通过蜂窝网络返回 NSCocoaErrorDomain Code=256,但不通过 wifi 返回

    我遇到了一个非常奇怪的问题 dataWithContentsOfURL 已开始通过蜂窝网络返回错误代码 256 但不通过 wifi 返回错误代码 操作无法完成 可可错误 256 我确实有蜂窝数据连接 并且它正在运行 所以我的蜂窝连接不是问题
  • 在 WooCommerce 中添加到购物车之前尽早设置运输邮政编码

    我希望客户能够在将产品添加到购物车之前设置他们的邮政编码 然后保存该邮政编码并用于定义可用的交付方式 我已经制作了以下功能 但它并不总是有效 而且我不确定应该使用哪些 Woocommerce 方法以及它们之间有什么区别 WC gt cust