Не так давно мне понадобился способ, с помощью которого я мог бы массово проставить контент в поля ACF. На моём сайте было множество разных страниц, в которых были как обычные поля, так и поля повторителей или групп.
Способ довольно простой, поэтому делюсь им и с вами.
Начнём с повторителей и групп. К примеру, мне нужно массово проставить картинки на 100 разных страницах в одно и тоже поля повторителя. Открываем function.php и добавляем в самый низ:
function add_images_to_repeater_field_on_all_pages() {
$args = array(
'post_type' => 'page', // Укажите тип записи, к которому применяется изменение
'posts_per_page' => -1 // Получить все страницы
);
$pages = get_posts($args);
foreach ($pages as $page) {
$image_ids = array(10, 20, 30); // ID изображений, которые нужно добавить в поле повторителя
$image_data = array();
foreach ($image_ids as $image_id) {
$image_data[] = array(
'image' => $image_id // Подполе для изображения
);
}
update_field('имя_поля_повторителя', $image_data, $page->ID);
}
}
add_action('init', 'add_images_to_repeater_field_on_all_pages');
В строчке $image_ids можно указать ID изображений (изображения предварительно загружаем во встроенный медиазагрузчик WP).
В строчке update_field(‘имяполяповторителя‘, $image_data, $page->ID); указываем имя повторителя ACF.
Далее смотрим на эту строчку – ‘image’ => $image_id, тут вместо image указываем названия поля изображения в поле с повторителем. Сохраняем, и если всё сделали правильно наблюдаем результат.
Теперь аналогичный пример с текстовыми полями. Открываем function.php и добавляем туда:
function add_repeater_field_to_all_pages() {
$args = array(
'post_type' => 'page', // Укажите тип записи, к которому применяется изменение
'posts_per_page' => -1 // Получить все страницы
);
$pages = get_posts($args);
foreach ($pages as $page) {
$repeater_data = array(
array(
'sub_field_1' => 'Значение 1', // Значения для подполей
'sub_field_2' => 'Значение 2',
// Добавьте здесь другие подполя и значения
)
);
update_field('имя_поля_повторителя', $repeater_data, $page->ID);
}
}
add_action('init', 'add_repeater_field_to_all_pages');
Тут всё аналогично первому примеру. В поле update_field(‘имяполяповторителя’, $repeater_data, $page->ID); указываем названия поля повторителя, затем в этих полях:
‘sub_field_1’ => ‘Значение 1’, // Значения для подполей
‘sub_field_2’ => ‘Значение 2’,
указываем названия дочерних полей повторителя, где мы хотим проставить текст.