RTFM.WIKI

Ordnung muß sein. Ordnung über alles (18+)

Инструменты пользователя

Инструменты сайта


Stylesheet conf/userstyle.css not found, please contact the developer of "dokuwiki_2024" template.
web:wordpress:woocommerce

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
web:wordpress:woocommerce [2024/05/02 19:51] – создано dxweb:wordpress:woocommerce [2024/05/24 20:34] (текущий) dx
Строка 1: Строка 1:
 +====== Woocommerce разное ======
  
 +==== Удалить Woocommerce ====
 +
 +Добавить в файл ''wp-config.php''
 +
 +<code php>
 +define( 'WC_REMOVE_ALL_DATA', true );
 +</code>
 +
 +Деактивировать плагин, удалить плагин, все таблицы WC будут удалены.
 +
 +Источник: [[https://woocommerce.com/document/installing-uninstalling-woocommerce/#uninstalling-woocommerce|Installing and Uninstalling WooCommerce]]
 +
 +==== Получить значения полей на странице checkout ====
 +
 +Дополнительные поля созданы через [[https://wordpress.org/plugins/woo-checkout-field-editor-pro/|Checkout Field Editor for WooCommerce]]
 +
 +[[https://www.themehigh.com/docs/checkout-field-editor-frequently-asked-questions/|FAQ Themehigh]]
 +
 +В Woocommerce заказ это пост. Получить метаданные можно с помощью get_post_meta(). Данные хранятся в таблице **wp_postmeta**
 +
 +<code php>$order_meta = get_post_meta( $order_id, $field_name, true );</code>
 +
 +Чтобы получить метаданные пользователя/клиента используем get_user_meta. Данные хранятся в таблице **wp_usermeta**.
 +
 +<code php>$user_meta = get_user_meta( $user_id, $field_name, true );</code>
 +
 +Например чтобы получить поле ИНН (поле работает через [[https://dadata.ru/|сервис DaData]])
 +
 +<code php>
 +$order = wc_get_order($order_id);
 +$user_id = $order->get_user_id();
 +$billing_inn = get_user_meta($user_id, 'billing_inn', true);
 +</code>
 +
 +==== Product Addons for Woocommerce ====
 +
 +Плагин
 +  * https://wordpress.org/plugins/woo-custom-product-addons/ (free)
 +  * https://acowebs.com/woo-custom-product-addons/ (pro)
 +
 +Задача - получить значение поля из заказа.
 +
 +Данные из product addon можно получить через **field label**, **field id** и **field name**.
 +
 +Через **field label**
 +
 +<code php>
 +$item->get_meta('Field Label');
 +</code>
 +
 +Пример
 +
 +<code>
 +foreach ($order->get_items() as $item_id => $item ) {
 +    $field_cpu = wc_get_order_item_meta( $item_id, 'Процессор', true);
 +    $field_ram = wc_get_order_item_meta( $item_id, 'Память', true);
 +}
 +</code>
 +
 +Через **field id** или **field name** (_WCPA_order_meta_data)
 +
 +Пример [[https://wordpress.org/support/topic/how-to-retrieve-a-text-field-value-from-order/|1]], [[https://wordpress.org/support/topic/access-fields-with-wc-order-object/|2]]
 +
 +<hidden Пример 1>
 +<code php>
 +add_action('woocommerce_checkout_order_processed', 'get_wcpa_data');
 +function get_wcpa_data($order_id)
 +{
 +    $order = wc_get_order($order_id);
 +    foreach ($order->get_items() as $item_id => $item) {
 +        $orderData = $item->get_meta('_WCPA_order_meta_data');
 +        if (is_array($orderData)) {
 +            foreach ($orderData as $sectionKey => $section) {
 +                if (isset($section['fields']) && is_array($section['fields'])) {
 +                    foreach ($section['fields'] as $row) {
 +                        foreach ($row as $field) {
 +                           if($field['name']=='Field Name Here'){ // change the field name
 +                               $requiredText = $field['value']; // you can get teh required data here
 +                           }
 +                        }
 +                    }
 +                }
 +            }
 +        }
 +    }
 +}
 +</code>
 +</hidden>
 +
 +<hidden Пример 2>
 +<code php>
 +$orderData = $item->get_meta('_WCPA_order_meta_data');
 +        if (is_array($orderData)) {
 +            foreach ($orderData as $sectionKey => $section) {
 +                if (isset($section['fields']) && is_array($section['fields'])) {
 +                    foreach ($section['fields'] as $row) {
 +                        foreach ($row as $field) {
 +                            if ($field['name'] == 'Field Name here') {
 +                                $requiredText = $field['value']; // you can get  required data here
 +                            }
 +                        }
 +                    }
 +                }
 +            }
 +        }
 +</code>
 +</hidden>
 +
 +См. также
 +  * [[https://grietjegoedkoop.nl/websitestuff/woocommerce-ordered-items-data/|Woocommerce ordered items data]]
 +  * [[https://stackoverflow.com/questions/39401393/how-to-get-woocommerce-order-details|How to get WooCommerce order details]]
 +
 +==== Записать данные заказа в локальный текстовый файл ====
 +
 +<code php>
 +$order = wc_get_order($order_id);
 +$user_id = $order->get_user_id();
 +
 +foreach ( $order->get_items() as $item ) {
 +    $quantity = $item->get_quantity();
 +    // что-то ещё
 +}
 +
 +$postDataArray = [  
 +    "billing_first_name"   => $order->get_billing_first_name(),
 +    "billing_last_name"    => $order->get_billing_last_name(),
 +    "billing_postcode"     => $order->get_billing_postcode(),
 +    "quantity"             => "$quantity"
 +];
 +
 +$file_path = 'textfile.txt';
 +$file_handle = fopen($file_path, 'a+');
 +if ($file_handle) {
 +fwrite($file_handle, print_r($postDataArray, true) . "\n");
 +fclose($file_handle);
 +</code>
 +
 +==== Выполнить POST запрос при успешном платеже ====
 +
 +<code php>
 +add_action( 'woocommerce_payment_complete', 'make_curl_post_request_after_payment' );
 +function make_curl_post_request_after_payment($order_id) {
 +
 +$order = wc_get_order($order_id);
 +$user_id = $order->get_user_id();
 +
 +$postDataArray = [  
 +    "billing_first_name"   => $order->get_billing_first_name(),
 +    "billing_last_name"    => $order->get_billing_last_name(),
 +    "billing_postcode"     => $order->get_billing_postcode(),
 +    "quantity"             => "$quantity"
 +];
 +
 +$data = http_build_query($postDataArray);
 +$url = 'http://API_URL';  
 +
 +$cURL = curl_init();
 +curl_setopt($cURL, CURLOPT_URL,$url);
 +curl_setopt($cURL, CURLOPT_POSTFIELDS, $data);
 +curl_setopt($cURL, CURLOPT_HEADER,false);
 +curl_setopt($cURL, CURLOPT_RETURNTRANSFER,true);
 +curl_setopt($cURL, CURLOPT_POST, true);
 +curl_setopt($cURL, CURLOPT_SSL_VERIFYPEER, false);
 +curl_setopt($cURL, CURLOPT_CONNECTTIMEOUT,10);
 +
 +$response = curl_exec($cURL);
 +curl_close($cURL);
 +echo $response;
 +
 +$order->update_status('completed');
 +
 +}
 +</code>
 +
 +==== Ширина кнопки купить/в корзину ====
 +
 +Если у товара нет выбора количества, то кнопка "купить" ("в корзину") меняет своё расположение.
 +
 +Чтобы установить ширину кнопку на всю ширину для form.cart
 +
 +<code css>
 +.single_add_to_cart_button{
 +width: 100%;
 +}
 +</code>
 +
 +или
 +
 +<code css>
 +.single_add_to_cart_button.button.alt {
 +    display: block;
 +    width: 100%;
 +}
 +</code>
 +
 +{{tag>wordpress woocommerce cms}}