get_field()ACF 3.6

Получает значение указанного поля или опции.

Эту функцию можно использовать, чтобы получить значение любого поля, любой локации.

Помните, что каждый тип поля возвращает разные типы данных: строка, число, массив и т.д.

Основа для: acf_shortcode(), the_field()

Хуков нет.

Возвращает

Разное. Значение поля.

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

get_field( $selector, $post_id, $format_value );
$selector(строка) (обязательный)
Ключ или название поля (name или key).
$post_id(число/object)
Запись (пост) для которого сохранено указанное поле.
По умолчанию: текущий пост
$format_value(true/false)
Позволяет вкл/отключить форматирование. При отключенном форматировании будет возвращено значение какое оно есть в базе данных.
По умолчанию: true

Примеры

1

#1 Получим значение поля текущего поста

Этот пример показывает, как получить значение поля text_field текущего поста.

$value = get_field( 'text_field' );
1

#2 Получим значение поля определенного поста

Этот пример показывает, как получить значение поля text_field у поста с ID = 123.

$value = get_field( 'text_field', 123 );
1

#3 Существует ли значение у поля

Этот пример показывает, как проверить существует ли значение у указанного поля.

$value = get_field( 'text_field' );

if( $value ) {
	echo $value;
}
else {
	echo 'empty';
}
1

#4 Получим значения одного поля у разных объектов

Этот пример показывает варианты, которые можно передать в $post_id, чтобы получить поле у post, user, term или option.

$post_id = false;        // current post
$post_id = 1;            // post ID = 1
$post_id = "user_2";     // user ID = 2
$post_id = "category_3"; // category term ID = 3
$post_id = "event_4";    // event (custom taxonomy) term ID = 4
$post_id = "option";     // options page
$post_id = "options";    // same as above

$value = get_field( 'my_field', $post_id );
0

#5 Получим значение поля без форматирования

В этом примере поле 'image' - это поле изображения, которое обычно возвращает объект изображения. Однако, передавая false в качестве 3-го параметра, значение не форматируется и возвращается из базы данных как есть.

Обратите внимание, что второй параметр указан false, чтобы определить текущий пост.

$image = get_field( 'image', false, false );

Список изменений

С версии 3.6 Введена.

Код get_field() ACF 6.4.2

function get_field( $selector, $post_id = false, $format_value = true, $escape_html = false ) {

	// filter post_id
	$post_id = acf_get_valid_post_id( $post_id );

	// get field
	$field = acf_maybe_get_field( $selector, $post_id );

	// create dummy field
	$dummy_field = false;
	if ( ! $field ) {
		$field = acf_get_valid_field(
			array(
				'name' => $selector,
				'key'  => '',
				'type' => '',
			)
		);

		// prevent formatting, flag as dummy in case $escape_html is true.
		$format_value = false;
		$dummy_field  = true;
	}

	// get value for field
	$value = acf_get_value( $post_id, $field );

	// escape html is only compatible when formatting the value too
	if ( ! $dummy_field && ! $format_value && $escape_html ) {
		_doing_it_wrong( __FUNCTION__, __( 'Returning an escaped HTML value is only possible when format_value is also true. The field value has not been returned for security.', 'acf' ), '6.2.6' ); //phpcs:ignore -- escape not required.
		return false;
	}

	// format value
	if ( $format_value ) {
		if ( $escape_html ) {
			// return the escaped HTML version if requested.
			if ( acf_field_type_supports( $field['type'], 'escaping_html' ) ) {
				$value = acf_format_value( $value, $post_id, $field, true );
			} else {
				$new_value = acf_format_value( $value, $post_id, $field );
				if ( is_array( $new_value ) ) {
					$value = map_deep( $new_value, 'acf_esc_html' );
				} else {
					$value = acf_esc_html( $new_value );
				}
			}
		} else {
			// get value for field
			$value = acf_format_value( $value, $post_id, $field );
		}
	}

	// If we've built a dummy text field, we won't format the value, but they may still request it escaped. Use `acf_esc_html`
	if ( $dummy_field && $escape_html ) {
		if ( is_array( $value ) ) {
			$value = map_deep( $value, 'acf_esc_html' );
		} else {
			$value = acf_esc_html( $value );
		}
	}

	// return
	return $value;
}
5 комментариев