Как сложить значения нескольких полей созданных в Custom Content Type от Crockoblock?

Ссылка скопирована
1 ответ

Как сложить значения нескольких полей созданных в Custom Content Type от Crockoblock?
Я создал Custom Content Type - Игрок, у которого помимо персональных данных есть поля с цифровыми значениями его скилов (от 0 до 100).
Например: Сила - 98 Скорость - 81 Ловкость - 78 ... итд
Посоветуйте Плагин, который поможет выбрать и сложить необходимые значения, чтобы вывести сумму данных показателей в профайле данного игрока. Надеюсь понятно объяснил) Спасибо!
https://basket24.online/akramov/ Здесь пример

Дополнительно:

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

Ответы:

get_post_meta

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Виктор Sys Ответ

В JetEngine/Crocoblock Custom Content Type значения полей можно сложить, но способ зависит от того, где именно нужно вывести сумму: в карточке, в шаблоне single, в listing grid или сохранить как отдельное поле.

Если нужно просто вывести сумму на фронте, можно получить поля и сложить их в PHP. Для CCT данные обычно хранятся не как обычные post meta, поэтому стандартный get_post_meta() может не подойти. Нужно использовать API JetEngine или динамические callbacks, если вывод идёт через Listing.

В простом PHP принцип такой:

$strength = (int) ($item['strength'] ?? 0);
$speed    = (int) ($item['speed'] ?? 0);
$agility  = (int) ($item['agility'] ?? 0);
 
$total = $strength + $speed + $agility;

$strength = (int) ($item['strength'] ?? 0); $speed = (int) ($item['speed'] ?? 0); $agility = (int) ($item['agility'] ?? 0); $total = $strength + $speed + $agility;

Если выводите через JetEngine Listing, чаще удобнее создать custom callback/function и использовать его как Dynamic Field callback. Например:

function my_player_total_score($value, $object_id, $field) {
    $strength = (int) jet_engine()->listings->data->get_meta('strength');
    $speed    = (int) jet_engine()->listings->data->get_meta('speed');
    $agility  = (int) jet_engine()->listings->data->get_meta('agility');
 
    return $strength + $speed + $agility;
}

function my_player_total_score($value, $object_id, $field) { $strength = (int) jet_engine()->listings->data->get_meta('strength'); $speed = (int) jet_engine()->listings->data->get_meta('speed'); $agility = (int) jet_engine()->listings->data->get_meta('agility'); return $strength + $speed + $agility; }

Точный код может отличаться по версии JetEngine и типу объекта, поэтому сначала проверьте, как Ваш CCT отдаёт данные. Иногда проще вывести hidden dynamic fields и посмотреть объект через debug.

Если сумма нужна для сортировки и фильтрации, лучше сохранять её в отдельное поле при сохранении записи/CCT item. Иначе при каждом выводе придётся считать на лету, а сортировка по вычисляемому значению может быть неудобной или медленной.

Для сохранения суммы ищите hook JetEngine после сохранения CCT item. Логика: пользователь сохранил Сила/Скорость/Ловкость, код пересчитал total_score и записал его в отдельное поле.

Итог: для простого вывода — callback/динамическое поле. Для сортировки, рейтинга и фильтров — отдельное вычисляемое поле, которое обновляется при сохранении.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно