Почему стоит создавать автоматические заказы вне WooCommerce
WooCommerce — мощный инструмент для управления интернет-магазином, но иногда он избыточен, если требуется реализовать специфический функционал заказов или интеграцию с нестандартными системами. Автоматическое создание заказов непосредственно в WordPress без WooCommerce позволит гибко настраивать процесс, оптимизировать нагрузку и создавать индивидуальные решения для бизнеса.
Кроме того, отказ от WooCommerce уменьшает зависимость от большого плагина, снижает риск конфликтов и дает полный контроль над структурой данных и логикой обработки заказов.
В этой статье мы рассмотрим, как создать собственный механизм автоматического создания заказов, используя кастомные типы записей, мета-поля и хуки WordPress, а также приведём примеры полезных плагинов для упрощения работы.
Создание кастомного типа записей «Заказы»
Первый шаг — зарегистрировать собственный тип записей для заказов. Это позволит хранить данные заказов в привычной структуре WordPress, а также использовать стандартные возможности админ-панели.
Добавьте следующий код в файл functions.php вашей темы или в свой плагин:
function wporders_register_custom_post_type() {
$labels = array(
'name' => 'Заказы',
'singular_name' => 'Заказ',
'menu_name' => 'Заказы',
'name_admin_bar' => 'Заказ',
'add_new' => 'Добавить заказ',
'add_new_item' => 'Добавить новый заказ',
'new_item' => 'Новый заказ',
'edit_item' => 'Редактировать заказ',
'view_item' => 'Просмотреть заказ',
'all_items' => 'Все заказы',
'search_items' => 'Поиск заказов',
'not_found' => 'Заказы не найдены',
'not_found_in_trash' => 'Заказы не найдены в корзине',
);
$args = array(
'labels' => $labels,
'public' => false,
'show_ui' => true,
'show_in_menu' => true,
'capability_type' => 'post',
'supports' => array('title', 'editor'),
'has_archive' => false,
'menu_position' => 20,
'menu_icon' => 'dashicons-cart',
);
register_post_type('wporders_order', $args);
}
add_action('init', 'wporders_register_custom_post_type');Этот код создаст в админ-панели новый раздел «Заказы», где вы сможете просматривать и редактировать записи заказов.
Добавление пользовательских полей для хранения данных заказа
Чтобы сохранять информацию о товарах, клиентах, статусах и суммах, используйте мета-поля. Для удобства можно применить плагин Advanced Custom Fields (ACF) или создавать поля вручную через функцию add_post_meta.
Пример добавления мета-полей программно при создании заказа:
function wporders_create_order_meta($order_id, $customer_id, $items, $total_amount) {
update_post_meta($order_id, '_wporders_customer_id', $customer_id);
update_post_meta($order_id, '_wporders_items', maybe_serialize($items));
update_post_meta($order_id, '_wporders_total', $total_amount);
update_post_meta($order_id, '_wporders_status', 'new');
}Здесь $items — массив с товарами и их количеством, $customer_id — ID пользователя или данные клиента, а $total_amount — итоговая сумма заказа.
Автоматическое создание заказа через PHP
Теперь рассмотрим пример функции, которая создаёт новый заказ автоматически, например, при событии — нажатии кнопки, выполнении CRON-задачи или интеграции с внешней системой.
function wporders_create_order_automatically($customer_id, $items, $total_amount) {
$order_data = array(
'post_title' => 'Заказ от ' . date('d.m.Y H:i:s'),
'post_type' => 'wporders_order',
'post_status' => 'publish'
);
$order_id = wp_insert_post($order_data);
if (is_wp_error($order_id)) {
return false; // Ошибка создания заказа
}
wporders_create_order_meta($order_id, $customer_id, $items, $total_amount);
return $order_id;
}Вы можете вызвать эту функцию, передав нужные параметры, и заказ будет создан в системе.
Пример использования: автоматический заказ при заполнении формы
Частая задача — создавать заказ на основе данных из формы на сайте. Рассмотрим пример с плагином Contact Form 7 и хуком wpcf7_mail_sent.
add_action('wpcf7_mail_sent', 'wporders_cf7_create_order');
function wporders_cf7_create_order($contact_form) {
$submission = WPCF7_Submission::get_instance();
if (!$submission) return;
$data = $submission->get_posted_data();
// Предположим, поля: customer_name, product_id, quantity
$customer_id = 0; // Можно создать пользователя или сохранить данные отдельно
$items = array(
array(
'product_id' => intval($data['product_id']),
'quantity' => intval($data['quantity'])
)
);
$total_amount = wporders_calculate_total($items); // Ваша функция подсчёта
wporders_create_order_automatically($customer_id, $items, $total_amount);
}
function wporders_calculate_total($items) {
$total = 0;
foreach ($items as $item) {
$price = get_post_meta($item['product_id'], '_product_price', true);
$total += $price * $item['quantity'];
}
return $total;
}<Таким образом, при отправке формы будет создан заказ с нужной информацией.
Управление статусами заказов и уведомления
Для полноценной работы требуется реализовать статусы заказов и уведомления. Добавим мета-поле _wporders_status, значения которого могут быть: new, processing, completed, cancelled.
Для изменения статуса можно сделать функцию:
function wporders_update_order_status($order_id, $new_status) {
$allowed_statuses = array('new', 'processing', 'completed', 'cancelled');
if (!in_array($new_status, $allowed_statuses)) {
return false;
}
update_post_meta($order_id, '_wporders_status', $new_status);
wporders_send_status_notification($order_id, $new_status);
return true;
}
function wporders_send_status_notification($order_id, $status) {
$order = get_post($order_id);
$email = get_post_meta($order_id, '_wporders_customer_email', true); // email клиента
if (!$email) return;
$subject = "Статус вашего заказа изменён: " . $status;
$message = "Здравствуйте! Статус вашего заказа #" . $order_id . " изменён на " . $status . ".";
wp_mail($email, $subject, $message);
}Подключайте эту логику к административным операциям или автоматическим процессам.
Полезные плагины для расширения функционала заказов вне WooCommerce
- Advanced Custom Fields (ACF) — для удобного создания и управления мета-полями заказов.
- WP Crontrol — для управления и отладки CRON-задач, полезно при автоматическом создании заказов по расписанию.
- WP REST API Controller — если нужна интеграция внешних приложений с вашим кастомным типом заказов через REST API.
- Clearfy Pro — оптимизация и очистка WordPress для повышения производительности вашего сайта с заказами.
Используйте эти инструменты для удобства и расширения возможностей вашей системы заказов.
Советы по безопасности и производительности
При реализации автоматических заказов важно обеспечить валидацию и фильтрацию входящих данных. Никогда не доверяйте пользовательскому вводу без проверки. Используйте функции WordPress, такие как sanitize_text_field, intval и другие для очистки данных.
Также учитывайте нагрузку на сервер, особенно если заказы создаются массово или по расписанию. Оптимизируйте запросы, кешируйте результаты и используйте транзиенты, если нужно.
Регулярно делайте резервные копии базы данных, чтобы избежать потери информации.