====== Woocommerce разное ======
==== Удалить Woocommerce ====
Добавить в файл ''wp-config.php''
define( 'WC_REMOVE_ALL_DATA', true );
Деактивировать плагин, удалить плагин, все таблицы 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**
$order_meta = get_post_meta( $order_id, $field_name, true );
Чтобы получить метаданные пользователя/клиента используем get_user_meta. Данные хранятся в таблице **wp_usermeta**.
$user_meta = get_user_meta( $user_id, $field_name, true );
Например чтобы получить поле ИНН (поле работает через [[https://dadata.ru/|сервис DaData]])
$order = wc_get_order($order_id);
$user_id = $order->get_user_id();
$billing_inn = get_user_meta($user_id, 'billing_inn', true);
==== 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**
$item->get_meta('Field Label');
Пример
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);
}
Через **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]]
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
}
}
}
}
}
}
}
}
$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
}
}
}
}
}
}
См. также
* [[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]]
==== Записать данные заказа в локальный текстовый файл ====
$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);
==== Выполнить POST запрос при успешном платеже ====
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');
}
==== Ширина кнопки купить/в корзину ====
Если у товара нет выбора количества, то кнопка "купить" ("в корзину") меняет своё расположение.
Чтобы установить ширину кнопку на всю ширину для form.cart
.single_add_to_cart_button{
width: 100%;
}
или
.single_add_to_cart_button.button.alt {
display: block;
width: 100%;
}
{{tag>wordpress woocommerce cms}}