Я добавил дополнительное поле в форму заказа продукта, чтобы можно было делать примечания при заказе определенного продукта:
// 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 WC_Product
get_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'] ) : '' );
}
}
Оба способа должны работать.