ACF Обновить несколько полей и несколько сообщений - PullRequest
0 голосов
/ 19 февраля 2019

Я пытаюсь скопировать содержимое из старых гибких макетов в новые гибкие макеты.Например, у меня есть два гибких макета под названием image media и один под названием video media .У каждого из них есть несколько полей, таких как галерея, заголовок, описание и т. Д. Я создал новые макеты медиа в гибком контенте, который я хотел бы скопировать весь этот контент на нескольких страницах.

Я хотел бы:

  1. Добавить новые строки макета
  2. Переместить содержимое старых макетов в новые макеты на 67 страницах.

У меня есть успешная функция PHP, которая, тем не менее, ненадежна, и я не уверен, что то, что я делаю, - лучший способ сделать то, что мне нужно.Я скопировал нижеприведенную функцию, но общее резюме того, что я делаю:

  1. Получите все страницы с правильным именем шаблона, используя global $wpdb и get_posts()
  2. Прокрутите поле гибкого содержимого и найдите строку макета для старого содержимого и создайте новый array для каждой страницы, хранящей эти данные
  3. Передача новых данных и нового имени гибкого макета Iхочу добавить в созданную мной функцию
  4. Использование ACF update_field() для обновления 67 страниц
  5. Затем я вызываю эту функцию с помощью 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()
        }
    }
  }
...