WordPress как на ладони

woocommerce_wp_text_input()WC 1.0

Выводит на экран текстовое поле.

Используется в метабоксах WooCommerce, поэтому для корректной работы функции нужны глобальные переменные $thepostid и $post, иначе можно получить PHP ошибку Trying to get property 'ID' of non-object in ...

Хуков нет.

Возвращает

null. Выводит на экран HTML.

Использование

woocommerce_wp_text_input( $field );
$field(массив) (обязательный)

Массив параметров (конфигурация) поля. Принимает следующие значения:

  • id(строка) (обязательный)
    Значение атрибута id у тега input. Если не указать, то получим PHP ошибку PHP Notice: Undefined index: id in ....
    Также используется для получения значений атрибутов value и name у тега input, для атрибута for тега label, для дополнительного css класса у контейнера в виде тега p.

  • label(строка) (обязательный)
    Содержимое тега label. При выводе очищается функцией wp_kses_post(). Если не указать, то получим PHP ошибку PHP Notice: Undefined index: label in ....

  • class(строка)
    Значение атрибута class у тега input.
    По умолчанию: short

  • placeholder(строка)
    Значение атрибута placeholder у тега input. При выводе очищается функцией esc_attr().
    По умолчанию: ''

  • style(строка)
    Значение атрибута style у тега input. При выводе очищается функцией esc_attr().
    По умолчанию: ''

  • wrapper_class(строка)
    Значение атрибута class у тега p (контейнер). При выводе очищается функцией esc_attr(). У тега p также будут статический класс form-field и динамический класс {параметр id}_field.
    По умолчанию: значение параметра id

  • value(строка)
    Значение атрибута value у тега input. При выводе очищается функцией esc_attr().
    По умолчанию: значение параметра id

  • name(строка)
    Значение атрибута name у тега input. При выводе очищается функцией esc_attr(), а также другими функциями, в зависимости от параметра data_type.
    По умолчанию: get_post_meta( $thepostid, $field['id'], true )

  • type(строка)
    Значение атрибута type у тега input. Список возможных значений type. При выводе очищается функцией esc_attr().
    По умолчанию: 'text'

  • data_type(строка)
    Тип данных для вывода. На основе этого параметра будет применена специальная функция очистки. В любом случае при выводе данные будут дополнительно обработаны функцией esc_attr(). Может быть:

    • price - значение обработается функцией wc_format_localized_price(), а к параметру class добавляется значение wc_input_price.
    • decimal- значение обработается функцией wc_format_localized_decimal(), а к параметру class добавляется значение wc_input_decimal.
    • stock - значение обработается функцией wc_stock_amount(), а к параметру class добавляется значение wc_input_stock.
    • url - значение обработается функцией esc_url(), а к параметру class добавляется значение wc_input_url.

    По умолчанию: ''

  • description(строка)
    Описание поля. Выводится под полем ввода как

    <span class="description">значение</span>

    При выводе очищается функцией wp_kses_post(). Описание будет показано (его будет видно), если не указан параметр desc_tip.

  • desc_tip(логический)
    Если указать что-либо, отличное от false, то описание поле будет выведено в виде тултипа (значка вопроса, при наведении на который будет появляться описание). Выводится как

    <span class="woocommerce-help-tip" data-tip="значение description"></span>

    По умолчанию: false

  • custom_attributes(массив)
    Произвольные HTML атрибуты в виде массива с парами [ атрибут => значение ].

Примеры

0

#1 Вывод поля для цены WooCommerce

Данный пример взят для поля "Базовая цена" с кода самого плагина WooCommerce.

woocommerce_wp_text_input(
	array(
		'id'        => '_regular_price',
		'value'     => $product_object->get_regular_price( 'edit' ),
		'label'     => __( 'Regular price', 'woocommerce' ) . ' (' . get_woocommerce_currency_symbol() . ')',
		'data_type' => 'price',
	)
);

Получим HTML:

<p class="form-field _regular_price_field ">

	<label for="_regular_price">
		Базовая цена (£)
	</label>

	<input  type="text"
			class="short wc_input_price"
			style=""
			name="_regular_price"
			id="_regular_price"
			value=""
			placeholder=""
	/>

</p>

Код woocommerce_wp_text_input() WC 8.7.0

function woocommerce_wp_text_input( $field, WC_Data $data = null ) {
	global $post;

	$field['placeholder']   = isset( $field['placeholder'] ) ? $field['placeholder'] : '';
	$field['class']         = isset( $field['class'] ) ? $field['class'] : 'short';
	$field['style']         = isset( $field['style'] ) ? $field['style'] : '';
	$field['wrapper_class'] = isset( $field['wrapper_class'] ) ? $field['wrapper_class'] : '';
	$field['value']         = $field['value'] ?? OrderUtil::get_post_or_object_meta( $post, $data, $field['id'], true );
	$field['name']          = isset( $field['name'] ) ? $field['name'] : $field['id'];
	$field['type']          = isset( $field['type'] ) ? $field['type'] : 'text';
	$field['desc_tip']      = isset( $field['desc_tip'] ) ? $field['desc_tip'] : false;
	$data_type              = empty( $field['data_type'] ) ? '' : $field['data_type'];

	switch ( $data_type ) {
		case 'price':
			$field['class'] .= ' wc_input_price';
			$field['value']  = wc_format_localized_price( $field['value'] );
			break;
		case 'decimal':
			$field['class'] .= ' wc_input_decimal';
			$field['value']  = wc_format_localized_decimal( $field['value'] );
			break;
		case 'stock':
			$field['class'] .= ' wc_input_stock';
			$field['value']  = wc_stock_amount( $field['value'] );
			break;
		case 'url':
			$field['class'] .= ' wc_input_url';
			$field['value']  = esc_url( $field['value'] );
			break;

		default:
			break;
	}

	// Custom attribute handling
	$custom_attributes = array();

	if ( ! empty( $field['custom_attributes'] ) && is_array( $field['custom_attributes'] ) ) {

		foreach ( $field['custom_attributes'] as $attribute => $value ) {
			$custom_attributes[] = esc_attr( $attribute ) . '="' . esc_attr( $value ) . '"';
		}
	}

	echo '<p class="form-field ' . esc_attr( $field['id'] ) . '_field ' . esc_attr( $field['wrapper_class'] ) . '">
		<label for="' . esc_attr( $field['id'] ) . '">' . wp_kses_post( $field['label'] ) . '</label>';

	if ( ! empty( $field['description'] ) && false !== $field['desc_tip'] ) {
		echo wc_help_tip( $field['description'] );
	}

	echo '<input type="' . esc_attr( $field['type'] ) . '" class="' . esc_attr( $field['class'] ) . '" style="' . esc_attr( $field['style'] ) . '" name="' . esc_attr( $field['name'] ) . '" id="' . esc_attr( $field['id'] ) . '" value="' . esc_attr( $field['value'] ) . '" placeholder="' . esc_attr( $field['placeholder'] ) . '" ' . implode( ' ', $custom_attributes ) . ' /> ';

	if ( ! empty( $field['description'] ) && false === $field['desc_tip'] ) {
		echo '<span class="description">' . wp_kses_post( $field['description'] ) . '</span>';
	}

	echo '</p>';
}
campusboy 4750youtube.com/c/wpplus
Создатель YouTube канала wp-plus, на котором делюсь своим опытом. Активный пользователь wp-kama.ru. WordPress-разработчик. Разработка сайтов и лендингов. Доработка существующих проектов. Сопровождение ресурсов.
Редакторы: Kama 9616
1 комментарий
    Войти