php - obtener - tags wordpress codex
¿Cómo obtener detalles del cliente de Order in WooCommerce? (12)
Si desea los detalles del cliente que el cliente ingresó al hacer el pedido, puede usar el siguiente código
$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
Además de esto, $customer = new WC_Customer( $order_id );
no puede obtener detalles del cliente
Antes que nada, el new WC_Customer()
no toma ningún argumento
En segundo lugar, WC_Customer
obtendrá los detalles del cliente solo cuando el usuario haya iniciado sesión y no esté en el lado de administrador, sino que debería estar en el front-end del sitio web como ''Mi cuenta'', ''Comprar'', ''Carrito'', '' Pagar página
Espero que esta información sea útil.
Tengo una función que hace esto:
$order = new WC_Order($order_id);
$customer = new WC_Customer( $order_id );
¿Cómo puedo obtener detalles del cliente a partir de esto ?. He intentado todo en los documentos, pero de alguna manera, solo algunos detalles están presentes, pero el resto no, por ejemplo
$data[''Address''] = $customer->get_address() . '' '' . $customer->get_address_2();
$data[''ZipCode''] = $customer->get_postcode();
Esta vacio.
Obra
var_dump($customer)
Produce:
objeto (WC_Customer) # 654 (2) {["_data": protected] => array (14) {["country"] => string (2) "IT"> ["state"] => string (0) "" ["código postal"] => cadena (0) "" ["ciudad"] => cadena (0) "" ["dirección"] =>> cadena (0) "" ["address_2"] => cadena (0) "" ["shipping_country"] => cadena (2) "IT" ["shipping_state"] => cadena (2) "BG" ["shipping_postcode"] => cadena (0) "" ["shipping_city" ] =>> cadena (0) "" ["shipping_address"] => cadena (0) "" ["shipping_address_2"] => cadena (0) "" ["is_vat_exempt"] => bool (false) ["calculate_shipping "] => bool (falso)}? ["_changed": "WC_Customer": privado] => bool (falso)}
Como puede ver, la ciudad está Presente pero el resto está vacío. He registrado en WP_usermeta y en el panel de administración del cliente y todos los datos están allí.
¿Alguna idea?
Esto está sucediendo porque el resumen de WC_Customer no contiene datos de dirección de retención (entre otros datos) aparte de dentro de una sesión. Estos datos se almacenan a través de las páginas de carrito de compras / pago, pero de nuevo, solo en la sesión (en lo que respecta a la clase WC_Customer).
Si observa cómo la página de pago obtiene los datos del cliente, lo seguirá al método get_value
clase get_value
, que lo saca directamente de la meta del usuario . Harías bien en seguir el mismo patrón :-)
$customer_id = get_current_user_id();
print get_user_meta( $customer_id, ''billing_first_name'', true );
obtener la identificación del cliente del objeto pedido
$order = new WC_Order($order_id);
// here the customer data
$customer = get_userdata($order->customer_user);
echo $customer->display_name;
Estaba buscando algo como esto. Funciona bien. Así que obtenga el número de teléfono móvil en el complemento woocommerce como este -
$customer_id = get_current_user_id();
print get_user_meta( $customer_id, ''billing_phone'', true );
Habiendo probado $customer = new WC_Customer();
y global $woocommerce; $customer = $woocommerce->customer;
global $woocommerce; $customer = $woocommerce->customer;
Todavía estaba obteniendo datos de dirección vacíos, incluso cuando inicié sesión como un usuario que no es administrador.
Mi solución fue la siguiente:
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;
}
... y este código funciona independientemente de si has iniciado sesión como administrador o no.
Aunque, esto puede no ser aconsejable
Si desea obtener detalles del cliente. Incluso cuando el Usuario no crea una cuenta, solo hace un Pedido. Puede consultarlo directamente desde la base de datos.
Aunque puede haber problemas de rendimiento, consultar directamente, pero esto seguramente funciona al 100%
Puede buscar por post_id
y 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
}
Los "pedidos" de WooCommerce son simplemente un tipo de publicación personalizado, por lo que todos los pedidos se almacenan en wp_posts y su información de pedido se almacena en tablas wp_postmeta.
Si desea obtener algún detalle de "Pedido" de WooCommerce, puede utilizar el siguiente código.
$order_meta = get_post_meta($order_id);
El código anterior devuelve una matriz de información de "Pedido" de WooCommerce. Puede usar esa información como se muestra a continuación:
$shipping_first_name = $order_meta[''_shipping_first_name''][0];
Para ver todos los datos existen en la matriz "$ order_meta". Puedes usar el siguiente código:
print("<pre>");
print_r($order_meta);
print("</pre>");
Un poco tarde, pero acabo de lidiar con esto y encontré esta publicación. Dependiendo de lo que realmente desee, puede obtener los detalles del pedido de esta manera:
$field = get_post_meta( $order->id, $field_name, true );
Donde $ field_name es ''_billing_address_1'' o ''_shipping_address_1''or'' _first_name ''. Puede googlear los otros campos, pero no olvide el "_" al principio.
Si desea recuperar al cliente para este pedido y obtener su campo directamente, funciona como en su solución, excepto que no necesita recuperar el objeto completo del cliente:
$customer_id = (int)$order->user_id;
$field= get_user_meta($customer_id, $field_name,true)
; Ahora, en este caso, $ field_name no comienza con "_" Por ejemplo: ''first_name'' y ''billing_address_1''
¿Tal vez mirar la clase de Orden Woocomerce ? Por ejemplo, para obtener la dirección de correo electrónico del cliente:
$order = new WC_Order($order_id);
echo $order->get_billing_email();
Solo un pensamiento...
Esta es una vieja pregunta, y no encontré una gran respuesta aquí, pero me las arreglé para resolverlo.
$order_meta = get_post_meta( $order_id );
$email = $order_meta["_shipping_email"][0] ?: $order_meta["_billing_email"][0];
Sé con certeza si el envío de correo electrónico es parte de los metadatos, pero si es así, preferiría tenerlo que el correo electrónico de facturación, al menos para mis propósitos.
Y otro ejemplo para obtener detalles del cliente de la base de datos:
$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 );