Intereting Posts
Как загрузить phpseclib в codeigniter доступ запрещен PHP с платформы Blackberry 10 с помощью phonegap – закрыт PHP как ограничить строки в строке? Получение ошибки mysqli :: real_connect (): (HY000 / 2002): нет такого файла или каталога, когда я пытаюсь получить доступ к моему проекту на реальном сервере PHP $ _POST и только идентификатор, нет имени Могу ли я получить текущую информацию о маршруте в промежуточном программном обеспечении с помощью Lumen? Соглашения об именах PHP? CakePHP: пользовательская отчетность об ошибках в командах консоли is_uploaded_file () Задает файл изображения, когда он .bmp, почему? Получите идентификатор определенного URL-адреса внутри сообщения и сохраните его в переменной PHP-решения для «кэширования страниц» для приложений CMS Как удалить папку с содержимым с помощью PHP Zend Framework 2 – подключение к базе данных php: загрузить содержимое переменной как файл symfony: не можем ли мы иметь скрытое поле объекта?

Как получить информацию о клиенте из заказа в 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(); на $data['Address'] = $customer->get_address() . ' ' . $customer->get_address_2(); $data['ZipCode'] = $customer->get_postcode(); 

Пусто.

дела

 var_dump($customer) 

Производит:

объект (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) ["calculate_shipping "] => bool (false)}? ["_changed": "WC_Customer": private] => bool (false)}

Как вы можете видеть, город присутствует, но остальные пусты. Я проверил в WP_usermeta и в панели администратора клиента, и все данные есть.

Есть предположения?

Попробовав $customer = new WC_Customer(); и global $woocommerce; $customer = $woocommerce->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 будет получать информацию о клиенте только при WC_Customer пользователя в систему, и он / она не находится на стороне администратора, вместо этого он должен находиться на интерфейсе веб-сайта, например «Моя учетная запись», «Магазин», «Корзина», Оформить заказ

Надеюсь, что эта информация будет полезна.

Хотя это, возможно, нецелесообразно

Если вы хотите получить информацию о клиенте. Даже если пользователь не создает учетную запись, но делает только заказ. Вы можете просто запросить его непосредственно из базы данных.

Хотя, возможно, проблемы с производительностью, запросы напрямую, но это, безусловно, работает на 100%

Вы можете выполнять поиск по сообщениям и

  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 } 

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>"); 

Это происходит из-за того, что абзац WC_Customer не хранит данные удержания (среди других данных) отдельно от сеанса. Эти данные хранятся через страницы корзины / проверки, но снова – только в сеансе (насколько это касается класса WC_Customer).

Если вы посмотрите, как страница проверки получает данные клиента, вы будете следовать ей в методе класса get_value , который вытаскивает его непосредственно из пользовательской мета . Вам следовало бы следовать той же схеме 🙂

 $customer_id = get_current_user_id(); print get_user_meta( $customer_id, 'billing_first_name', true ); 

Я смотрел что-то вроде этого. Это работает хорошо. Так что получите мобильный номер в плагине 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'or' _first_name '. Вы можете использовать другие поля, но не забывайте «_» в начале.

Если вы хотите получить клиента для этого заказа и получить его поле напрямую, оно будет работать так же, как в вашем решении, за исключением того, что вам не нужно извлекать полный объект клиента:

 $customer_id = (int)$order->user_id; $field= get_user_meta($customer_id, $field_name,true) 

; Теперь в этом случае $ field_name не начинается с «_» Например: «first_name» и «billing_address_1»

Может быть, посмотрите на класс заказа Woocomerce ? Например, чтобы получить адрес электронной почты клиента:

 $order = new WC_Order($order_id); echo $order->get_billing_email(); 

Просто мысль…

И еще один пример, чтобы получить детали клиентов из базы данных:

 $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 ); 

получить идентификатор клиента из объекта заказа

 $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]; 

Я знаю, что знаю, что отправка электронной почты является частью метаданных, но если это так, я бы предпочел бы ее, чем платежный адрес электронной почты – по крайней мере, для моих целей.