これを行う関数があります:
$order = new WC_Order($order_id);
$customer = new WC_Customer( $order_id );
これから顧客の詳細を取得するにはどうすればよいですか?私はドキュメントですべてを試しましたが、どういうわけか、いくつかの詳細だけが存在しますが、残りの部分はありません
$data['Address'] = $customer->get_address() . ' ' . $customer->get_address_2();
$data['ZipCode'] = $customer->get_postcode();
空です。
やること
var_dump($customer)
生産物:
object(WC_Customer)#654(2){["_data":protected] => array(14){["country"] => string(2) "IT"> ["state"] => string(0) "" ["郵便番号"] => 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と顧客の管理パネルをチェックしました、そして、すべてのデータはそこにあります。
何かご意見は?
$customer = new WC_Customer();
およびglobal $woocommerce; $customer = $woocommerce->customer;
非管理者ユーザーとしてログインした場合でも、空のアドレスデータを取得していました。
私の解決策は次のとおりでした:
function mwe_get_formatted_shipping_name_and_address($user_id) {
$address = '';
$address .= get_user_meta( $user_id, 'shipping_first_name', true );
$address .= ' ';
$address .= get_user_meta( $user_id, 'shipping_last_name', true );
$address .= "\n";
$address .= get_user_meta( $user_id, 'shipping_company', true );
$address .= "\n";
$address .= get_user_meta( $user_id, 'shipping_address_1', true );
$address .= "\n";
$address .= get_user_meta( $user_id, 'shipping_address_2', true );
$address .= "\n";
$address .= get_user_meta( $user_id, 'shipping_city', true );
$address .= "\n";
$address .= get_user_meta( $user_id, 'shipping_state', true );
$address .= "\n";
$address .= get_user_meta( $user_id, 'shipping_postcode', true );
$address .= "\n";
$address .= get_user_meta( $user_id, 'shipping_country', true );
return $address;
}
...このコードは、管理者としてログインしているかどうかに関係なく機能します。
注文時に顧客が入力した顧客の詳細が必要な場合は、次のコードを使用できます
_$order = new WC_Order($order_id);
$billing_address = $order->get_billing_address();
$billing_address_html = $order->get_formatted_billing_address(); // for printing or displaying on web page
$shipping_address = $order->get_shipping_address();
$shipping_address_html = $order->get_formatted_shipping_address(); // for printing or displaying on web page
_
これとは別に、$customer = new WC_Customer( $order_id );
は顧客の詳細を取得できません
まず、new WC_Customer()
は引数を取りません
次に、_WC_Customer
_は、ユーザーがログインし、管理者側にいないときにのみ顧客の詳細を取得します。代わりに、彼/彼女は「マイアカウント」、「ショップ」、 「カート」、「チェックアウト」ページ
これらの情報が役立つことを願っています。
多分 Woocommerce Order クラスを見ますか?たとえば、顧客のメールアドレスを取得するには:
$order = new WC_Order($order_id);
echo $order->get_billing_email();
ちょっとした考え...
ただし、これはお勧めできません
顧客の詳細を取得する場合。ユーザーがアカウントを作成せず、注文を行う場合でも。データベースから直接クエリすることができます。
ただし、直接クエリを実行するとパフォーマンスの問題が発生する可能性がありますが、これは確実に100%動作します
post_id
およびmeta_keys
で検索できます
global $wpdb; // Get the global $wpdb
$order_id = {Your Order Id}
$table = $wpdb->prefix . 'postmeta';
$sql = 'SELECT * FROM `'. $table . '` WHERE post_id = '. $order_id;
$result = $wpdb->get_results($sql);
foreach($result as $res) {
if( $res->meta_key == 'billing_phone'){
$phone = $res->meta_value; // get billing phone
}
if( $res->meta_key == 'billing_first_name'){
$firstname = $res->meta_value; // get billing first name
}
// You can get other values
// billing_last_name
// billing_email
// billing_country
// billing_address_1
// billing_address_2
// billing_postcode
// billing_state
// customer_ip_address
// customer_user_agent
// order_currency
// order_key
// order_total
// order_shipping_tax
// order_tax
// payment_method_title
// payment_method
// shipping_first_name
// shipping_last_name
// shipping_postcode
// shipping_state
// shipping_city
// shipping_address_1
// shipping_address_2
// shipping_company
// shipping_country
}
$customer_id = get_current_user_id();
print get_user_meta( $customer_id, 'billing_first_name', true );
WooCommerceの「注文」は単なるカスタム投稿タイプであるため、すべての注文はwp_postsに保存され、その注文情報はwp_postmetaテーブルに保存されます。
WooCommerce「注文」の詳細を取得したい場合は、以下のコードを使用できます。
$order_meta = get_post_meta($order_id);
上記のコードは、WooCommerceの「注文」情報の配列を返します。以下に示すように、その情報を使用できます。
$shipping_first_name = $order_meta['_shipping_first_name'][0];
すべてのデータを表示するには、「$ order_meta」配列に存在します。以下のコードを使用できます:
print("<pre>");
print_r($order_meta);
print("</pre>");
私はこのようなものを探していました。うまくいきます。したがって、このようなwoocommerceプラグインで携帯電話番号を取得します-
$customer_id = get_current_user_id();
print get_user_meta( $customer_id, 'billing_phone', true );
少し遅れましたが、私はこれに対処し、この投稿に出会いました。本当に欲しいものに応じて、次のような注文から詳細を取得できます。
$field = get_post_meta( $order->id, $field_name, true );
$ field_nameは、「_ billing_address_1」または「_shipping_address_1」または「_first_name」です。他のフィールドをグーグルで検索できますが、先頭の「_」を忘れないでください。
この注文の顧客を取得し、フィールドを直接取得する場合、ソリューションと同じように機能しますが、顧客オブジェクト全体を取得する必要はありません。
$customer_id = (int)$order->user_id;
$field= get_user_meta($customer_id, $field_name,true)
;この場合、$ field_nameは「_」で始まりません。例:「first_name」および「billing_address_1」
2017-2019 WooCommerceバージョン3+および CRUDオブジェクト
1)_WC_Order
_および _WC_Abstract_Order
_ クラスのゲッターメソッドを_WC_Order
_オブジェクトインスタンスの次のように使用できます。
_// Get an instance of the WC_Order Object from the Order ID (if required)
$order = wc_get_order( $order_id );
// Get the Customer ID (User ID)
$customer_id = $order->get_customer_id(); // Or $order->get_user_id();
// Get the Customer billing email
$billing_email = $order->get_billing_email();
// Get the Customer billing phone
$billing_phone = $order->get_billing_phone();
// Customer billing information details
$billing_first_name = $order->get_billing_first_name();
$billing_last_name = $order->get_billing_last_name();
$billing_company = $order->get_billing_company();
$billing_address_1 = $order->get_billing_address_1();
$billing_address_2 = $order->get_billing_address_2();
$billing_city = $order->get_billing_city();
$billing_state = $order->get_billing_state();
$billing_postcode = $order->get_billing_postcode();
$billing_country = $order->get_billing_country();
// Customer shipping information details
$shipping_first_name = $order->get_shipping_first_name();
$shipping_last_name = $order->get_shipping_last_name();
$shipping_company = $order->get_shipping_company();
$shipping_address_1 = $order->get_shipping_address_1();
$shipping_address_2 = $order->get_shipping_address_2();
$shipping_city = $order->get_shipping_city();
$shipping_state = $order->get_shipping_state();
$shipping_postcode = $order->get_shipping_postcode();
$shipping_country = $order->get_shipping_country();
_
2)_WC_Order
_ get_data()
メソッドを使用して、次のような注文メタデータから保護されていないデータ配列を取得することもできます。
_// Get an instance of the WC_Order Object from the Order ID (if required)
$order = wc_get_order( $order_id );
// Get the order meta data in an unprotected array
$data = $order->get_data(); // The Order data
$order_id = $data['id'];
$order_parent_id = $data['parent_id'];
// Get the Customer ID (User ID)
$customer_id = $data['customer_id'];
## BILLING INFORMATION:
$billing_email = $data['billing']['email'];
$billing_phone = $order_data['billing']['phone'];
$billing_first_name = $data['billing']['first_name'];
$billing_last_name = $data['billing']['last_name'];
$billing_company = $data['billing']['company'];
$billing_address_1 = $data['billing']['address_1'];
$billing_address_2 = $data['billing']['address_2'];
$billing_city = $data['billing']['city'];
$billing_state = $data['billing']['state'];
$billing_postcode = $data['billing']['postcode'];
$billing_country = $data['billing']['country'];
## SHIPPING INFORMATION:
$shipping_first_name = $data['shipping']['first_name'];
$shipping_last_name = $data['shipping']['last_name'];
$shipping_company = $data['shipping']['company'];
$shipping_address_1 = $data['shipping']['address_1'];
$shipping_address_2 = $data['shipping']['address_2'];
$shipping_city = $data['shipping']['city'];
$shipping_state = $data['shipping']['state'];
$shipping_postcode = $data['shipping']['postcode'];
$shipping_country = $data['shipping']['country'];
_
ユーザーアカウントデータを(注文IDから)取得する:
1) _WC_Customer
_ クラスのメソッドを使用できます:
_// Get the user ID from an Order ID
$user_id = get_post_meta( $order_id, '_customer_user', true );
// Get an instance of the WC_Customer Object from the user ID
$customer = new WC_Customer( $user_id );
$username = $customer->get_username(); // Get username
$user_email = $customer->get_email(); // Get account email
$first_name = $customer->get_first_name();
$last_name = $customer->get_last_name();
$display_name = $customer->get_display_name();
// Customer billing information details (from account)
$billing_first_name = $customer->get_billing_first_name();
$billing_last_name = $customer->get_billing_last_name();
$billing_company = $customer->get_billing_company();
$billing_address_1 = $customer->get_billing_address_1();
$billing_address_2 = $customer->get_billing_address_2();
$billing_city = $customer->get_billing_city();
$billing_state = $customer->get_billing_state();
$billing_postcode = $customer->get_billing_postcode();
$billing_country = $customer->get_billing_country();
// Customer shipping information details (from account)
$shipping_first_name = $customer->get_shipping_first_name();
$shipping_last_name = $customer->get_shipping_last_name();
$shipping_company = $customer->get_shipping_company();
$shipping_address_1 = $customer->get_shipping_address_1();
$shipping_address_2 = $customer->get_shipping_address_2();
$shipping_city = $customer->get_shipping_city();
$shipping_state = $customer->get_shipping_state();
$shipping_postcode = $customer->get_shipping_postcode();
$shipping_country = $customer->get_shipping_country();
_
2)_WP_User
_オブジェクト(Wordpress):
_// Get the user ID from an Order ID
$user_id = get_post_meta( $order_id, '_customer_user', true );
// Get the WP_User instance Object
$user = new WP_User( $user_id );
$username = $user->username; // Get username
$user_email = $user->email; // Get account email
$first_name = $user->first_name;
$last_name = $user->last_name;
$display_name = $user->display_name;
// Customer billing information details (from account)
$billing_first_name = $user->billing_first_name;
$billing_last_name = $user->billing_last_name;
$billing_company = $user->billing_company;
$billing_address_1 = $user->billing_address_1;
$billing_address_2 = $user->billing_address_2;
$billing_city = $user->billing_city;
$billing_state = $user->billing_state;
$billing_postcode = $user->billing_postcode;
$billing_country = $user->billing_country;
// Customer shipping information details (from account)
$shipping_first_name = $user->shipping_first_name;
$shipping_last_name = $user->shipping_last_name;
$shipping_company = $user->shipping_company;
$shipping_address_1 = $user->shipping_address_1;
$shipping_address_2 = $user->shipping_address_2;
$shipping_city = $user->shipping_city;
$shipping_state = $user->shipping_state;
$shipping_postcode = $user->shipping_postcode;
$shipping_country = $user->shipping_country;
_
ここに LoicTheAztecの答え にこの情報を取得する方法が示されています。
Woocommerce v3.0 +のみ
基本的に、あなたは呼び出すことができます
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
これにより、請求および出荷プロパティを含む配列が請求注文データに返されます。 var_dump-ingで調べてください。以下に例を示します。
$order_billing_data = array(
"first_name" => $order_data['billing']['first_name'],
"last_name" => $order_data['billing']['last_name'],
"company" => $order_data['billing']['company'],
"address_1" => $order_data['billing']['address_1'],
"address_2" => $order_data['billing']['address_2'],
"city" => $order_data['billing']['city'],
"state" => $order_data['billing']['state'],
"postcode" => $order_data['billing']['postcode'],
"country" => $order_data['billing']['country'],
"email" => $order_data['billing']['email'],
"phone" => $order_data['billing']['phone'],
);
ご挨拶。
データベースから顧客の詳細を取得する別の例:
$order = new WC_Order( $order_id );
$order_detail['status'] = $order->get_status();
$order_detail['customer_first_name'] = get_post_meta( $order_id, '_billing_first_name', true );
$order_detail['customer_last_name'] = get_post_meta( $order_id, '_billing_last_name', true );
$order_detail['customer_email'] = get_post_meta( $order_id, '_billing_email', true );
$order_detail['customer_company'] = get_post_meta( $order_id, '_billing_company', true );
$order_detail['customer_address'] = get_post_meta( $order_id, '_billing_address_1', true );
$order_detail['customer_city'] = get_post_meta( $order_id, '_billing_city', true );
$order_detail['customer_state'] = get_post_meta( $order_id, '_billing_state', true );
$order_detail['customer_postcode'] = get_post_meta( $order_id, '_billing_postcode', true );
注文オブジェクトから顧客IDを取得
$order = new WC_Order($order_id);
// here the customer data
$customer = get_userdata($order->customer_user);
echo $customer->display_name;
これは古い質問です。私はここで素晴らしい答えを見つけられませんでしたが、何とかそれを理解することができました。
$order_meta = get_post_meta( $order_id );
$email = $order_meta["_shipping_email"][0] ?: $order_meta["_billing_email"][0];
配送メールがメタデータの一部であるかどうかは確かに知っていますが、そうであれば、少なくとも私の目的のために、請求メールよりもそれを持ちたいと思います。