我正在尝试将内容从旧的灵活布局复制到新的灵活布局。例如,我有两种灵活的布局,分别称为图像媒体和一种名为视频媒体。它们每个都有多个字段,例如画廊,标题,描述等。我在灵活的内容中创建了新的新媒体布局,我想在所有页面上复制所有这些内容。
我想:
我有一个成功的PHP函数,但是该函数不可靠,而且我不确定我在做什么是执行所需工作的最佳方法。我已经复制了下面的函数,但是对我正在做的事情进行了概括:
global $wpdb
和get_posts()
来获取所有具有适当模板名称的页面array
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()
}
}
}