Как вывести acf поля из родительской рубрики в дочернюю запись?
Здравствуйте.
Можно ли сделать так, чтобы ACF поле, заполненное в рубрике, наследовались в записи?
Вот так я вывожу поле ACF Записи в рубрике:
<? $term = get_queried_object(); ?> <?php $opytnye_vrachi = get_field( 'opytnye_vrachi', $term); ?> <?php if ( $opytnye_vrachi ) : ?> <?php foreach ( $opytnye_vrachi as $post ) : ?> <?php setup_postdata ( $post ); ?> <? require get_template_directory() . '/inc/doctors-item.php'; ?> <?php endforeach; ?> <?php wp_reset_postdata(); ?> <?php endif; ?> |
<? $term = get_queried_object(); ?> <?php $opytnye_vrachi = get_field( 'opytnye_vrachi', $term); ?> <?php if ( $opytnye_vrachi ) : ?> <?php foreach ( $opytnye_vrachi as $post ) : ?> <?php setup_postdata ( $post ); ?> <? require get_template_directory() . '/inc/doctors-item.php'; ?> <?php endforeach; ?> <?php wp_reset_postdata(); ?> <?php endif; ?>
И теперь нужно вывести всё то же самое в записях рубрик, но через наследование, а не через заполнение. Возможно ли это?
Дополнительно:
Как-то так (код не проверялся, само собой разумеется)
<?php $categories = get_the_category(); foreach($categories as $term) { # ваш скрипт $opytnye_vrachi = get_field( 'opytnye_vrachi', "category_$term->term_id"); if ( $opytnye_vrachi ) { foreach ( $opytnye_vrachi as $post ) { setup_postdata ( $post ); require get_template_directory() . '/inc/doctors-item.php'; } wp_reset_postdata(); } # / ваш скрипт } ?> |
<?php $categories = get_the_category(); foreach($categories as $term) { # ваш скрипт $opytnye_vrachi = get_field( 'opytnye_vrachi', "category_$term->term_id"); if ( $opytnye_vrachi ) { foreach ( $opytnye_vrachi as $post ) { setup_postdata ( $post ); require get_template_directory() . '/inc/doctors-item.php'; } wp_reset_postdata(); } # / ваш скрипт } ?>
И я бы не называл это наследованием, ибо WP_Post и WP_Term слишком дальние родственники.
UPD Код слегка изменен по результатам обсуждения (см. комментарии)
- Нет, к сожалению не работает. Это вы попытались вторым аргументом передать в поле ID рубрики, правильно я понял?
Но даже если вписать ID рубрики напрямую, то работать не будет. Это подход для страниц и записей. С рубриками такое не получается.
Возможно, мне стоит как раз в одной из записей каждой рубрики заполнить ACF, и подтягивать их в остальные записи этой рубрики через ID, типа get_field( 'opytnye_vrachi', 13)
Или через ACF options намудрить.
Но это придется делать 12 шаблонов записей под каждую рубрику. -
Это вы попытались вторым аргументом передать в поле ID рубрики, правильно я понял?
Это я у Вас списал )) Не ID, а WP_Term object. В доках на get_the_category() сказано, что она возвращает Array of WP_Term objects.
С рубриками такое не получается.
Пришлось курить маны :) Судя по докам, должно получиться.
В примере есть такое:
$post_id = "category_3"; // category term ID = 3
С использованием переменной получается "category_$term->term_id". Ну или как-то так. Пробуйте. - YBB, отлично, спасибо, это решение)
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

Да, ACF-поля из рубрики можно вывести в записи этой рубрики. В записи нужно получить её категории, выбрать нужную родительскую/основную рубрику и передать объект термина в
get_field(). Для ACF term meta обычно можно использовать либо объект термина, либо строку видаcategory_123.Пример для обычных рубрик:
$categories = get_the_category(get_the_ID()); if ($categories) { $term = $categories[0]; // Если нужна родительская рубрика if ($term->parent) { $term = get_term($term->parent, 'category'); } $doctors = get_field('opytnye_vrachi', $term); if ($doctors) { foreach ($doctors as $post) { setup_postdata($post); get_template_part('inc/doctors-item'); } wp_reset_postdata(); } }
Если запись может быть в нескольких рубриках, лучше не брать первую случайную. Используйте Yoast Primary Category, свою настройку “основная рубрика” или конкретный slug. Иначе при смене порядка категорий блок может начать подтягиваться не оттуда.
Для кастомной таксономии логика такая же, только вместо
get_the_category()используйтеget_the_terms($post_id, 'taxonomy_name'). Если нужно наследование по цепочке родителей, можно пройти вверх черезparent, пока не найдёте заполненное поле. Это удобно: сначала ищете поле у дочерней рубрики, если пусто — у родителя, потом у родителя выше.Чтобы наследование было управляемым, можно сделать функцию-обёртку: сначала проверять поле у записи, затем у текущей рубрики, затем у родительской рубрики. Так редактор сможет переопределить блок на конкретной записи, но по умолчанию будет подтягиваться общий блок категории.