Проверка настраиваемых полей на страницах отдельных продуктов Woocommerce

Я хотел бы создать продукт Woocommerce с дополнительным полем ввода текста, которое проверяет, является ли введенное значение уникальным для этого поля, в противном случае выводится сообщение.

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

Любая помощь приветствуется, Я не знаю, с чего начать.

Сообществу: это НЕ слишком широкий… извините

LoicTheAztec 03.05.2018 14:22
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
1 437
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это можно сделать очень просто с помощью 3 небольших функций:

  • Первый, добавьте настраиваемое текстовое поле ввода перед кнопкой добавления в корзину на страницах отдельных продуктов.
  • Второй выполняет проверку, проверяя, что это уникальное значение
  • Третий сохраняет значение как метаданные продукта в массиве существующих значений после проверки

Отправленное значение будет проверено для текущего продукта ...

Код:

// The product custom field before add-to-cart button - Frontend
add_action( 'woocommerce_before_add_to_cart_button', 'action_before_add_to_cart_button' );
function action_before_add_to_cart_button() {
    global $product;

    echo '<div>';

    woocommerce_form_field( 'custom_unique', array(
        'type'          => 'text',
        'class'         => array('my-field-class form-row-wide'),
        'label'         => __('The label name'),
        'placeholder'   =>__('Please enter …'),
        'required'      => true,
    ), '' );

    // For test: displaying existing submitted values (commented - inactive)
    // print_r( get_post_meta( $product->get_id(), '_custom_unique_values', true ) );

    echo '</div><br>';
}

// Field validation (Checking)
add_filter( 'woocommerce_add_to_cart_validation', 'filter_add_to_cart_validation', 20, 3 );
function filter_add_to_cart_validation( $passed, $product_id, $quantity ) {

    // Get the custom field values to check
    $custom_unic_values = (array) get_post_meta( $product_id, '_custom_unique_values', true );

    // Check that the value is unique
    if ( in_array( $_POST['custom_unique'], $custom_unic_values ) ){
        $passed = false ; // Set as false when the value exist

        // Displaying a custom message
        $message = sprintf( __( 'The value "%s" already exist, try something else…', 'woocommerce' ), sanitize_text_field( $_POST['custom_unique'] ) );
        wc_add_notice( $message, 'error' );
    }
    return $passed;
}

// Save the new unique value in the array of values (as product meta data)
add_action( 'woocommerce_add_to_cart', 'action_add_to_cart', 20, 6 );
function action_add_to_cart( $cart_item_key, $product_id, $quantity, $variation_id, $variation, $cart_item_data ){
    if ( isset($_POST['custom_unique']) ){
        // Get the array of existing values
        $custom_unic_values   = (array) get_post_meta( $product_id, '_custom_unique_values', true );
        // append the new value to the array of values
        $custom_unic_values[] = sanitize_text_field( $_POST['custom_unique'] );
        // Save the appended array
        update_post_meta( $product_id, '_custom_unique_values', $custom_unic_values );
    }
}

Код находится в файле function.php вашей активной дочерней темы (или активной темы). Проверено и работает.

Другие вопросы по теме