woocommerce_form_field() │ WC 1.0 Використовується для створення полів форми на сторінках оформлення замовлення та редагування адреси доставки та оплати.
Можна використовувати і в інших місцях, наприклад, в адмін панелі.
Повертає Строку
. Залежно від параметра return
, виводить або повертає html код поля форми.
Використання woocommerce_form_field ( $key , $args , $value );
$key
(рядок) (обов’язковий)
Ім’я поля та ID якщо параметр ID не заповнений у масиві $args.
$args
(масив) (обов’язковий)
Масив аргументів поля.
$value
(рядок)
Значення поля за промовчанням.
Типово: null Параметри масиву $args Значення за замовчуванням:
$defaults = [
'type' => 'text' ,
'label' => '' ,
'description' => '' ,
'placeholder' => '' ,
'maxlength' => false ,
'required' => false ,
'autocomplete' => false ,
'id' => $key ,
'class' => array (),
'label_class' => array (),
'input_class' => array (),
'return' => false ,
'options' => array (),
'custom_attributes' => array (),
'validate' => array (),
'default' => '' ,
'autofocus' => '' ,
'priority' => '' ,
];
type
(рядок) Тип поля. Можливі варіанти:
text
select
radio
password
datetime
datetime- local
date
month
time
week
number
email
url
tel
country – список країн, що підтримуються вашим магазином, які задаються в налаштуваннях WooCommerce.
state Типово: text
country
(рядок)
Використовується лише для типу поля
state
. Ім’я країни з налаштувань WooCommerce. Якщо поле пропущено, функція намагатиметься отримати значення країни виставлення рахунку чи доставки.
За замовчуванням: ”
label
(рядок)
Мітка поля
За замовчуванням: ”
description
(рядок)
Опис поля, яке буде відображатися під полем (так само підтримуватиметься html)
За замовчуванням: ”
placeholder
(рядок)
Текст підказки
За замовчуванням: ”
maxlength
(число)
Максимальна кількість дозволених символів у тексті
За промовчанням: false
required
(логічний)
Додає зірочку поруч із міткою
Приклад:
<abbr class="required" title="required">*</abbr>
За замовчуванням: ”
autocomplete
(рядок)
Вмикає або вимикає автозаповнення. Можливі коректні значення
on
або
off
За замовчуванням: ”
id
(рядок)
ID поля, за замовчуванням, береться зі значення імені поля переданого першим аргументом функції
За замовчуванням: $key
class
(масив)
Класи для контейнера створюваного блоку
Типово: array()
label_class
(масив)
Клас для тега
Типово: array()
input_class
(масив)
Клас для поля
За замовчуванням: array()
return
(логічний)
Вивести або повернути створене поле
За замовчуванням: false
options
(масив)
Тільки для типу
<select>
та
radio
.
Приклад:
[” => ‘Select…’, ‘value_1’ => ‘Text’]
Типово: array()
custom_attributes
(масив)
Асоціативний масив атрибутів для поля
<input>
.
Приклад:
[‘data-value’ => ‘test’]
Типово: array()
validate
(масив) Параметр додає клас для обгортки поля validate-{любое значение}
, який буде використовуватися під час перевірки JS, наприклад validate-email перевірятиме адреси електронної пошти.
validate-email
є єдиним наперед визначеним класом перевірки.
За замовчуванням: array()
default
(рядок)
Значення поля за промовчанням
За замовчуванням: ”
autofocus
(логічний)
Автоматичне наведення на поле форми, якщо полів з автофокусом багато наведення відбудеться на перше поле зі списку
За замовчуванням: ”
priority
(число)
Пріоритет відображення поля
За замовчуванням: ” Приклади #1 Додамо поле підписки після примітки на сторінці оформлення замовлення
add_action ( 'woocommerce_after_order_notes' , 'add_subscribe_checkbox' );
function add_subscribe_checkbox ( $checkout ) {
woocommerce_form_field ( 'subscribed' , [
'type' => 'checkbox' ,
'class' => ['subscribe-field' ],
'label' => __ ( 'Subscribe to our newsletter.' ),
], $checkout ->get_value ( 'subscribed' ) );
}
add_action ( 'woocommerce_checkout_update_order_meta' , 'save_subscribe_field' );
function save_subscribe_field ( $order_id ) {
if ( ! empty ( $_POST ['subscribed' ] ) && $_POST ['subscribed' ] == 1 ) {
update_post_meta ( $order_id , 'subscribed' , 1 );
}
}
#2 Виведемо кількість замовлень товару на сторінці редагування товару
add_action ( 'woocommerce_product_options_general_product_data' , 'woo_add_sale_fields_to_general' );
function woo_add_sale_fields_to_general ( ) {
Global $woocommerce , $post ;
echo '<div class="options_group">' ;
woocommerce_form_field ( 'total_sales' , [
'type' => 'number' ,
'id' => 'total_sales' ,
'label' => __ ( 'Sales' , 'woocommerce' ),
'placeholder' => '' ,
'description' => __ ( 'All product sales, your can change it' , 'woocommerce' ),
'default' => get_post_meta ( $post ->ID, 'total_sales' , true ),
'class' => ['form-field' ],
'input_class' => ['short' ],
]);
echo '</div>' ;
}
add_action ( 'woocommerce_process_product_meta' , 'woo_sale_fields_save' );
function woo_sale_fields_save ( $post_id ) {
if ( ! empty ( $_POST ['total_sales' ] ) ) {
update_post_meta ( $post_id , 'total_sales' , sanitize_text_field ( $_POST ['total_sales' ] ) );
}
}
Додати свій приклад
Код woocommerce_form_field() woocommerce form field WC 6.8.2 function woocommerce_form_field ( $key , $args , $value = null ) {
$defaults = array (
'type' => 'text' ,
'label' => '' ,
'description' => '' ,
'placeholder' => '' ,
'maxlength' => false ,
'required' => false ,
'autocomplete' => false ,
'id' => $key ,
'class' => array (),
'label_class' => array (),
'input_class' => array (),
'return' => false ,
'options' => array (),
'custom_attributes' => array (),
'validate' => array (),
'default' => '' ,
'autofocus' => '' ,
'priority' => '' ,
);
$ args = wp_parse_args ($ args, $ defaults);
$args = apply_filters ( 'woocommerce_form_field_args' , $args , $key , $value );
if ( is_string ( $args ['class' ] ) ) {
$args ['class' ] = array ( $args ['class' ] );
}
if ( $args ['required' ] ) {
$args ['class' ][] = 'validate-required' ;
$required = ' <abbr class="required" title="' . esc_attr__ ( 'required' , 'woocommerce' ) . '">*</abbr' ';
} else {
$required = ' <span class ="optional ">(' . esc_html__ ( 'optional ', 'woocommerce ' ) . ')</span >';
}
if ( is_string ( $args ['label_class '] ) ) {
$args ['label_class' ] = array ( $args ['label_class' ] );
}
if ( is_null ( $value ) ) {
$value = $args ['default' ];
}
$custom_attributes = array ();
$args ['custom_attributes' ] = array_filter ( (array ) $args ['custom_attributes' ], 'strlen' );
if ( $args ['maxlength' ] ) {
$args ['custom_attributes' ]['maxlength' ] = absint ( $args ['maxlength' ] );
}
if ( ! empty ( $args ['autocomplete' ] ) ) {
$args ['custom_attributes' ]['autocomplete' ] = $args ['autocomplete' ];
}
if ( true === $args ['autofocus' ] ) {
$args ['custom_attributes' ]['autofocus' ] = 'autofocus' ;
}
if ( $args ['description' ] ) {
$args ['custom_attributes' ]['aria-describedby' ] = $args ['id' ] . '-description' ;
}
if ( ! empty ( $args ['custom_attributes' ] ) && is_array ( $args ['custom_attributes' ] ) ) {
foreach ( $args ['custom_attributes' ] as $attribute => $attribute_value ) {
$custom_attributes [] = esc_attr ($attribute ). '="' . esc_attr ( $attribute_value ) . '"' ;
}
}
if ( ! empty ( $args ['validate' ] ) ) {
foreach ( $args ['validate' ] as $validate ) {
$args ['class' ][] = 'validate-' . $validate ;
}
}
$field = '' ;
$label_id = $args ['id' ];
$sort = $args ['priority' ] ? $args ['priority' ] : '' ;
$field_container = '<p class="form-row %1$s" id="%2$s" data-priority="' . esc_attr ( $sort ) . '">%3$s</p>' ;
switch ( $args ['type' ] ) {
case 'country' :
$countries = 'shipping_country' === $key ? WC ()->countries->get_shipping_countries () : WC ()->countries->get_allowed_countries ();
if ( 1 === count ( $countries ) ) {
$field .= '<strong>' . current (array_values ($countries )). '</strong>' ;
$field .= '<input type="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args ['id' ] ) . '" value="' . array_keys ($countries )).'' '' . implode ('' , $custom_attributes ). ' class="country_to_state" readonly="readonly" />' ;
} else {
$ data_label = ! empty ( $args ['label' ] ) ? 'data-label="' . esc_attr ( $args ['label' ] ) . '"' : '' ;
$field = '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args ['id' ] ) . '" class="country_to_state country_select ' . , $ args [ ' input_class ' ) ) . ' " ' . implode ('' , $custom_attributes ). ' data-placeholder="' . esc_attr ( $args ['placeholder' ] ? $args ['placeholder' ] : esc_attr__ ( 'Select a country / region…' , 'woocommerce' ) ) . '" ' . $ data_label . '><option value="">' . esc_html__ ( 'Select a country / region…' , 'woocommerce' ) . '</option>' ;
foreach ( $countries as $ckey => $cvalue ) {
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ($value , $ckey , false ). '>' . esc_html ($cvalue ). '</option>' ;
}
$field .= '</select>' ;
$field .= '<noscript><button type="submit" name="woocommerce_checkout_update_totals" value="' . esc_attr__ ( 'Update country / region' , 'woocommerce' ) . '">' . esc_html__ ('Update country/region' , 'woocommerce' ). '</button></noscript>' ;
}
break ;
case 'state' :
$for_country = isset ( $args ['country' ] ) ? $args ['country' ] : WC ()->checkout->get_value ( 'billing_state' === $key ? 'billing_country' : 'shipping_country' );
$states = WC ()->countries->get_states ( $for_country );
if ( is_array ( $states ) && empty ( $states ) ) {
$field_container = '<p class="form-row %1$s" id="%2$s" style="display: none">%3$s</p>' ;
$field .= '<input type="hidden" class="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args ['id' ] ) . '" value= ""' . implode ('' , $custom_attributes ). ' placeholder="' . esc_attr ( $args ['placeholder' ] ) . '" readonly="readonly" data-input-classes="' . esc_attr ( implode ('' , $args ['input_class' ] ) ) . '"/>' ;
} elseif ( ! is_null ( $for_country ) && is_array ( $states ) ) {
$ data_label = ! empty ( $args ['label' ] ) ? 'data-label="' . esc_attr ( $args ['label' ] ) . '"' : '' ;
$field .= '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args ['id' ] ) . '" class="state_select ' . esc_attr ( implode ( ' ) , $ args [ ' input_class ' ) ) . ' " ' . implode('', $custom_attributes ). ' data-placeholder=" ' . esc_attr( $args[' placeholder'] ? $args[' placeholder'] : esc_html__( ' Select an option…', ' woocommerce' ) ) . ' " data-input-classes=" ' .esc_attr( implode( ' ', $args[' input_class'] ) ) . ' ' ' . $ data_label . '>
<option value="">' . esc_html__ ( 'Select an option…' , 'woocommerce' ) . '</option>' ;
foreach ($states as $ckey => $cvalue ) {
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ($value , $ckey , false ). '>' . esc_html ($cvalue ). '</option>' ;
}
$field .= '</select>' ;
} else {
$field .= '<input type="text" class="input-text ' . esc_attr ( implode ( ' , $args[' input_class'] ) ) . ' " value=" ' . ' " placeholder=" ' . esc_attr( $args[' placeholder'] ) . ' " name=" ' . esc_attr( $key ) . ' " id=" ' . esc_attr( $args[' id'] ) . " ' . implode ('' , $custom_attributes ). ' data-input-classes="' . esc_attr ( implode ( ' ' , $args ['input_class' ] ) ) . '"/>' ;
}
break ;
case 'textarea' :
$field .= '<textarea name="' . esc_attr ( $key ) . '" class="input-text ' . esc_attr ( implode ( ' , $args[' input_class'] ) ) . ' " id=" ' .esc_attr( $args[' id'] ) . ' " placeholder=" ' . esc_attr( $args[' placeholder'] ) . ' " ' . ( empty( $args ['custom_attributes']['rows'] ) ? 'rows=" 2 "' : '' ) . ( empty( $args ['custom_attributes']['cols'] ) ? ' cols=" 5 "' : '' ) . implode('', $custom_attributes ). '>'. esc_textarea($value ). '</textarea>';
break;
case 'checkbox':
$field = '<label class=" checkbox ' . implode( ' ', $args[' label_class'] ) . ' " ' . implode('', $custom_attributes ). '>
<input type=" ' . esc_attr( $args[' type'] ) . ' " class=" input-checkbox ' . esc_attr( implode( ' , $args ['input_class' ] ) ) . '" name=" ' .esc_attr ( $key ) . '" id="' . esc_attr ( $args ['id' ] ) . '" value="1" ' . checked ($ value, 1 , false ). '/>' . $args ['label' ] . $required . '</label>' ;
break ;
case 'text' :
case 'password' :
case 'datetime' :
case 'datetime-local' :
case 'date' :
case 'month' :
case 'time' :
case 'week' :
case 'number' :
case 'email' :
case 'url' :
case 'tel' :
$field .= '<input type="' . esc_attr ( $args ['type' ] ) . '" class="input-text ' . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args ['id' ] ) . '" placeholder="' . esc_attr ( $args ['placeholder' ] ) . " value=" ' . esc_attr( $value ) . ' " ' . implode('', $custom_attributes ). '/>';
break;
case 'hidden':
$field .= '<input type=" ' . esc_attr( $args[' type'] ) . ' " class=" input-hidden ' . ' " name=" ' . esc_attr( $key ) . ' " id=" ' . esc_attr( $args[' id'] ) . ' " value=" ' . esc_attr( $value ) . ' " ' . implode('', $custom_attributes ). '/>';
break;
case 'select':
$field = '';
$options = '';
if ( ! empty( $args ['options'] ) ) {
foreach ( $args ['options'] as $option_key => $option_text ) {
if ( '' === $option_key ) {
// If we have a blank option, select2 needs a placeholder.
if ( empty( $args ['placeholder'] ) ) {
$args ['placeholder'] = $option_text ? $option_text : __( 'Choose an option', 'woocommerce' );
}
$custom_attributes [] = 'data-allow_clear=" true "';
}
$options .= '<option value=" ' . esc_attr( $option_key ) . ' " ' . selected($value , $option_key , false). '>'. esc_html($option_text ). '</option>';
}
$field .= '<select name=" ' . esc_attr( $key ) . ' " id=" ' . esc_attr( $args[' id'] ) . ' " class=" select ' . esc_attr( implode( ' ' , $ args [ ' input_class ' ) ) . ' " ' . implode('', $custom_attributes ). ' data-placeholder=" ' . esc_attr( $args[' placeholder'] ) . ' ">
'. $options . '
</select>';
}
break;
case 'radio':
$label_id . = '_'. current(array_keys($args ['options']));
if ( ! empty( $args ['options'] ) ) {
foreach ( $args ['options'] as $option_key => $option_text ) {
$field .= '<input type=" radio" class=" input-radio ' . esc_attr( implode( ' ', $args[' input_class'] ) ) . ' " value=" ' . ' " name=" ' . esc_attr( $key ) . ' " ' . implode('', $custom_attributes ). ' id=" ' . esc_attr( $args[' id'] ) . ' _' . esc_attr( $option_key ) . ' "' . checked ($ value, $ option_key, false). '/>';
$field .= '<label for=" ' . esc_attr( $args[' id'] ) . ' _' . esc_attr( $option_key ) . ' " class=" radio ' . label_class' ] ).'' >>'. esc_html($option_text). ' </label>';
}
}
break;
}
if ( ! empty( $field ) ) {
$field_html = ' ';
if ( $args[' label'] && ' checkbox' !== $args[' type'] ) {
$field_html .= ' <label for ="' . esc_attr( $label_id ) . '" class ="' . wp_kses_post( $args ['label'] ) . $required . '</label>';
}
$field_html .= '<span class=" woocommerce-input-wrapper">' . $field ;
if ( $args ['description'] ) {
$field_html .= '<span class=" description" id=" ' . esc_attr( $args[' id'] ) . ' -description" aria-hidden=" true ">' . wp_kses_post( $args ['description'] ) . '</span>';
}
$field_html .= '</span>';
$container_class = esc_attr( implode( ' ', $args ['class'] ) );
$container_id = esc_attr($args ['id']). '_field';
$field = sprintf($field_container , $container_class , $container_id , $field_html );
}
/**
* Filter by type.
*/
$field = apply_filters( 'woocommerce_form_field_' . $args ['type'], $field , $key , $args , $value );
/**
* General filter on form fields.
*
* @ Since 3.4.0
*/
$field = apply_filters( 'woocommerce_form_field', $field , $key , $args , $value );
if ( $args ['return'] ) {
return $field ;
} else {
// phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
echo $field ;
}
} Зв’язані функції