Налаштування WooCommerce для інтернет-магазину на WordPress
WooCommerce — найпоширеніший плагін е-commerce для WordPress. З коробки він дає каталог, кошик, checkout, управління замовленнями та базову аналітику. Але "з коробки" — це заготовка, а не магазин. Реальний магазин вимагає налаштування платіжних шлюзів, служб доставки, податків, сповіщень та інтерфейсу. Базова налаштування WooCommerce під російський ринок займає 2–4 робочі дні.
Встановлення та первинна конфігурація
wp plugin install woocommerce --activate
wp wc tool run install_pages --user=1 # створює сторінки shop/cart/checkout/account
Через WP CLI налаштуйте основні параметри одразу:
wp option update woocommerce_default_country "RU"
wp option update woocommerce_currency "RUB"
wp option update woocommerce_currency_pos "right_space"
wp option update woocommerce_price_thousand_sep " "
wp option update woocommerce_price_decimal_sep ","
wp option update woocommerce_price_num_decimals "0"
wp option update woocommerce_calc_taxes "yes"
wp option update woocommerce_enable_guest_checkout "yes"
wp option update woocommerce_enable_checkout_login_reminder "yes"
Податкові ставки для Росії
// Додавання податкових ставок програмно
$tax_rates = [
[
'country' => 'RU',
'rate' => '20.0000',
'name' => 'НДС 20%',
'priority' => 1,
'compound' => false,
'shipping' => true,
'class' => '', // стандартна ставка
],
[
'country' => 'RU',
'rate' => '10.0000',
'name' => 'НДС 10%',
'priority' => 1,
'compound' => false,
'shipping' => false,
'class' => 'reduced-rate',
],
];
foreach ($tax_rates as $rate) {
WC_Tax::_insert_tax_rate($rate);
}
Налаштування методів доставки
WooCommerce оперує зонами доставки. Кожна зона може мати кілька методів:
// Створення зони для Росії
$zone = new WC_Shipping_Zone();
$zone->set_zone_name('Росія');
$zone->add_location('RU', 'country');
$zone_id = $zone->save();
// Додавання методу — фіксована вартість
$instance_id = $zone->add_shipping_method('flat_rate');
$zone->save();
// Налаштування методу через option
update_option("woocommerce_flat_rate_{$instance_id}_settings", [
'enabled' => 'yes',
'title' => 'Доставка по Росії',
'cost' => '350',
'free_min_amount' => '5000', // безплатно від 5000 руб.
]);
Користувальницькі поля на checkout
Для російського ринку часто потрібні додаткові поля: по батькові, ІНН для юрлиць, коментар до замовлення:
add_filter('woocommerce_checkout_fields', function (array $fields): array {
// Додаємо по батькові
$fields['billing']['billing_patronymic'] = [
'label' => 'По батькові',
'placeholder' => 'Іванівна',
'required' => false,
'class' => ['form-row-last'],
'priority' => 25,
];
// ІНН для юрлиць (показуємо через JS при виборі типу плательщика)
$fields['billing']['billing_inn'] = [
'label' => 'ІНН',
'required' => false,
'class' => ['form-row-wide', 'legal-field'],
'priority' => 90,
];
return $fields;
});
// Зберігаємо користувальницькі поля в мета замовлення
add_action('woocommerce_checkout_update_order_meta', function (int $order_id): void {
if (!empty($_POST['billing_patronymic'])) {
update_post_meta($order_id, '_billing_patronymic', sanitize_text_field($_POST['billing_patronymic']));
}
if (!empty($_POST['billing_inn'])) {
update_post_meta($order_id, '_billing_inn', sanitize_text_field($_POST['billing_inn']));
}
});
Підключення платіжних шлюзів
Для російського ринку типові варіанти: ЮKassa (бувший Яндекс.Касса), Сбербанк Acquiring, Тінькофф, Robokassa. Більшість мають готові плагіни; якщо нема — реалізуємо через WC_Payment_Gateway:
class WC_My_Gateway extends WC_Payment_Gateway {
public function __construct() {
$this->id = 'my_gateway';
$this->method_title = 'Мій шлюз';
$this->has_fields = false;
$this->supports = ['products', 'refunds'];
$this->init_form_fields();
$this->init_settings();
$this->title = $this->get_option('title');
$this->api_key = $this->get_option('api_key');
$this->secret_key = $this->get_option('secret_key');
add_action('woocommerce_api_my_gateway_callback', [$this, 'process_callback']);
add_action('woocommerce_update_options_payment_gateways_' . $this->id, [$this, 'process_admin_options']);
}
public function process_payment(int $order_id): array {
$order = wc_get_order($order_id);
$amount = (int) ($order->get_total() * 100); // копійки
$response = wp_remote_post('https://api.gateway.ru/create', [
'body' => json_encode([
'amount' => $amount,
'currency' => 'RUB',
'order_id' => $order_id,
'return_url' => $this->get_return_url($order),
'callback_url'=> home_url('/wc-api/my_gateway_callback'),
'description' => 'Замовлення №' . $order->get_order_number(),
]),
'headers' => [
'Authorization' => 'Bearer ' . $this->api_key,
'Content-Type' => 'application/json',
],
]);
$data = json_decode(wp_remote_retrieve_body($response), true);
if (empty($data['payment_url'])) {
wc_add_notice('Помилка ініціалізації платежу. Спробуйте пізніше.', 'error');
return ['result' => 'fail'];
}
$order->update_status('pending', 'Очікування оплати через шлюз');
return [
'result' => 'success',
'redirect' => $data['payment_url'],
];
}
public function process_callback(): void {
$body = file_get_contents('php://input');
$payload = json_decode($body, true);
// Верифікація підпису
$sign = hash_hmac('sha256', $payload['order_id'] . $payload['status'], $this->secret_key);
if (!hash_equals($sign, $payload['signature'])) {
status_header(403);
exit('Невірна підпис');
}
$order = wc_get_order(absint($payload['order_id']));
if (!$order) exit('Замовлення не знайдено');
if ($payload['status'] === 'paid') {
$order->payment_complete($payload['payment_id']);
$order->add_order_note('Оплата підтверджена. ID платежу: ' . $payload['payment_id']);
} elseif ($payload['status'] === 'failed') {
$order->update_status('failed', 'Платіж відхилений шлюзом');
}
status_header(200);
exit('OK');
}
}
add_filter('woocommerce_payment_gateways', function (array $gateways): array {
$gateways[] = 'WC_My_Gateway';
return $gateways;
});
Email-сповіщення
WooCommerce відправляє листи при зміні статусу замовлення. Кастомізація шаблонів: копіюємо з woocommerce/templates/emails/ в your-theme/woocommerce/emails/ і правимо.
Для додавання користувальницького сповіщення менеджеру:
add_action('woocommerce_order_status_processing', function (int $order_id): void {
$order = wc_get_order($order_id);
$manager = get_option('admin_email');
wp_mail(
$manager,
'Нове оплачене замовлення №' . $order->get_order_number(),
sprintf(
"Клієнт: %s\nСума: %s\nТовари: %d позицій\nАдреса: %s",
$order->get_formatted_billing_full_name(),
wc_price($order->get_total()),
$order->get_item_count(),
$order->get_formatted_billing_address()
)
);
});
Типові терміни: налаштування WooCommerce "під ключ" з одним платіжним шлюзом, налаштуванням доставки та email-шаблонами — 2–3 дні. З кількома шлюзами, користувальницькими полями checkout та інтеграцією з 1С/складом — 5–8 днів.







