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

В интернет-магазинах на WordPress чаще всего используется WooCommerce для управления заказами. Однако бывают ситуации, когда нужно создать автоматические заказы без установки WooCommerce — например, для специфичных проектов, легких каталогов или нестандартных систем учета. В этой статье я расскажу, как реализовать функционал автоматического создания заказов в WordPress своими силами, без дополнительного тяжелого плагина.

Почему стоит делать автоматические заказы без WooCommerce

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

Преимущества собственного решения:

  • Минимальная нагрузка на сайт.
  • Полный контроль над данными и логикой.
  • Легко интегрировать с внешними API и CRM.
  • Простота кастомизации под конкретные задачи.

Теперь перейдем к практике.

Создаем пользовательский тип записей "Заказы" в WordPress

Первым делом создадим собственный тип записей для заказов. Это позволит удобно хранить и управлять заказами через админку и API WordPress.

function wporders_register_custom_post_type_order() {
    $labels = [
        'name'               => 'Заказы',
        'singular_name'      => 'Заказ',
        'menu_name'          => 'Заказы',
        'name_admin_bar'     => 'Заказ',
        'add_new'            => 'Добавить заказ',
        'add_new_item'       => 'Добавить новый заказ',
        'edit_item'          => 'Редактировать заказ',
        'new_item'           => 'Новый заказ',
        'view_item'          => 'Просмотреть заказ',
        'search_items'       => 'Искать заказы',
        'not_found'          => 'Заказы не найдены',
        'not_found_in_trash' => 'В корзине заказы не найдены',
    ];

    $args = [
        'labels'             => $labels,
        'public'             => false,
        'show_ui'            => true,
        'show_in_menu'       => true,
        'query_var'          => true,
        'rewrite'            => ['slug' => 'wporder'],
        'capability_type'    => 'post',
        'has_archive'        => false,
        'hierarchical'       => false,
        'menu_position'      => 20,
        'supports'           => ['title', 'editor', 'custom-fields'],
    ];

    register_post_type('wporder', $args);
}
add_action('init', 'wporders_register_custom_post_type_order');

Этот код регистрирует тип записей wporder с поддержкой заголовка, редактора и пользовательских полей — их мы будем использовать для хранения данных заказа.

Добавляем метаполя для хранения данных заказа

Заказу нужно минимум несколько полей: имя клиента, email, список товаров и суммы. Для простоты сохраним эти данные в метаполях.

function wporders_add_meta_boxes() {
    add_meta_box('wporder_details', 'Детали заказа', 'wporders_order_details_callback', 'wporder', 'normal', 'high');
}
add_action('add_meta_boxes', 'wporders_add_meta_boxes');

function wporders_order_details_callback($post) {
    wp_nonce_field('wporders_save_order_details', 'wporders_order_nonce');

    $client_name = get_post_meta($post->ID, '_wporders_client_name', true);
    $client_email = get_post_meta($post->ID, '_wporders_client_email', true);
    $order_items = get_post_meta($post->ID, '_wporders_order_items', true);
    ?>
    <p><label>Имя клиента:<br><input type="text" name="wporders_client_name" value="<?php echo esc_attr($client_name); ?>" style="width:100%;"></label></p>
    <p><label>Email клиента:<br><input type="email" name="wporders_client_email" value="<?php echo esc_attr($client_email); ?>" style="width:100%;"></label></p>
    <p><label>Товары (JSON):<br><textarea name="wporders_order_items" rows="5" style="width:100%;"><?php echo esc_textarea($order_items); ?></textarea></label></p>
    <p><em>Пример формата JSON для товаров: [{"product_id":123,"quantity":2,"price":500}]</em></p>
    <?php
}

function wporders_save_order_details($post_id) {
    if (!isset($_POST['wporders_order_nonce']) || !wp_verify_nonce($_POST['wporders_order_nonce'], 'wporders_save_order_details')) {
        return;
    }

    if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
        return;
    }

    if (isset($_POST['wporders_client_name'])) {
        update_post_meta($post_id, '_wporders_client_name', sanitize_text_field($_POST['wporders_client_name']));
    }

    if (isset($_POST['wporders_client_email'])) {
        update_post_meta($post_id, '_wporders_client_email', sanitize_email($_POST['wporders_client_email']));
    }

    if (isset($_POST['wporders_order_items'])) {
        update_post_meta($post_id, '_wporders_order_items', wp_kses_post($_POST['wporders_order_items']));
    }
}
add_action('save_post', 'wporders_save_order_details');

