WooCommerce — самая популярная платформа для создания интернет-магазинов на базе WordPress. Часто возникает задача добавить уникальный функционал, которого нет в стандартных расширениях. В этой статье мы подробно разберем, как создать собственный плагин для WooCommerce с нуля, пошагово и с примерами кода. Это позволит вам гибко управлять магазином и реализовывать нестандартные решения.
Что нужно знать перед созданием плагина для WooCommerce
Перед тем как начать разработку, важно понимать базовые принципы работы WooCommerce и WordPress:
- WooCommerce использует хуки (actions и filters) для расширения функционала.
- Плагины должны быть совместимы с ядром WordPress и WooCommerce, чтобы избежать конфликтов.
- Используйте префиксы в названиях функций и классов, чтобы избежать коллизий с другими плагинами.
Для примеров в статье мы будем использовать префикс wpbusiness_.
Создаем базовую структуру плагина для WooCommerce
Начнем с создания папки и основного файла плагина в директории wp-content/plugins/. Назовем папку wpbusiness-woocommerce-extension, а файл — wpbusiness-woocommerce-extension.php.
<?php
/**
* Plugin Name: WPBusiness WooCommerce Extension
* Description: Пример собственного плагина для WooCommerce
* Version: 1.0
* Author: WPBusiness
*/
// Защита от прямого доступа
if ( ! defined('ABSPATH') ) {
exit;
}
// Проверяем активен ли WooCommerce
function wpbusiness_check_woocommerce_active() {
if ( ! class_exists( 'WooCommerce' ) ) {
add_action('admin_notices', 'wpbusiness_woocommerce_missing_notice');
return false;
}
return true;
}
function wpbusiness_woocommerce_missing_notice() {
echo '<div class="error"><p>Плагин WPBusiness WooCommerce Extension требует активный WooCommerce.</p></div>';
}
if ( ! wpbusiness_check_woocommerce_active() ) {
return;
}
// Основной код плагина будет здесь
Этот шаблон проверяет, активен ли WooCommerce, и предотвращает работу плагина при его отсутствии.
Добавляем новое поле на страницу товара
Одна из частых задач — добавить дополнительное поле на страницу редактирования товара в админке. Например, поле с информацией о гарантии.
Используем хуки WooCommerce для добавления и сохранения поля.
Добавление поля
add_action( 'woocommerce_product_options_general_product_data', 'wpbusiness_add_custom_general_fields' );
function wpbusiness_add_custom_general_fields() {
woocommerce_wp_text_input( array(
'id' => '_wpbusiness_warranty',
'label' => __('Гарантия (мес.)', 'wpbusiness'),
'desc_tip' => 'true',
'description' => __('Укажите срок гарантии для товара', 'wpbusiness'),
'type' => 'number',
'custom_attributes' => array(
'min' => '0',
'step' => '1'
)
));
}
Сохранение значения поля
add_action( 'woocommerce_process_product_meta', 'wpbusiness_save_custom_general_fields' );
function wpbusiness_save_custom_general_fields( $post_id ) {
$warranty = isset( $_POST['_wpbusiness_warranty'] ) ? sanitize_text_field( $_POST['_wpbusiness_warranty'] ) : '';
update_post_meta( $post_id, '_wpbusiness_warranty', $warranty );
}
Теперь при редактировании товара появится поле для ввода срока гарантии, а данные будут сохраняться в мета-поле.
Вывод дополнительной информации на странице товара
Чтобы показать гарантию покупателям, добавим вывод этого поля на страницу товара в магазине.
add_action( 'woocommerce_single_product_summary', 'wpbusiness_display_warranty', 25 );
function wpbusiness_display_warranty() {
global $product;
$warranty = get_post_meta( $product->get_id(), '_wpbusiness_warranty', true );
if ( $warranty ) {
echo '<p class="wpbusiness-warranty">' . sprintf( esc_html__('Гарантия: %s месяцев', 'wpbusiness'), esc_html( $warranty ) ) . '</p>';
}
}
Хук woocommerce_single_product_summary позволяет добавить контент в блок с описанием товара. Параметр 25 задает приоритет вывода.
Пример расширения корзины: добавляем комиссию за обработку
Допустим, нужно добавить фиксированную комиссию при оформлении заказа. Это делается через фильтр woocommerce_cart_calculate_fees.
add_action( 'woocommerce_cart_calculate_fees', 'wpbusiness_add_processing_fee' );
function wpbusiness_add_processing_fee() {
if ( is_admin() && ! defined( 'DOING_AJAX' ) ) {
return;
}
$fee = 50; // сумма комиссии в рублях
WC()->cart->add_fee( __('Комиссия за обработку', 'wpbusiness'), $fee );
}
Этот код добавит комиссию в 50 рублей в корзину и итоговую сумму заказа.
Советы по безопасности и производительности
При создании плагина для WooCommerce важно соблюдать несколько правил:
- Используйте функции санитизации и валидации данных:
sanitize_text_field,esc_html,intvalи т.п. - Проверяйте права пользователя при сохранении настроек (например,
current_user_can('edit_products')). - Минимизируйте количество запросов к базе данных, кешируйте результаты, если нужно.
- Используйте префиксы для всех функций и классов, чтобы избежать конфликтов.
Заключение: зачем создавать собственные расширения для WooCommerce
Создание собственного плагина для WooCommerce дает полный контроль над функционалом магазина. Вы можете адаптировать магазин под конкретные задачи бизнеса, интегрировать уникальные сервисы и улучшить пользовательский опыт. Это гораздо лучше, чем искать готовые решения с лишними функциями или ограничениями.
В статье мы рассмотрели базовый пример, который можно расширять и дополнять. Начните с простого — добавления пользовательских полей и вывода их на сайте, затем переходите к более сложным функциям, работая с заказами, корзиной и API WooCommerce.