Я пытаюсь скопировать содержимое из старых гибких макетов в новые гибкие макеты.Например, у меня есть два гибких макета под названием image media и один под названием video media .У каждого из них есть несколько полей, таких как галерея, заголовок, описание и т. Д. Я создал новые макеты медиа в гибком контенте, который я хотел бы скопировать весь этот контент на нескольких страницах.
Я хотел бы:
- Добавить новые строки макета
- Переместить содержимое старых макетов в новые макеты на 67 страницах.
У меня есть успешная функция PHP, которая, тем не менее, ненадежна, и я не уверен, что то, что я делаю, - лучший способ сделать то, что мне нужно.Я скопировал нижеприведенную функцию, но общее резюме того, что я делаю:
- Получите все страницы с правильным именем шаблона, используя
global $wpdb
и get_posts()
- Прокрутите поле гибкого содержимого и найдите строку макета для старого содержимого и создайте новый
array
для каждой страницы, хранящей эти данные - Передача новых данных и нового имени гибкого макета Iхочу добавить в созданную мной функцию
- Использование ACF
update_field()
для обновления 67 страниц - Затем я вызываю эту функцию с помощью
add_action( 'acf/init', 'update_acf_image_section' )
У меня проблема в том, что иногда создаются повторяющиеся строки макета, и я не достаточно уверен в этой функции, чтобы перейти к производству.
Вот пример моего кода:
add_action( 'acf/init', 'update_acf_image_section' );
function update_acf_image_section() {
$pages = get_acf_template( 'template-name', 67 ); // this uses get_posts();
$procedure_layout_key = 'field_KEY';
foreach ( $pages as $page ) {
$loop = 0;
$i = 0;
$layouts_data = get_field_object( $procedure_layout_key, $page->ID );
$image_values = false;
$image_galleries = [];
if ( have_rows( 'procedure_child_layout', $page->ID ) ) :
while ( have_rows( 'procedure_child_layout', $page->ID ) ) : the_row();
if ( 'procedure_child_media_gallery' === get_row_layout() ) {
$type = get_sub_field( 'media_type', $page->ID );
if ( 'image' === $type && 0 === $loop ) {
if ( get_sub_field( 'title', $page->ID ) ) {
$image_title = get_sub_field( 'title', $page->ID );
}
....
$image_values = array(
'acf_fc_layout' => 'image_gallery',
'image_gallery_title' => $image_title,
'image_gallery_description' => $image_descript,
'image_gallery_button_link' => $image_button_text,
'image_gallery_button_text' => $image_button_link,
'image_disclaimer_text' => $image_disclaimer,
'image_galleries' => $image_galleries,
);
$row = $i + 1;
}
}
$i++;
endwhile;
endif;
if ( $image_values && 0 ) {
get_acf_values(...); // this uses acf update_field()
}
}
}