Поле ACF Clone - установить значение по умолчанию - PullRequest
0 голосов
/ 21 июня 2020

Я установил поле клонирования ACF под названием «NJ» в группе полей «NJ», которое клонирует все более 70 полей ACF в группе полей «Global». Эти группы полей отображаются в одном и том же настраиваемом типе сообщений.

Я хотел бы, чтобы для этих клонированных полей было задано значение по умолчанию / резервное значение, равное значению в исходном поле. Таким образом, если клонированное поле оставить пустым, по умолчанию будет использоваться значение исходного поля. Что, в свою очередь, устраняет необходимость в большом количестве условных операторов в моем коде шаблона.

Пример:

  • Группа полей 'Global'> Числовое поле: 'Всего игр'> Значение: '100'

  • Группа полей 'NJ'> Числовое поле (созданное полем клонирования): 'Всего игр'> (если значение не указано input, используйте значение из Global Field Group в том же сообщении)

Я нашел здесь пару ответов, которые копируют значения при сохранении сообщения, но это не совсем то, что я находясь в поиске. Возможно, я знаю, что это невозможно, но я буду благодарен за любой совет.

Заранее спасибо!

1 Ответ

0 голосов
/ 22 июня 2020

Итак, если у вас есть одно подполе клонирования в поле группы NJ acf, которое клонирует все 70+ выбранных подполей Global , и если вы сбросили все поля вот так ...

echo '<pre>'; print_r(get_fields()); echo '</pre>'; exit;

Что возвращает что-то вроде этого ...

Array
(
    [global] => Array
        (
            [total_games] => 24
            ...
        )

    [nj] => Array
        (
            [total_games] => 
            ...
        )

    ... 
)

Если ваша возвращенная структура массива совпадает с моей, вы можете добавить приведенный ниже код в свои функции, чтобы просто l oop через все ваши NJ клонированные подполя, проверьте, является ли текущее значение пустым, затем проверьте, есть ли у Global соответствующий ключ, если есть соответствующий ключ, получите Глобальное значение и назначьте его соответствующему NJ клонированному полю.

Когда l oop закончится, обновите поле NJ как одно большой массив при сохранении / обновлении поста (произвольный тип поста). Таким образом, возвращается ожидаемый результат в вашем сообщении.

В моем коде я проверяю тип сообщения на post. Измените post на свой собственный тип сообщения, и это должно работать.

См. Комментарии в коде ниже ...

// acf action that runs when you save post
add_action( 'acf/save_post', 'nj_empty_clone_value_check', 20 );

/**
 * @param $post_id int
 * @return void
 */
function nj_empty_clone_value_check($post_id) {

    // global post
    global $post;

    // check we are on the correct post type (currently set to post)
    if($post->post_type <> 'post') return;

    // get all the fields values from our current post
    $fields = get_fields($post_id);

    // changes check
    $changes = false;

    // for each of the cloned subfields in NJ group
    foreach ($fields['nj'] as $key => $value) {

        // if current NJ group cloned subfield value is blank
        if(!$value) {

            // check the original Global group subfield value is not blank
            if(!empty($fields['global'][$key])) {

                // update the NJ group subfield value with the Global group subfield value
                $fields['nj'][$key] = $fields['global'][$key];

                // update changes check to true
                $changes = true;

            }

        }

    }

    // if any changes have been made to NJ group
    if($changes) {

        // update NJ group field with updated NJ array data
        update_field('nj', $fields['nj'], $post_id);

    }

}
...