Отображать дополнительное поле продукта только для определенной категории продуктов WooCommerce

Я добавил дополнительное поле в форму заказа продукта, чтобы можно было делать примечания при заказе определенного продукта:

// Display custom field on single product page
function d_extra_product_field(){
    $value = isset( $_POST ['extra_product_field'] ) ? sanitize_text_field( $_POST['extra_product_field'] ) : '';
    printf( '<div><label>%s</label><br><textarea name = "extra_product_field" value = "%s"></textarea></div>', __( 'Notes: Select colours & quantities for 12 pack only' ), esc_attr( $value ) );
}
add_action( 'woocommerce_after_add_to_cart_button', 'd_extra_product_field', 9 );

Однако оно добавляет это поле для каждого отдельного продукта.

Я хотел бы добавить настраиваемое поле только для определенной категории продуктов (идентификатор категории 29).

Вот моя попытка кода:

// Display custom field on single product page
function d_extra_product_field(){
    $value = isset( $_POST ['extra_product_field'], $product_cat_id = 29 ) ? sanitize_text_field( $_POST['extra_product_field'] ) : '';
    printf( '<div><label>%s</label><br><textarea name = "extra_product_field" value = "%s"></textarea></div>', __( 'Notes: Select colours & quantities for 12 pack only' ), esc_attr( $value ) );
}
add_action( 'woocommerce_after_add_to_cart_button', 'd_extra_product_field', 9 );

Но это не работает. Как отобразить это дополнительное поле продукта только для определенной категории продуктов WooCommerce?

Пример дополнительного поля WooCommerce

Стоит ли изучать 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 и хотите разрабатывать...
1
0
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете использовать метод WooCommerce WC_Productget_category_ids() следующим образом, чтобы настроить таргетинг на конкретные продукты из определенного идентификатора категории продуктов:

add_action( 'woocommerce_after_add_to_cart_button', 'd_extra_product_field', 9 );
function d_extra_product_field() {
    global $product;
    if ( in_array( 29, $product->get_category_ids() ) ) {
        printf( '<div><label>%s</label><br><textarea name = "extra_product_field" value = "%s"></textarea></div>', 
        __( 'Notes: Select colours & quantities for 12 pack only' ), 
        isset($_POST['extra_product_field']) ? sanitize_text_field( $_POST['extra_product_field'] ) : '' );
    }
}

Или вы можете использовать функцию WordPress has_term() следующим образом:

add_action( 'woocommerce_after_add_to_cart_button', 'd_extra_product_field', 9 );
function d_extra_product_field() {
    if ( has_term( 29, 'product_cat' ) ) {
        printf( '<div><label>%s</label><br><textarea name = "extra_product_field" value = "%s"></textarea></div>', 
        __( 'Notes: Select colours & quantities for 12 pack only' ), 
        isset($_POST['extra_product_field']) ? sanitize_text_field( $_POST['extra_product_field'] ) : '' );
    }
}

Оба способа должны работать.

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