yandex

ACF PRO

Статьи о плагине кастомных полей для WordPress

Поле Number в ACF PRO для WordPress: настройка, вывод и практические сценарии

64
1
Создание и развитие блога

Поле Number в ACF (Advanced Custom Fields) — это инструмент для ввода и хранения числовых значений в WordPress: от простых количественных показателей до сложных метрик. Оно выгодно строгой валидацией данных и универсальностью вывода — подходит и для счётчиков, и для рейтингов, и для расчётов. Используйте его, когда нужно надёжно фиксировать цифры и оперировать ими в шаблонах, метаданных или бизнес‑логике.

Что такое поле Number и зачем оно нужно

Типовые кейсы использования:

  1. Счётчик просмотров статьи — храним точное число без риска получить текст вместо цифры.
  2. Рейтинг публикации (1–5) — фиксируем оценку, чтобы потом выводить звёзды или среднее значение.
  3. Цена товара/услуги — числа без лишних символов, удобно для расчётов и фильтрации.
  4. Количество оставшихся мест (например, в мастер‑классе) — контролируем доступность и показываем пользователю.
  5. Порядок сортировки (menu_order) — задаём приоритет вывода постов в кастомной сетке.

Преимущества поля Number:

  1. Валидация на уровне базы: в поле нельзя сохранить текст — только число (int/float).
  2. Гибкие ограничения: можно задать мин/макс, шаг, формат вывода.
  3. Простота интеграции: работает с get_field(), REST API, Gutenberg, шаблонами тем.
  4. Безопасность по умолчанию: нет необходимости вручную очищать ввод от HTML/скриптов.
  5. Совместимость с сортировкой и фильтрацией: числа легко использовать в WP_Query через meta_query.

Как настраивать поле Number в ACF

  1. Заполните Имя поля (Field Name) латиницей без пробелов, например post_views.
  2. В поле Метка (Label) укажите понятное название для редактора: «Просмотры статьи».
  3. В блоке Настройки (Settings) задайте:
    1. Минимальное значение (Minimum) — например, 0.
    2. Максимальное значение (Maximum) — например, 99999.
    3. Шаг (Step) — 1 для целых чисел, 0.5 для половинчатых оценок.

Практические сценарии использования

Кейс 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.

Создание и развитие блога
предыдущая

Поле Textarea в ACF PRO для WordPress: настройка, вывод и практические сценарии

Создание и развитие блога
следующая

Поле Range в ACF PRO для WordPress: настройка, вывод и практические сценарии

коментарии
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
1 Комментарий
Старые
Новые Популярные