Группа полей уже добавлена к записи, редактор заполнил автора, описание, цену и обложку. Теперь заставим тему показать эти значения посетителю. В ACF для чтения одного поля чаще всего используют get_field(): функция возвращает значение, а PHP-код решает, куда его поместить.
Первый вывод через get_field()
Добавьте код в PHP-шаблон темы, который отвечает за нужную страницу. Например, внутри цикла WordPress, где доступна текущая запись:
<?php
$author = get_field( 'book_author' );
if ( $author ) {
echo '<p>Автор: ' . esc_html( $author ) . '</p>';
}
?>
get_field() получает имя поля и возвращает его значение для текущей записи. Если нужно прочитать поле у другой записи, можно передать её ID вторым аргументом: get_field( 'book_author', 42 ). В шаблоне текущей записи обычно достаточно одного аргумента.
Проверка if ( $author ) не даёт вывести пустую подпись «Автор:». Это особенно полезно, когда часть записей уже заполнена, а часть редактор ещё не успел обновить.
Почему нельзя бездумно печатать значение
Поле редактируется через панель, но его содержимое всё равно нужно считать пользовательскими данными. Для текста используйте esc_html(), для адреса ссылки — esc_url(), для атрибута HTML — esc_attr(). Эти функции превращают специальные символы в безопасное представление для конкретного места в разметке.
Например, не выводите текст так:
echo $author;
Правильнее указать контекст:
echo esc_html( $author );
Если поле специально содержит разрешённую HTML-разметку, применяйте wp_kses_post() или подходящий фильтр, а не отключайте экранирование целиком. Подробнее о правилах безопасного вывода ACF рассказывает официальная памятка по безопасности ACF.
Выведем описание, цену и кнопку
Для нашего примера описание — обычный текст, цена — число, а ссылка на магазин — URL:
<?php
$summary = get_field( 'book_summary' );
$price = get_field( 'book_price' );
$shop_url = get_field( 'book_shop_url' );
?>
<div class="book-card">
<?php if ( $summary ) : ?>
<p><?php echo esc_html( $summary ); ?></p>
<?php endif; ?>
<?php if ( $price !== null && $price !== '' ) : ?>
<p>Цена: <?php echo esc_html( $price ); ?> ₽</p>
<?php endif; ?>
<?php if ( $shop_url ) : ?>
<a href="<?php echo esc_url( $shop_url ); ?>">Где купить</a>
<?php endif; ?>
</div>
Поле ссылки нужно добавить в группу, если хотите запустить этот фрагмент. У проверки цены два условия: ноль может быть допустимым числом, поэтому одной проверки «значение истинно» недостаточно — иначе цена 0 пропадёт.
Изображение: что именно возвращает поле
У поля изображения в настройках есть формат возврата: массив, URL или ID вложения. Формат определяет, что придёт из get_field(), поэтому его стоит выбрать заранее. Для новичка удобен ID: WordPress сам сформирует адаптивную разметку, включая подходящие размеры изображения.
<?php
$cover_id = get_field( 'book_cover' );
if ( $cover_id ) {
echo wp_get_attachment_image(
$cover_id,
'medium',
false,
array( 'class' => 'book-card__cover' )
);
}
?>
Если в настройках выбран массив, поле возвращает, среди прочего, адрес изображения и альтернативный текст. Тогда используйте esc_url() для адреса и esc_attr() для атрибута alt. Не смешивайте код для массива и код для ID: сначала проверьте выбранный формат.
Где размещать PHP-код
Фрагмент PHP нельзя вставить в обычное поле текста и ожидать, что WordPress выполнит его. Разместите его в соответствующем PHP-шаблоне дочерней темы или в собственном шаблоне проекта. Изменение файлов родительской темы может потеряться при обновлении темы.
Для типового макета это обычно шаблон записи или специальный шаблон страницы. Если не уверены, сначала выясните, какой файл темы формирует нужный экран. Не вставляйте разметку PHP в редактор записи и не добавляйте такой код в случайный файл: место шаблона определяет, где именно появится карточка.
Проверка на трёх записях
- Заполните все поля у одной записи и проверьте полный вариант карточки.
- Оставьте описание или ссылку пустыми у второй записи: пустые элементы должны исчезнуть.
- Добавьте кавычки и символы вроде
<в обычный текст: они должны отображаться как текст, а не как разметка.
Такой ручной прогон показывает, что шаблон справляется не только с идеальным набором данных. В следующей части зарегистрируем группу полей кодом, чтобы определения полей можно было хранить рядом с проектом и переносить между сайтами.
Содержание мини-курса
- ACF для новичков: создаём первые поля в WordPress
- Как вывести поля ACF в шаблоне WordPress: get_field() и PHP
- Как создать поля ACF кодом: регистрация группы на PHP
- Практика ACF: собираем карточку книги и проверяем шаблон
0
12