Настройка WooCommerce для интернет-магазина на WordPress
WooCommerce — самый распространённый e-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('Invalid signature');
}
$order = wc_get_order(absint($payload['order_id']));
if (!$order) exit('Order not found');
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 дней.







