WooCommerce является одним из самых популярных плагинов для организации интернет-магазина на WordPress. Часто при разработке крупных проектов требуется автоматизировать процесс установки и первичной настройки WooCommerce, чтобы избежать ручных действий и ускорить развертывание.
Зачем нужна автоматизация установки WooCommerce через код
Если вы создаёте несколько сайтов с интернет-магазинами, либо хотите включить WooCommerce как часть более сложной кастомной системы, то ручная установка и настройка займёт много времени. Автоматизация позволяет:
- Сэкономить время на развертывание новых проектов.
- Гарантировать одинаковую базовую конфигурацию для всех сайтов.
- Легко интегрировать WooCommerce в свои кастомные решения.
К тому же, вы можете программно включать нужные опции WooCommerce, создавать страницы магазина, настраивать валюту, методы оплаты и доставки без захода в админку.
Автоматическая установка WooCommerce через wporder_activate_woocommerce()
Для начала нужно убедиться, что плагин WooCommerce установлен, и если нет — установить и активировать его программно. Вот пример функции для этого:
function wporder_activate_woocommerce() {
include_once ABSPATH . 'wp-admin/includes/plugin.php';
if (!is_plugin_active('woocommerce/woocommerce.php')) {
if (!file_exists(WP_PLUGIN_DIR . '/woocommerce')) {
// Автоматическая установка плагина через WP CLI или API требует серверных прав
// Рекомендуется ставить вручную или через WP CLI
return new WP_Error('woocommerce_not_installed', 'Плагин WooCommerce не установлен. Установите вручную или через WP CLI.');
}
activate_plugin('woocommerce/woocommerce.php');
}
}Обратите внимание: WordPress не позволяет штатно устанавливать плагины из админки через код без использования WP CLI или внешних сервисов. Поэтому советуем ставить WooCommerce вручную или через WP CLI, а ниже — делать автоматическую настройку.
Автоматическая базовая настройка WooCommerce через код
После активации WooCommerce можно программно выставить основные параметры магазина. Например, задать валюту, страну, методы оплаты и доставки.
Настройка основных опций WooCommerce
Ниже пример функции, которую можно запускать при активации вашей темы или плагина:
function wporder_setup_woocommerce_options() {
if (!class_exists('WooCommerce')) {
return;
}
// Валюта
update_option('woocommerce_currency', 'RUB');
// Страна
update_option('woocommerce_default_country', 'RU');
// Формат цены
update_option('woocommerce_price_num_decimals', '2');
update_option('woocommerce_price_thousand_sep', ' ');
update_option('woocommerce_price_decimal_sep', ',');
// Включить налог
update_option('woocommerce_calc_taxes', 'yes');
// Методы оплаты (по умолчанию включим только оплату при доставке)
update_option('woocommerce_cod_settings', array(
'enabled' => 'yes',
'title' => 'Оплата при доставке',
'description' => 'Оплата наличными при получении заказа',
));
// Отключить остальные методы оплаты
update_option('woocommerce_paypal_settings', array('enabled' => 'no'));
update_option('woocommerce_stripe_settings', array('enabled' => 'no'));
// Методы доставки (например, бесплатная доставка)
update_option('woocommerce_free_shipping_settings', array(
'enabled' => 'yes',
'title' => 'Бесплатная доставка',
'min_amount' => 1000,
));
}Создание страниц магазина и корзины автоматически
WooCommerce требует наличия определённых страниц — Магазин, Корзина, Оформление заказа, Личный кабинет. Обычно плагин создаёт их сам при активации, но если нужно, можно создать или проверить их программно:
function wporder_create_woocommerce_pages() {
$pages = array(
'shop' => 'Магазин',
'cart' => 'Корзина',
'checkout' => 'Оформление заказа',
'myaccount' => 'Личный кабинет',
);
foreach ($pages as $slug => $title) {
$page = get_page_by_path($slug);
if (!$page) {
$page_id = wp_insert_post(array(
'post_title' => $title,
'post_name' => $slug,
'post_status' => 'publish',
'post_type' => 'page',
));
// Установить нужный шорткод для страницы
if ($slug === 'shop') {
update_post_meta($page_id, '_wp_page_template', '');
} elseif ($slug === 'cart') {
wp_update_post(array(
'ID' => $page_id,
'post_content' => '[woocommerce_cart]',
));
} elseif ($slug === 'checkout') {
wp_update_post(array(
'ID' => $page_id,
'post_content' => '[woocommerce_checkout]',
));
} elseif ($slug === 'myaccount') {
wp_update_post(array(
'ID' => $page_id,
'post_content' => '[woocommerce_my_account]',
));
}
}
}
// Обновить опции WooCommerce для привязки страниц
update_option('woocommerce_shop_page_id', get_page_by_path('shop')->ID);
update_option('woocommerce_cart_page_id', get_page_by_path('cart')->ID);
update_option('woocommerce_checkout_page_id', get_page_by_path('checkout')->ID);
update_option('woocommerce_myaccount_page_id', get_page_by_path('myaccount')->ID);
}Расширение автоматизации: создание кастомных методов доставки и оплаты
Для уникальных проектов часто требуется добавить свои методы доставки или оплаты. WooCommerce позволяет создавать собственные классы с реализацией.
Пример кастомного метода доставки
Ниже пример простого метода доставки, который добавляет фиксированную стоимость 200 рублей:
add_action('woocommerce_shipping_init', function() {
class WC_Shipping_Wporder_Fixed extends WC_Shipping_Method {
public function __construct() {
$this->id = 'wporder_fixed';
$this->method_title = __('Фиксированная доставка', 'wporder');
$this->enabled = 'yes';
$this->title = 'Фиксированная доставка';
$this->init();
}
function init() {
$this->availability = 'including';
$this->countries = array('RU');
}
public function calculate_shipping($package = array()) {
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => '200',
'calc_tax' => 'per_order'
);
$this->add_rate($rate);
}
}
});
add_filter('woocommerce_shipping_methods', function($methods) {
$methods['wporder_fixed'] = 'WC_Shipping_Wporder_Fixed';
return $methods;
});Такой метод можно включить в настройках доставки, и он будет отображаться для выбора покупателем.
Пример кастомного метода оплаты
Создадим простой метод оплаты "Оплата по квитанции":
add_action('plugins_loaded', function() {
class WC_Gateway_Wporder_Invoice extends WC_Payment_Gateway {
public function __construct() {
$this->id = 'wporder_invoice';
$this->method_title = __('Оплата по квитанции', 'wporder');
$this->has_fields = false;
$this->init_form_fields();
$this->init_settings();
$this->title = $this->get_option('title');
add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options'));
}
public function init_form_fields() {
$this->form_fields = array(
'enabled' => array(
'title' => __('Включить/Отключить', 'wporder'),
'type' => 'checkbox',
'label' => __('Включить оплату по квитанции', 'wporder'),
'default' => 'yes'
),
'title' => array(
'title' => __('Название', 'wporder'),
'type' => 'text',
'description' => __('Название метода оплаты, которое увидит клиент', 'wporder'),
'default' => __('Оплата по квитанции', 'wporder'),
'desc_tip' => true,
),
);
}
public function process_payment($order_id) {
$order = wc_get_order($order_id);
$order->update_status('on-hold', __('Ожидается оплата по квитанции', 'wporder'));
WC()->cart->empty_cart();
return array(
'result' => 'success',
'redirect' => $this->get_return_url($order),
);
}
}
add_filter('woocommerce_payment_gateways', function($methods) {
$methods[] = 'WC_Gateway_Wporder_Invoice';
return $methods;
});
});Использование плагинов WPShop для расширения и автоматизации WooCommerce
Для более удобной и мощной автоматизации можно использовать плагины из WPShop.ru. Например:
- Clearfy Pro — оптимизация и ускорение WooCommerce.
- Expert Review — расширенные отзывы и рейтинги товаров.
- ABC Pagination — удобная постраничная навигация для страниц магазина.
Эти инструменты легко интегрируются и позволяют сделать магазин более удобным и эффективным.
Выводы и рекомендации
Автоматизация установки и базовой настройки WooCommerce через код — удобный способ ускорить запуск проектов. При этом важно помнить, что установка плагина лучше делается вручную или через WP CLI, а уже настройку и расширения можно реализовать программно.
Используйте примеры из статьи, чтобы создавать кастомные методы оплаты и доставки, создавать страницы и устанавливать базовые опции магазина. Это обеспечит стабильную и единообразную работу WooCommerce на ваших сайтах.