WPExperts

Как добавить дополнительные поля в WooCommerce через PHP с примерами кода

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

Почему стоит добавлять дополнительные поля через код, а не плагины

Существует множество плагинов для добавления пользовательских полей к товарам WooCommerce, например Clearfy Pro или Advanced Custom Fields. Однако, если вам нужно легковесное и максимально контролируемое решение, лучше написать собственный код. Это позволит избежать лишних зависимостей и ускорит загрузку сайта.

Кроме того, добавление кода самостоятельно помогает лучше понять архитектуру WooCommerce и возможности WordPress.

Добавляем пользовательские поля на страницу редактирования товара в админке WooCommerce

Для начала создадим функцию wpexperts_add_custom_product_fields, которая добавит HTML-код дополнительных полей в метабокс товара.

function wpexperts_add_custom_product_fields() {
    global $post;

    // Получаем сохраненное значение метаполя
    $custom_text = get_post_meta($post->ID, '_wpexperts_custom_text', true);
    $custom_checkbox = get_post_meta($post->ID, '_wpexperts_custom_checkbox', true);

    // Выводим поле текстового ввода
    echo '<div class="options_group">';
    woocommerce_wp_text_input(array(
        'id'          => '_wpexperts_custom_text',
        'label'       => __('Дополнительный текст', 'woocommerce'),
        'placeholder' => 'Введите дополнительный текст',
        'desc_tip'    => 'true',
        'description' => __('Это поле позволит добавить дополнительный текст к товару.', 'woocommerce'),
        'value'       => $custom_text
    ));

    // Выводим чекбокс
    woocommerce_wp_checkbox(array(
        'id'          => '_wpexperts_custom_checkbox',
        'label'       => __('Активировать опцию', 'woocommerce'),
        'description' => __('Отметьте, если опция должна быть активна.', 'woocommerce'),
        'value'       => $custom_checkbox
    ));

    echo '</div>';
}
add_action('woocommerce_product_options_general_product_data', 'wpexperts_add_custom_product_fields');

Здесь мы используем встроенные функции WooCommerce для вывода полей: woocommerce_wp_text_input для текстового поля и woocommerce_wp_checkbox для чекбокса. Это гарантирует, что поля будут стилизованы в стиле WooCommerce.

Сохраняем данные пользовательских полей при сохранении товара

Чтобы сохранить введенные значения, нужно обработать сохранение метаданных с помощью хука woocommerce_process_product_meta. Создадим функцию wpexperts_save_custom_product_fields:

function wpexperts_save_custom_product_fields($post_id) {
    // Проверяем и сохраняем текстовое поле
    if (isset($_POST['_wpexperts_custom_text'])) {
        update_post_meta($post_id, '_wpexperts_custom_text', sanitize_text_field($_POST['_wpexperts_custom_text']));
    }

    // Проверяем и сохраняем чекбокс
    $checkbox_value = isset($_POST['_wpexperts_custom_checkbox']) ? 'yes' : 'no';
    update_post_meta($post_id, '_wpexperts_custom_checkbox', $checkbox_value);
}
add_action('woocommerce_process_product_meta', 'wpexperts_save_custom_product_fields');

Обратите внимание, что мы используем sanitize_text_field для очистки входных данных и сохраняем значение чекбокса как yes или no.

Выводим дополнительные поля на странице товара в магазине

Чтобы отобразить дополнительные поля на странице товара, используем хук woocommerce_single_product_summary с приоритетом после названия товара. Создадим функцию wpexperts_display_custom_fields_on_product:

function wpexperts_display_custom_fields_on_product() {
    global $product;

    $custom_text = get_post_meta($product->get_id(), '_wpexperts_custom_text', true);
    $custom_checkbox = get_post_meta($product->get_id(), '_wpexperts_custom_checkbox', true);

    if (!empty($custom_text)) {
        echo '<p class="wpexperts-custom-text"><strong>Дополнительная информация:</strong> ' . esc_html($custom_text) . '</p>';
    }

    if ($custom_checkbox === 'yes') {
        echo '<p class="wpexperts-custom-checkbox"><em>Опция активирована</em></p>';
    }
}
add_action('woocommerce_single_product_summary', 'wpexperts_display_custom_fields_on_product', 25);

Это добавит простое текстовое сообщение и пометку, если чекбокс был активирован. Вы можете стилизовать эти элементы через CSS в вашей теме.

Расширение: добавление селектора с вариантами и интеграция с корзиной

Если вам нужно добавить не просто текст или чекбокс, а например, селектор с вариантами, которые влияют на цену, можно использовать следующий пример:

function wpexperts_add_custom_select_field() {
    woocommerce_wp_select(array(
        'id'      => '_wpexperts_custom_select',
        'label'   => __('Выберите вариант упаковки', 'woocommerce'),
        'options' => array(
            ''        => __('Выберите...', 'woocommerce'),
            'small'   => __('Маленькая упаковка', 'woocommerce'),
            'medium'  => __('Средняя упаковка', 'woocommerce'),
            'large'   => __('Большая упаковка', 'woocommerce')
        )
    ));
}
add_action('woocommerce_product_options_general_product_data', 'wpexperts_add_custom_select_field');

function wpexperts_save_custom_select_field($post_id) {
    if (isset($_POST['_wpexperts_custom_select'])) {
        update_post_meta($post_id, '_wpexperts_custom_select', sanitize_text_field($_POST['_wpexperts_custom_select']));
    }
}
add_action('woocommerce_process_product_meta', 'wpexperts_save_custom_select_field');

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

Использование плагина Expert Review для расширенного управления доп. полями

Если вы хотите быстро добавить кастомные поля без написания кода, рекомендуем обратить внимание на плагин Expert Review. Он позволяет создавать отзывы с доп. полями и использовать их в товарах, что удобно для интернет-магазинов с расширенными требованиями.

Итог

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

×
до 3225₽

Продавай темы и плагины WordPress!

Лови с каждой продажи

Начать ⋙