Поле Number в ACF PRO для WordPress: настройка, вывод и практические сценарии
Поле Number в ACF (Advanced Custom Fields) — это инструмент для ввода и хранения числовых значений в WordPress: от простых количественных показателей до сложных метрик. Оно выгодно строгой валидацией данных и универсальностью вывода — подходит и для счётчиков, и для рейтингов, и для расчётов. Используйте его, когда нужно надёжно фиксировать цифры и оперировать ими в шаблонах, метаданных или бизнес‑логике.
Что такое поле Number и зачем оно нужно
Типовые кейсы использования:
- Счётчик просмотров статьи — храним точное число без риска получить текст вместо цифры.
- Рейтинг публикации (1–5) — фиксируем оценку, чтобы потом выводить звёзды или среднее значение.
- Цена товара/услуги — числа без лишних символов, удобно для расчётов и фильтрации.
- Количество оставшихся мест (например, в мастер‑классе) — контролируем доступность и показываем пользователю.
- Порядок сортировки (menu_order) — задаём приоритет вывода постов в кастомной сетке.
Преимущества поля Number:
- Валидация на уровне базы: в поле нельзя сохранить текст — только число (int/float).
- Гибкие ограничения: можно задать мин/макс, шаг, формат вывода.
- Простота интеграции: работает с get_field(), REST API, Gutenberg, шаблонами тем.
- Безопасность по умолчанию: нет необходимости вручную очищать ввод от HTML/скриптов.
- Совместимость с сортировкой и фильтрацией: числа легко использовать в
WP_Queryчерезmeta_query.
Как настраивать поле Number в ACF
- Заполните Имя поля (Field Name) латиницей без пробелов, например
post_views. - В поле Метка (Label) укажите понятное название для редактора: «Просмотры статьи».
- В блоке Настройки (Settings) задайте:
- Минимальное значение (Minimum) — например,
0. - Максимальное значение (Maximum) — например,
99999. - Шаг (Step) —
1для целых чисел,0.5для половинчатых оценок.
- Минимальное значение (Minimum) — например,
Практические сценарии использования
Кейс 1. Вывод счётчика просмотров статьи
Задача: показать количество просмотров под заголовком статьи. Данные хранятся в поле Number, значение обновляется отдельно (например, через плагин или свой код).
Имя поля: post_views
<?php $views = get_field('post_views') ?>
<?php if(!empty($views)): ?>
// Выводим только если значение есть и это число
<span class="post-views">
Просмотров: <?php echo absint($views) ?>
</span>
<?php endif ?>
Кейс 2. Рейтинг статьи 1–5 (звёздочки)
Задача: вывести рейтинг в виде текста «Рейтинг: 4.2/5» и подготовить данные для микроразметки Schema.org.
Имя поля: article_rating
<?php $rating = get_field('article_rating') ?>
<?php if (is_numeric($rating) && $rating >= 1 && $rating <= 5): ?>
// Валидируем диапазон и экранируем значения
<div itemprop="aggregateRating" itemscope itemtype="https://schema.org/AggregateRating">
<meta itemprop="ratingValue" content="<?php echo esc_attr($rating) ?>">
<span>Рейтинг: <?php echo esc_html($rating) ?>/5</span>
</div>
<?php endif ?>Кейс 3. Цена услуги в карточке
Задача: отобразить цену с валютой и подготовить число для расчётов (например, для корзины).
Имя поля: service_price
<?php $price = get_field('service_price') ?>
<?php if(is_numeric($price) && $price > 0 ): ?>
// Форматируем число и добавляем валюту
<?php $formatted = number_format($price, 2, '.', '') ?>
<span class="price"><?php echo esc_html($formatted) ?> ₽</span>
<?php endif ?>Кейс 4. Сортировка постов по приоритету через WP_Query
Задача: вывести посты из категории, отсортированные по полю Number (приоритет), чтобы важные статьи были выше.
Имя поля: priority_order
<?php
$args = [
'post_type' => 'post',
'posts_per_page' => 10,
'meta_key' => 'priority_order',
'orderby' => 'meta_value_num', // сортируем как числа
'order' => 'DESC',
];
$query = new WP_Query($args);
?>
<?php if($query->have_posts()): ?>
<?php while($query->have_posts()): $query->the_post() ?>
// Вывод заголовка и прочего
<?php the_title('<h2>', '</h2>') ?>
<?php endwhile ?>
<?php wp_reset_postdata() ?>
<?php endif ?>Важные нюансы и лучшие практики
- Всегда валидируйте число: используйте
is_numeric()иabsint()— для целых,floatval()— для дробных. - Не доверяйте вводу без ограничений: в настройках ACF ставьте min/max и step, чтобы избежать некорректных значений.
- Для сортировки используйте
meta_value_num, а неmeta_value— иначе сортировка будет лексикографической (10 < 2). - Избегайте хранения форматированных строк (например, «1 200 ₽») в поле Number — для этого есть текстовые поля или отдельные поля валюты.
- Используйте
esc_*функции при выводе в HTML, чтобы предотвратить XSS. - При работе с REST API поле Number передаётся как число, что удобно для фронтенд‑интеграций.
- Храните только чистые данные: форматирование (пробелы, валюты, суффиксы) делайте на уровне шаблона.
Продвинутые приёмы
Приём 1. Условный вывод бейджа «Бестселлер»
Когда применять: если нужно показывать разные блоки при достижении порогового значения (например, «бестселлер» при просмотрах >1000).
<?php $views = get_field('post_views');
<?php if(is_numeric($views) && $views >= 1000): ?>
<span class="badge badge-bestseller">Бестселлер</span>
<?php endif ?>Приём 2. Расчёт итоговой стоимости на стороне PHP
Когда применять: для простых расчётов без JS (например, цена × количество).
<?php
$unit_price = get_field('unit_price'); // цена за единицу
$quantity = get_field('quantity'); // количество
?>
<?php if(is_numeric($unit_price) && is_numeric($quantity)): ?>
<?php $total = $unit_price * $quantity ?>
<span class="total-price"><?php echo number_format($total, 2) ?> ₽</span>
<?php endif ?>Приём 3. Фильтрация по диапазону в WP_Query
Когда применять: чтобы вывести посты, где поле Number попадает в диапазон (например, услуги стоимостью от 10 000 до 50 000 ₽).
<?php
$args = [
'post_type' => 'service',
'meta_query' => [
[
'key' => 'service_price',
'value' => [10000, 50000],
'compare' => 'BETWEEN',
'type' => 'NUMERIC', // важно для корректного сравнения
],
],
];
$query = new WP_Query( $args );
?>
<?php if($query->have_posts()): ?>
<?php while($query->have_posts()): $query->the_post() ?>
<?php the_title('<h3>', '</h3>') ?>
<?php endwhile ?>
<?php wp_reset_postdata() ?>
<?php endif ?>Частые ошибки и как их избежать
| Ошибка | Как исправить |
|---|---|
Вывод значения без проверки is_numeric() | Всегда проверяйте тип: if(is_numeric($value)) |
Сортировка по meta_value вместо meta_value_num | Используйте orderby => 'meta_value_num' для чисел |
| Хранение форматированных чисел (с пробелами, валютой) в поле Number | Храните чистое число, форматируйте только при выводе |
| Отсутствие min/max в настройках поля | Настройте ограничения в интерфейсе ACF |
Прямой вывод из get_field() в HTML без esc_* | Применяйте esc_attr(), esc_html() для безопасности |
Заключение
Поле Number WordPress в ACF — это простой, но мощный инструмент для работы с числовыми данными: от счётчиков до расчётов и сортировки. Его сила — в строгой типизации и гибкости вывода: вы получаете надёжные данные и можете безопасно использовать их в шаблонах и запросах. В следующих статьях разберём смежные типы полей: Диапазон (Range), URL, Дата/время и их комбинации. Подписывайтесь на блог superkapusta.ru и мой канал в Дзене, чтобы не пропустить новые гайды по WordPress и ACF.
коментарии
[…] Number, […]