WordPress ACF, как получить в шаблоне ID самого повторителя (repeater), а также ID каждого из его полей (row) в цикле?
Мне нужно получить в шаблоне ID самого повторителя (repeater), а также ID каждого из его полей (row) в цикле для того, чтобы манипулировать ими посредством JavaScript.
Как получить эти ID-шники?
Дополнительно:
Ответы:
Не очень понятно, что за ID повторителя, но он работает как обычный массив
$my_repeater = get_field('my_repeater_field', 'id страницы к которой он привязан'); // можно обращаться к его полям, например: echo $my_repeater['3']['название строки']; |
$my_repeater = get_field('my_repeater_field', 'id страницы к которой он привязан'); // можно обращаться к его полям, например: echo $my_repeater['3']['название строки'];
- Смотрите, можно например сделать счётчик:
<?php if( have_rows('repeater_field_name') ): ?> <?php $i = 1; while ( have_rows('repeater_field_name') ) : the_row(); ?> <?php the_sub_field('sub_field_name'); ?> <p>ID <?php=$i; ?></p> <?php $i++; endwhile; ?> <?php else : ?> <?php endif; ?>
<?php if( have_rows('repeater_field_name') ): ?> <?php $i = 1; while ( have_rows('repeater_field_name') ) : the_row(); ?> <?php the_sub_field('sub_field_name'); ?> <p>ID <?php=$i; ?></p> <?php $i++; endwhile; ?> <?php else : ?> <?php endif; ?>
Но это как бы через одно место, ведь у записи (поля в репиторе) есть же в базе какой-то свой уникальный mysql_insert_id. Вот как его вытащить?
- Счетчик через одно место), т.к. для этого есть функция:
get_row_index();Может для манипуляции через js вам хватит того что я написал, а так же функции:
update_sub_field($selector, $value, [$post_id]);
Попробуйте использовать функцию - get_field_object()
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
У строк ACF Repeater нет нормального стабильного публичного ID, как у записей WordPress. Repeater хранится в postmeta как набор meta-ключей, и ориентироваться на внутренние ID/порядковые записи базы не стоит. Для JavaScript обычно нужен не “ID строки из MySQL”, а стабильный HTML-идентификатор, который Вы сами формируете при выводе.
Самый простой вариант — счётчик:
if (have_rows('repeater_field_name')) { $i = 0; while (have_rows('repeater_field_name')) { the_row(); $i++; $row_id = 'repeater-row-' . get_the_ID() . '-' . $i; echo '<div id="' . esc_attr($row_id) . '" class="repeater-row">'; the_sub_field('sub_field_name'); echo '</div>'; } }
Это не “через одно место”, а нормальная практика. Для фронта важна стабильность в рамках страницы. Если порядок строк меняется в админке, их HTML-ID тоже логично меняются.
Если нужен постоянный ID, который не зависит от порядка, добавьте в repeater отдельное sub field, например
row_key, и заполняйте его вручную или автоматически UUID. Тогда используйте его:$row_key = get_sub_field('row_key'); $row_id = 'row-' . sanitize_title($row_key);
Не привязывайтесь к внутренней структуре postmeta ACF. Она не предназначена для такой логики и может поменяться. Делайте собственный ключ или счётчик — это надёжнее для JS, CSS и якорей.