我有一个功能,这样做:
$order = new WC_Order($order_id);
$customer = new WC_Customer( $order_id );
Run Code Online (Sandbox Code Playgroud)
如何从中获取客户详细信息?我已经尝试了文档中的所有内容,但不知何故,只是存在一些细节,但其余的不是,例如
$data['Address'] = $customer->get_address() . ' ' . $customer->get_address_2();
$data['ZipCode'] = $customer->get_postcode();
Run Code Online (Sandbox Code Playgroud)
是空的.
干
var_dump($customer)
Run Code Online (Sandbox Code Playgroud)
生产:
object(WC_Customer)#654(2){["_ data":protected] => array(14){["country"] => string(2)"IT"> ["state"] => string(0) ""["postcode"] => string(0)""["city"] => string(0)""["address"] = >> string(0)""["address_2"] => string (0)""["shipping_country"] => string(2)"IT"["shipping_state"] => string(2)"BG"["shipping_postcode"] => string(0)""["shipping_city" ] = >> string(0)""["shipping_address"] => string(0)""["shipping_address_2"] => string(0)""["is_vat_exempt"] => bool(false)["calculated_shipping "] => bool(false)}?["_changed":"WC_Customer":private] => bool(false)}
正如你所看到的,这个城市是现在的,但其余的都是空的.我已经检查了客户的WP_usermeta和管理面板,所有数据都在那里.
有什么想法吗?
使用Woocommerce 2.6.8,我无法获得文档中描述的订单项数据信息,这里也是SO.
我想要的只是得到行项目价格和数量,这应该是这样简单:
$order = new WC_Order( $order_id );
$order_items = $order->get_items();
foreach ($order_items as $items_key => $items_value) {
echo $items_value['name']; //this works
echo $items_value['qty']; //this doesn't work
echo $items_value[item_meta][_qty][0]; //also doesn't work
echo $items_value['line_total']; //this doesn't work
}
Run Code Online (Sandbox Code Playgroud)
仔细观察返回的内容
Array
(
[1] => Array
(
[name] => Sample Product 1
[type] => line_item
[item_meta] =>
[item_meta_array] => Array
(
[1] => stdClass Object
(
[key] => _qty
[value] => 1
)
[2] => stdClass Object …Run Code Online (Sandbox Code Playgroud) 好了,阅读Woocommerce 3.0+的变化,似乎你不能再直接访问这个类了,所以我认为这个代码需要改变,因为它正在吐出一个错误:
$order_item_id = 15;
$order_item = new WC_Order_Item_Product($order_item_id);
$return = $order_item->get_id() ? $order_item : false;
Run Code Online (Sandbox Code Playgroud)
但是,令人尴尬的是,我不确定如何更改此代码以在此类的最新版本中使用正确的新getter和setter函数,该类不再具有构造.怎么做得好?我没有看到任何get关于获得订单项的功能与上述相同.
https://docs.woocommerce.com/wc-apidocs/class-WC_Order_Item_Product.html
也许我在这里忽视一些事情?
我试图通过使用以下方法从Woocommerce的订单中提取项目元值:
$data = wc_get_order_item_meta( $item, '_tmcartepo_data', true );
Run Code Online (Sandbox Code Playgroud)
但是,我找不到将order_item_id作为第一个参数的方法(使用get_items)
global $woocommerce, $post, $wpdb;
$order = new WC_Order($post->ID);
$items = $order->get_items();
foreach ( $items as $item ) {
$item_id = $item['order_item_id']; //???
$data = wc_get_order_item_meta( $item_id, '_tmcartepo_data', true );
$a = $data[0]['value'];
$b = $data[1]['value'];
echo $a;
echo $b;
}
Run Code Online (Sandbox Code Playgroud)
我的意思是这个订单item_id(1和2)
我该怎么办?
谢谢.
在WooCommerce中,我想在客户成功签出后向API发送请求.它基本上是一个网站,客户在那里销售在线课程(像udemy).
当客户退房时,我想发送API请求并为该特定课程注册用户.我尝试了几个WooCommerce钩子,但没有一个对我有效.
这是我正在使用的代码:
add_action('woocommerce_checkout_order_processed', 'enroll_student', 10, 1);
function enroll_student($order_id)
{
echo $order_id;
echo "Hooked";
}
Run Code Online (Sandbox Code Playgroud)
我在激活的插件中编写此代码,为了方便起见,我目前正在使用Cash on Delivery方法.
任何人都可以指出我出错的地方,因为当我结账时,我无法看到消息"挂钩"我正在打印也不是$order_id?
我带我到成功页面,并没有显示我正在打印的这两件事.
在我的自定义插件中,我需要捕获每次订单状态从 变为 的情况,wc_on_hold因此wc_completed我尝试写下:
function so_status_completed( $order_id, $old_status, $new_status ) {
// if user is active , then get order amount and do all other personal calculations
global $wpdb;
$order = wc_get_order( $order_id );
//$payment_method = $order->get_payment_method(); //returns payment method bacs,cheque,cod etc
$user_id = $order->get_user_id();
$total = $order->get_total();
$order_data = $order->get_data();
//$order_total = $order->get_formatted_order_total();
$order_total = $order->get_total();
echo '<script>console.log("Debug Objects: Check order_total ' . $order_total. '");</script>';
}
add_action('woocommerce_order_payment_status_changed','so_status_completed',10,1);
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试将订单测试从暂停更改为完成时,我无法在 Chrome 控制台上回显给我订单价格......也许使用 add_action 不是将侦听器置于该事件的正确方法?
另外,由于我就在这里,我正在使用 $order-get_total() ,我在网上搜索了它的功能,但没有找到深入的文档,所以我想问你该方法是否是免费检索订单金额的正确方法应用?
谢谢!干杯!!!
wordpress orders woocommerce hook-woocommerce woocommerce-theming
如何获得产品woocommerce的元数据?我有我的产品现场定制,我需要获取这些数据.
{"ID":151,
"ORDER_ID":251,
"NAME":"car",
"PRODUCT_ID":87,
"VARIATION_ID":0,
"QUANTITY":1,
"TAX_CLASS":"",
"SUBTOTAL":"3",
"SUBTOTAL_TAX":"0",
"TOTAL":"3",
"TOTAL_TAX":"0",
"TAXES":{"TOTAL":[],
"SUBTOTAL":[]},
"META_DATA":[{"ID":1433,
"KEY":"my_car",
"VALUE":"red"}]}
Run Code Online (Sandbox Code Playgroud)
但总是结果是一样的,我无法进入现场meta_data.该领域ID和name我有权访问.
我用get_data()和get_item(),但是当我尝试访问get_data()到外地 meta_data它给我这个错误:
UNCAUGHT ERROR: CANNOT USE OBJECT OF TYPE WC_DATETIME AS ARRAY IN
Run Code Online (Sandbox Code Playgroud)
并且get_item(),meta_data由于受到保护,该值为null.
我怎样才能获得这些价值?
我正在尝试获取订单的订单项.
我这样做:
$order = new WC_Order(147);
foreach ($order->get_items() as $key => $lineItem) {
print_r('<pre>----');
print_r($lineItem);
print_r('----</pre>');
}
Run Code Online (Sandbox Code Playgroud)
我可以看到我需要的所有数据,但数组显示:
[meta_data:protected] => Array
Run Code Online (Sandbox Code Playgroud)
如何访问此数组以获取值?
谢谢.
对于页面“woocommerce_thankyou”上的 Api 需要获取 sku。我有:
$order = wc_get_order( $order_id );
foreach ($order->get_items() as $item_key => $item_values):
$product = new WC_Product($item_id);
$item_sku[] = $product->get_sku();
endforeach;
Run Code Online (Sandbox Code Playgroud)
但行不通。
我需要创建一个向我的插件WooCommerce Dymo Print返回值的函数。它要求$order_id,$label和$object。该$object是场我需要的价值回归。
我创建了以下代码:
add_filter('wc_dymo_order_function', 'wpf_dymo_order_output',10,3);
function wpf_dymo_order_output( $order_id, $label, $object ) {
if($label=='shipping' && $object='DEL_DATE') {
//Get order from order ID
$order=wc_get_order($order_id);
$del_date='';
$order_data = $order->get_data(); // The Order data
$order_del_date = $order_data['delivery_date'];
//Return a list (string) of all product inside this order, make sure it's well formatted before printing.
return $order_del_date;
} else {
//Return order_id if is not correct label and object
return '';
}
}
Run Code Online (Sandbox Code Playgroud)
但是,它似乎不起作用,我认为是因为delivery_date嵌套在数组中,并且我没有正确获取它。 …