Настройка WooCommerce для интернет-магазина на WordPress

Наша компания занимается разработкой, поддержкой и обслуживанием сайтов любой сложности. От простых одностраничных сайтов до масштабных кластерных систем построенных на микро сервисах. Опыт разработчиков подтвержден сертификатами от вендоров.
Разработка и обслуживание любых видов сайтов:
Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Предлагаемые услуги
Показано 1 из 1 услугВсе 2065 услуг
Настройка WooCommerce для интернет-магазина на WordPress
Простая
~3-5 рабочих дней
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1214
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    852
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1041
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    823
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    815

Настройка 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 дней.