ACF更新多个字段和多个帖子

时间:2019-02-19 02:45:03

标签: wordpress advanced-custom-fields

我正在尝试将内容从旧的灵活布局复制到新的灵活布局。例如,我有两种灵活的布局,分别称为图像媒体和一种名为视频媒体。它们每个都有多个字段,例如画廊,标题,描述等。我在灵活的内容中创建了新的新媒体布局,我想在所有页面上复制所有这些内容。

我想:

  1. 添加新的布局行
  2. 在67页上将旧版式的内容移动到新版式。

我有一个成功的PHP函数,但是该函数不可靠,而且我不确定我在做什么是执行所需工作的最佳方法。我已经复制了下面的函数,但是对我正在做的事情进行了概括:

  1. 使用global $wpdbget_posts()来获取所有具有适当模板名称的页面
  2. 浏览灵活的内容字段,找到旧内容的布局行,并为存储该数据的每个页面创建一个新的array
  3. 将要添加到我创建的函数中的新数据和新的灵活布局名称传递
  4. 使用ACF update_field()更新67页
  5. 然后我使用add_action( 'acf/init', 'update_acf_image_section' )
  6. 调用此函数

我遇到的问题是有时会创建重复的布局行,而我对此功能没有足够的信心来投入生产。

以下是我的代码示例:

  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()
        }
    }
  }

0 个答案:

没有答案