Перенос данных из одной группы полей ACF в другую группу полей
Как поделиться микро программкой? (если он поделится сам по себе извиняюсь, не шарю еще)
Написал небольшой скриптец, искал по форумам и пр. ничего не нашел, пришлось писать самому хочу поделиться с сообществом, WP Kama мастхев русифицированной доки для WP, поэтому считаю что мои 50 строчек кода точно кому то могут пригодиться (возможно мне по крайней мере их очень не хватало, даже GPT помочь не смог).
Суть задачки проста...
Перенести поля из одной группы полей в другую(а в моем случае повторитель из гибкого содержимого в повторитель страницы опций, но суть одна)((лично мне еще сегодня было очень актуально, т.к. данных в повторителях было на 3000+ полей и все руками переносить я бы умер, а в целом я бы руки оторвал тому кто сайт писал до меня...))
Делается в 3 шага
1) Создается файл любое_название.php в корне сайта (НЕ ТЕМЫ!)
2) Туда заливается кодик (с Вашими данными)
3) Через браузер запускается по адресу файл http://ваш-домен/любое_название.php
Сидим радуемся)
А вот и сам код:
<?php include_once($_SERVER['DOCUMENT_ROOT'].'/wp-load.php'); include_once($_SERVER['DOCUMENT_ROOT'].'/wp-admin/includes/admin.php'); $source_post_id = 7; // ID поста/страницы $flexible_field_name = 'flexible_content'; // Имя поля гибкого содержимого $techslider_layout = 'techslider'; // Название макета гибкого содержимого $slider_repeater_name = 'slider_Wateringmachine'; // Имя повторителя на странице опций $options_group_key = 'group_abcdef1234567'; // Ключ для группы полей на странице опций $options_repeater_key = 'field_66a2a873c7ffc'; // Ключ для повторителя внутри группы полей // Получаем данные из гибкого содержимого $flexible_content = get_field($flexible_field_name, $source_post_id); echo '<h2>Данные из гибкого содержимого:</h2>'; echo '<pre>' . print_r($flexible_content, true) . '</pre>'; $all_repeater_data = array(); if (!empty($flexible_content)) { foreach ($flexible_content as $layout) { if ($layout['acf_fc_layout'] === $techslider_layout) { if (isset($layout[$slider_repeater_name]) && is_array($layout[$slider_repeater_name])) { $all_repeater_data = array_merge($all_repeater_data, $layout[$slider_repeater_name]); } } } } echo '<h2>Данные из повторителя:</h2>'; echo '<pre>' . print_r($all_repeater_data, true) . '</pre>'; // Проверяем, существуют ли поля на странице опций if (have_rows($options_repeater_key, 'option')) { echo '<h2>Поле существует, удаление...</h2>'; delete_field($options_repeater_key, 'option'); } else { echo '<h2>Поле не найдено, попытка обновления...</h2>'; } // Сохраняем данные в повторителе на странице опций $result = update_field($options_repeater_key, $all_repeater_data, 'option'); if ($result) { echo '<h2>Данные успешно обновлены на странице опций.</h2>'; } else { echo '<h2>Ошибка при обновлении данных на странице опций.</h2>'; echo '<h2>Возможные проблемы:</h2>'; echo '<pre>'; var_dump($all_repeater_data); echo '</pre>'; echo '<h2>Ключ для повторителя:</h2>'; echo '<pre>' . $options_repeater_key . '</pre>'; echo '<h2>Список полей на странице опций:</h2>'; $fields = get_fields('option'); echo '<pre>' . print_r($fields, true) . '</pre>'; } echo '<h2>Данные успешно перенесены!</h2>'; ?>
Надеюсь это кому то поможет в будущем!