Теперь можно создавать и редактировать заказы вручную через админку, а также хранить все данные структурировано.

Автоматическое создание заказа через PHP-код

Чтобы создавать заказы программно, напишем функцию, которая принимает данные и создает запись с метаполями.

function wporders_create_order($client_name, $client_email, array $order_items) {
    $post_data = [
        'post_title'  => 'Заказ от ' . $client_name . ' ' . date('d.m.Y H:i'),
        'post_type'   => 'wporder',
        'post_status' => 'publish',
    ];

    $order_id = wp_insert_post($post_data);

    if (is_wp_error($order_id) || !$order_id) {
        return false;
    }

    update_post_meta($order_id, '_wporders_client_name', sanitize_text_field($client_name));
    update_post_meta($order_id, '_wporders_client_email', sanitize_email($client_email));
    update_post_meta($order_id, '_wporders_order_items', wp_json_encode($order_items));

    return $order_id;
}

Пример вызова функции:

$items = [
    ['product_id' => 101, 'quantity' => 2, 'price' => 1000],
    ['product_id' => 202, 'quantity' => 1, 'price' => 500],
];

$order_id = wporders_create_order('Иван Иванов', 'ivan@example.com', $items);
if ($order_id) {
    echo 'Заказ создан с ID: ' . $order_id;
} else {
    echo 'Ошибка создания заказа';
}

Таким образом можно автоматически создавать заказы, например, при получении данных из формы, API или внешней системы.

Отправка уведомлений о создании заказа

Часто нужно уведомлять администратора или клиента о новом заказе. Добавим отправку email по событию создания заказа.

function wporders_send_new_order_notification($order_id) {
    $client_name = get_post_meta($order_id, '_wporders_client_name', true);
    $client_email = get_post_meta($order_id, '_wporders_client_email', true);
    $order_items_json = get_post_meta($order_id, '_wporders_order_items', true);
    $order_items = json_decode($order_items_json, true);

    $items_list = '';
    if (is_array($order_items)) {
        foreach ($order_items as $item) {
            $items_list .= "Товар ID: {$item['product_id']}, Кол-во: {$item['quantity']}, Цена: {$item['price']} руб.<br>";
        }
    }

    $subject = 'Новый заказ #' . $order_id;
    $message = "<p>Поступил новый заказ от {$client_name} ({$client_email}):</p>";
    $message .= "<p><strong>Детали заказа:</strong><br>{$items_list}</p>";

    wp_mail(get_option('admin_email'), $subject, $message);
}
add_action('wp_insert_post', function($post_id, $post, $update) {
    if ($post->post_type === 'wporder' && !$update) {
        wporders_send_new_order_notification($post_id);
    }
}, 10, 3);

Теперь при создании заказа будет отсылаться письмо администратору с деталями.

Вывод заказов на сайте и API

Чтобы показывать заказы на фронтенде или отдавать через API, можно использовать WP_Query и REST API WordPress.

Пример простого запроса заказов по клиенту:

$query = new WP_Query([
    'post_type' => 'wporder',
    'meta_key' => '_wporders_client_email',
    'meta_value' => 'ivan@example.com',
]);

if ($query->have_posts()) {
    while ($query->have_posts()) {
        $query->the_post();
        echo '<h3>' . get_the_title() . '</h3>';
        echo '<p>' . get_the_content() . '</p>';
    }
    wp_reset_postdata();
} else {
    echo 'Заказы не найдены';
}

Для интеграции с внешними клиентами можно зарегистрировать собственный REST API эндпоинт, возвращающий данные заказов. Это позволит создавать и получать заказы по HTTP-запросам.

Итог

Создание автоматических заказов в WordPress без WooCommerce — задача решаемая с помощью кастомного типа записей, метаполей и своих функций для добавления и обработки данных. Такой подход оптимален для легких проектов и кастомных решений.

Если хотите расширить функционал, можно интегрировать отправку уведомлений через популярные SMTP-сервисы, добавить обработку оплаты по API или использовать плагины типа Clearfy Pro для оптимизации сайта и безопасности.

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

Автоматическое сохранение заказов в WordPress без WooCommerce
31.01.2026
Создание автоматических заказов в WordPress без WooCommerce
19.01.2026
Кастомизация email уведомлений о статусах заказов в WooCommerce
10.01.2026
Автопродолжение заказов в WooCommerce: пошаговое руководство
07.11.2025
Автоматизация обработки заказов без WooCommerce в WordPress
01.01.2026