1 回答
TA贡献1785条经验 获得超4个赞
您的代码大部分是正确的,但缺少一些东西,以避免出现任何问题:
// Important: Early enable customer WC_Session
add_action( '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
与用户数据相关的区别WordPress
:
WC()->customer
是从定义的登录用户WC_Customer
访问注册用户数据的对象(因此存储在数据库和表中的数据)或者它将读取访客的会话数据。wp_users
wp_usermeta
WC()->session
WooCommerce session
是为任何客户或客人存储的数据,链接到浏览器 cookie 并通过wp_woocommerce_sessions
表链接到数据库。但请注意,“客户”WC 会话在第一次添加到购物车时启用。WordPress 功能
get_user_meta()
,set_user_meta()
并update_user_meta()
允许从wp_usermeta
表中为注册用户读取/写入/更新用户元数据。
注意: 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);
对于WC()->customer
,您可以使用任何WC_Customer
可用的 getter 和 setter 方法,但有些方法对来宾不起作用。
- 1 回答
- 0 关注
- 133 浏览
添加回答
举报