Налаштування WooCommerce для інтернет-магазину на WordPress

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

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Налаштування WooCommerce для інтернет-магазину на WordPress
Проста
~3-5 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Налаштування 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 днів.