WooCommerce 주문에서 고객 정보를 얻으려면 어떻게 해야 합니까?
다음과 같은 기능이 있습니다.
$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)
작성:
개체(C_고객)#654; = > = > > >0] > = > = > = > = ["_ 포스트 코드"]=> 문자열(0)["cisco_city"]=>> string(0)" "["cisco_address"]=> string(0)" "["cisco_address_2"] => string(0) "[is_cisco_false"] => bool(false) => bool(false) } ?[" :"WC_Customer":private]=> bool(false) }
보시다시피 도시는 존재하지만 나머지는 비어 있습니다.체크인을 했습니다wp_usermeta
데이터베이스 테이블과 고객의 관리자 패널에 모든 데이터가 있습니다.
2017-2020 WooCommerce 버전 3+ 및 CRUD 객체
1) 및 클래스에서 getter 메서드를 사용할 수 있습니다.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 WP_User Object instance
$user = $order->get_user();
// Get the WP_User roles and capabilities
$user_roles = $user->roles;
// 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) Class의 메서드를 사용할 수 있습니다.
// 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;
관련:WooCommerce 주문 세부 정보 가져오는 방법
고객이 주문 중에 입력한 고객 정보를 원하는 경우 다음 코드를 사용할 수 있습니다.
$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 the 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
는, 유저가 로그인하고 있고, 유저가 관리자측이 아닌 경우에만, 고객의 상세 정보를 취득합니다.대신 '내 계정', '쇼핑', '카트' 또는 '체크아웃' 페이지와 같은 웹 사이트의 프런트 엔드에 있어야 합니다.
해 본 적이 있다$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;
}
...이 코드는 admin으로 로그인 여부에 관계없이 동작합니다.
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 "Orders"는 커스텀 포스트 타입일 뿐이므로 모든 주문은 wp_posts에 저장되며 주문 정보는 wp_postmeta 테이블에 저장됩니다.
WooCommerce의 "주문"에 대한 자세한 내용은 아래 코드를 사용하십시오.
$order_meta = get_post_meta($order_id);
위 코드는 WooCommerce "Order" 정보의 배열을 반환합니다.이 정보는 다음과 같이 사용할 수 있습니다.
$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);
이는 WC_Customer Abstract에 주소 데이터(특히 데이터)가 세션 내에서 유지되지 않기 때문입니다.이 데이터는 카트/체크아웃 페이지를 통해 저장되지만 세션에서만 저장됩니다(WC_Customer 클래스까지).
체크아웃 페이지에서 고객 데이터를 가져오는 방법을 살펴보면 WC_Checkout 클래스 메서드로 이동합니다. WC_Checkout 클래스 메서드는 사용자 메타에서 직접 꺼냅니다.같은 패턴을 따르는 것이 좋습니다:-)
방금 이 일을 처리했어요.원하는 내용에 따라 주문에서 다음과 같이 상세 정보를 얻을 수 있습니다.
$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'입니다.
또한 데이터베이스에서 고객 세부 정보를 가져오는 다른 예도 있습니다.
$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);
여기 Loic Theaztec의 답변에는 이 정보를 검색하는 방법이 나와 있습니다.
WooCommerce v3.0+ 전용
기본적으로는 전화하실 수 있습니다.
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
그러면 어레이가 청구 및 배송 속성을 포함한 청구 주문 데이터로 돌아갑니다.var_dumping을 통해 탐색합니다.
다음은 예를 제시하겠습니다.
$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'],
);
주문 개체에서 고객 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];
발송 이메일이 메타데이터의 일부인지 아닌지는 확실히 알 수 있지만, 만약 그렇다면 적어도 제 목적상 청구서 이메일보다는 받고 싶습니다.
WooCommerce는 이 기능을 사용하여 고객 프로필에 청구 및 배송 주소를 표시합니다.이게 도움이 될 거야
이 기능을 사용하여 주소를 얻으려면 사용자가 로그인해야 합니다.
wc_get_account_formatted_address( 'billing' );
또는
wc_get_account_formatted_address( 'shipping' );
언급URL : https://stackoverflow.com/questions/22843504/how-can-i-get-customer-details-from-an-order-in-woocommerce
'programing' 카테고리의 다른 글
AngularJS : jQuery로 변경 시 ng-model 바인딩이 업데이트되지 않음 (0) | 2023.04.03 |
---|---|
키가 존재하는지 확인하고 Python을 사용하여 JSON 어레이를 반복합니다. (0) | 2023.04.03 |
유튜브 동영상을 웅장한 팝업창에 삽입하는 방법은? (0) | 2023.04.03 |
WordPress Plugin 옵션 기본값을 설정하려면 어떻게 해야 합니까? (0) | 2023.04.03 |
Angular.js에서 약속이 이행되었을 때 항상 코드를 실행하는 방법 (0) | 2023.04.03 |