Как можно автоматически передать значения полей ACF с родительской рубрики во всех дочерних записях?

Можно ли наследовать заполненные поля Advanced Custom Fields (ACF) из рубрик в записи?
Хочу убедиться, что я правильно вывожу поля в рубрике:

```
<?php $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; ?>
```

И теперь мне нужно вывести те же поля в записях рубрик, наследуя их, а не заполняя. Возможно ли это?
  • 2 октября 2023 г. 8:57
Ответы на вопрос 2
Да, вы можете наследовать значения полей Advanced Custom Fields (ACF) из родительской рубрики и использовать их в дочерних записях. Вот пример того, как это можно сделать:

1. Добавьте следующий код в файл functions.php вашей темы:

```php
/**
 * Наследование полей ACF из рубрики для дочерних записей
 */
function inherit_acf_fields_from_category($post_id) {
    // проверяем, является ли запись дочерней для рубрики
    if (is_category() && $post_id) {
        // получаем текущую рубрику
        $category = get_queried_object();
        // получаем значения полей ACF для текущей рубрики
        $custom_fields = get_fields($category);
        
        // обновляем значения полей ACF для дочерних записей
        if ($custom_fields) {
            foreach ($custom_fields as $key => $value) {
                update_field($key, $value, $post_id);
            }
        }
    }
}
add_action('acf/save_post', 'inherit_acf_fields_from_category', 20);
```

2. После добавления этого кода все значения полей ACF из рубрики будут автоматически передаваться в дочерние записи при сохранении записи.

3. Теперь вы можете использовать значения полей ACF из рубрики в дочерних записях, используя функцию `get_field()`. Например:

```php
<?php $opytnye_vrachi = get_field('opytnye_vrachi'); ?>

<?php if ($opytnye_vrachi) : ?>
    <?php foreach ($opytnye_vrachi as $post) : setup_postdata($post); ?>
        <?php require get_template_directory() . '/inc/doctors-item.php'; ?>
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
<?php endif; ?>
```

Обратите внимание, что в этом случае мы не передаем второй аргумент в функцию `get_field()`, так как она автоматически загрузит значения полей ACF из текущей записи.
 - "Проверка кода не была выполнена, учитывая это, код может выглядеть следующим образом:"
 ```php
 
 ```
 - "Нет нужды называть это наследованием, поскольку объекты `WP_Post` и `WP_Term` слишком далекие родственники."
Похожие вопросы