Создание автоматических заказов в WordPress без WooCommerce

Почему стоит создавать автоматические заказы вне 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 и другие для очистки данных.

Также учитывайте нагрузку на сервер, особенно если заказы создаются массово или по расписанию. Оптимизируйте запросы, кешируйте результаты и используйте транзиенты, если нужно.

Регулярно делайте резервные копии базы данных, чтобы избежать потери информации.

Создание и использование shortcode в WordPress: подробное руководство с примерами кода
11.11.2025
Автоматизация создания заказов в WordPress без WooCommerce
16.12.2025
Автоматическое сохранение заказов в WordPress без WooCommerce
31.01.2026
Создание автоматических заказов в WordPress без WooCommerce
26.03.2026
Проверка и валидация данных в форме оформления заказа WooCommerce
21.02.2026