Как сделать автоматическое сохранение заказов в WordPress без WooCommerce

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

Почему нужно автоматическое сохранение заказов вне WooCommerce

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

Автоматическое сохранение заказов позволяет:

  • Обеспечить надежное хранение данных без потери в случае сбоев;
  • Автоматизировать уведомления и обработку заказов;
  • Гибко настраивать логику работы с заказами;
  • Избавиться от избыточного функционала WooCommerce.

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

Создание пользовательского типа записей «Заказы» в WordPress

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

add_action('init', 'wporders_register_order_post_type');
function wporders_register_order_post_type() {
    $labels = array(
        'name' => 'Заказы',
        'singular_name' => 'Заказ',
        'menu_name' => 'Заказы',
        'add_new' => 'Добавить заказ',
        'add_new_item' => 'Добавить новый заказ',
        'edit_item' => 'Редактировать заказ',
        'new_item' => 'Новый заказ',
        'view_item' => 'Просмотреть заказ',
        'search_items' => 'Искать заказы',
        'not_found' => 'Заказы не найдены',
        'not_found_in_trash' => 'В корзине заказы не найдены'
    );
    $args = array(
        'labels' => $labels,
        'public' => false,
        'show_ui' => true,
        'supports' => array('title', 'custom-fields'),
        'capability_type' => 'post',
        'has_archive' => false
    );
    register_post_type('wporders_order', $args);
}

Код добавьте в файл functions.php вашей темы или в собственный плагин. После этого в админке появится раздел «Заказы».

Создание формы заказа и обработка данных

Далее создадим форму на фронтенде, которая будет собирать данные и отправлять их на сервер для сохранения.

<form method="post" action="">
    <label>Имя:</label>
    <input type="text" name="wporders_name" required>
    <label>Email:</label>
    <input type="email" name="wporders_email" required>
    <label>Товар:</label>
    <input type="text" name="wporders_product" required>
    <input type="submit" name="wporders_submit" value="Отправить заказ">
</form>

Обработка формы и сохранение заказа в базе:

add_action('init', 'wporders_handle_order_form');
function wporders_handle_order_form() {
    if (!empty($_POST['wporders_submit'])) {
        $name = sanitize_text_field($_POST['wporders_name']);
        $email = sanitize_email($_POST['wporders_email']);
        $product = sanitize_text_field($_POST['wporders_product']);

        $post_data = array(
            'post_type' => 'wporders_order',
            'post_title' => 'Заказ от ' . $name,
            'post_status' => 'publish'
        );

        $post_id = wp_insert_post($post_data);
        if ($post_id) {
            update_post_meta($post_id, 'wporders_name', $name);
            update_post_meta($post_id, 'wporders_email', $email);
            update_post_meta($post_id, 'wporders_product', $product);

            // Можно добавить отправку уведомления по email
            wp_mail($email, 'Ваш заказ принят', 'Спасибо за заказ!');

            // Редирект после успешного сохранения
            wp_redirect(add_query_arg('order_status', 'success', wp_get_referer()));
            exit;
        }
    }
}

Этот код проверит форму, сохранит заказ как пост типа wporders_order, добавит метаданные и отправит пользователю письмо с подтверждением.

Добавление статусов заказов и их автоматическое обновление

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

Пример добавления статусов через пользовательское поле 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)) {
        update_post_meta($order_id, 'wporders_status', $new_status);
    }
}

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

Использование плагина Clearfy Pro для ускорения работы с заказами

Для оптимизации и повышения безопасности сайта с пользовательскими заказами рекомендую обратить внимание на плагин Clearfy Pro. Он позволяет отключать ненужные функции WordPress, ускорять загрузку страниц и защищать данные заказов.

Вывод заказов на сайте и фильтрация

Для отображения заказов на странице сайта используйте WP_Query с нужными параметрами:

$args = array(
    'post_type' => 'wporders_order',
    'meta_key' => 'wporders_status',
    'meta_value' => 'new', // например, новые заказы
    'posts_per_page' => 10
);
$query = new WP_Query($args);

if ($query->have_posts()) {
    echo '<ul>';
    while ($query->have_posts()) {
        $query->the_post();
        $name = get_post_meta(get_the_ID(), 'wporders_name', true);
        $product = get_post_meta(get_the_ID(), 'wporders_product', true);
        echo '<li>' . esc_html($name) . ': ' . esc_html($product) . '</li>';
    }
    echo '</ul>';
    wp_reset_postdata();
} else {
    echo 'Заказы не найдены';
}

Можно добавить пагинацию с помощью плагина ABC Pagination для удобства навигации.

Заключение

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

Как создать автоматический отчет по заказам WooCommerce с помощью PHP
05.02.2026
Как создать функционал подписки на новости в WordPress: практическое руководство
25.11.2025
Создание и использование shortcode в WordPress: подробное руководство с примерами кода
11.11.2025
Добавление последовательных вариаций товара в WooCommerce
05.01.2026
Как создать собственный REST API для WooCommerce в WordPress
21.11.2025