Импорт динамических полей с несколькими строками из Google Sheets в Jet Engine CPT с использованием WP All Import [закрыто]

Вопрос или проблема

Я импортирую данные из Google Sheets в пользовательский тип записи JetEngine через WP All Import. Мои данные включают поля с повторением (в данном случае “точки” с подполями, такими как заголовок, описание, адрес, телефон, веб-сайт и код встраивания Instagram).

Текущая структура (одна колонка на подполе — использование новых строк вместо разделителя):

Вместо объединения нескольких элементов с повторением в одну ячейку с использованием символа вертикальной черты (|), мой текущий лист использует несколько строк на каждую запись. Название записи появляется только в первой строке для каждой записи, а для дополнительных элементов с повторением ячейка с названием записи остаётся пустой.

Например:
enter image description here

Проблема:

WP All Import и JetEngine работают хорошо, когда все данные с повторением объединены в одной колонке с разделителем, но для лучшего управления данными мне необходимо использовать несколько строк/колонок. Задача заключается в том, что количество элементов с повторением варьируется для каждой записи (некоторые записи имеют 2 элемента, другие 3, 5 или даже 50).

Мне нужно динамическое решение, которое либо:

  • Позволяет WP All Import обрабатывать эту многострочную структуру в одно поле с повторением для JetEngine
  • Позволяет мне предобработать данные так, чтобы несколько строк (с пустыми ячейками названия записи) были объединены в ожидаемый формат с повторением во время импорта.

Любые идеи или пример кода для работы с этой динамической структурой полей с повторением будут очень полезны.

.

Ответ или решение

Импорт данных из Google Sheets в пользовательский тип записи (CPT) JetEngine с использованием WP All Import, особенно в случае работы с динамическими мультистрочными полями-репитерами, представляет собой специфическую задачу, требующую тщательной работы и понимания процесса. Это может быть сложной задачей, особенно когда количество элементов репитера варьируется от поста к посту. В данном случае, данные о каждом элементе репитера, включая такие подполях как название, описание, адрес, телефон, вебсайт и код для встраивания Instagram, представлены в разных строках на одном листе Google Sheets.

Теория

WP All Import — мощный инструмент для импорта данных в WordPress из различных источников, включая файлы CSV и Google Sheets. Он особенно полезен в контексте сложных структур данных, таких как JetEngine, который позволяет создавать обширные системы на базе CMS WordPress с кастомными полями и повторяющимися структурами данных (репитер-филдами).

Основная сложность данного случая заключается в корректной интерпретации многострочной структуры данных Google Sheets как одного непрерывного набора данных для поля репитера JetEngine. По умолчанию WP All Import ожидает, что все данные репитера будут объединены в одну колонку, разделенные специальным символом или делимитером (например, вертикальной чертой " | ").

Пример

Ваш нынешний подход заключается в хранении данных в формате, где каждая строка представляет отдельный элемент репитера для одного и того же поста, а название поста указывается только в первой строке. Это создает проблемы для WP All Import, который не может по умолчанию распознать принадлежность строк к одному посту.

Возможный пример данных может выглядеть следующим образом:

Post Title Title Description Address Phone Website Instagram Code
Post 1 Item 1 Desc 1 Addr 1 Phone1 Site 1 Code 1
Item 2 Desc 2 Addr 2 Phone2 Site 2 Code 2
Post 2 Item 1 Desc 1 Addr 1 Phone1 Site 1 Code 1
Item 2 Desc 2 Addr 2 Phone2 Site 2 Code 2

Такая структура затрудняет импорт, потому что WP All Import считает отсутствие заголовка за окончание предыдущего набора данных.

Применение

Для решения этой проблемы вам потребуется промежуточная обработка данных, чтобы превратить их в нужный формат перед импортом в WordPress. Вот один из подходов к решению этой задачи:

Шаги:

  1. Скрипт предобработки данных:

    Можно использовать скрипт на Python или PHP для обработки данных Google Sheets и приведения их в желаемый формат CSV, где каждый элемент репитера будет представлен в одной строке и разделен нужным делиметром.

  2. Конкатенация строк:

    Скрипт должен считывать данные из Google Sheets, следить за изменениями в колонке Post Title и, при обнаружении пустой строки, сохранять данные в буфер, добавляя их к предыдущей строке до тех пор, пока не встретится новая запись в Post Title.

  3. Импорт с использованием WP All Import:

    После получения правильно структурированных данных их можно импортировать в JetEngine с помощью WP All Import, используя предварительный делиметр для полей репитера.

import csv

def process_google_sheet_data(input_file, output_file):
    with open(input_file, mode='r', encoding='utf-8') as csvfile:
        csvreader = csv.DictReader(csvfile)
        processed_rows = []
        current_post = {}

        for row in csvreader:
            if row['Post Title']:
                if current_post:
                    processed_rows.append(current_post.copy())
                current_post = {key: row[key] for key in row if key}

            # Concatenate data for repeater fields
            delimiter = "|"
            for key in row:
                if key not in ['Post Title'] and row[key]:
                    if key in current_post:
                        current_post[key] += delimiter + row[key]
                    else:
                        current_post[key] = row[key]

        # Don't forget the last post
        if current_post:
            processed_rows.append(current_post)

    with open(output_file, mode='w', encoding='utf-8', newline='') as csvfile:
        fieldnames = ['Post Title', 'Title', 'Description', 'Address', 'Phone', 'Website', 'Instagram Code']
        csvwriter = csv.DictWriter(csvfile, fieldnames=fieldnames)
        csvwriter.writeheader()
        csvwriter.writerows(processed_rows)

# Usage
process_google_sheet_data('input_google_sheet.csv', 'output_wp_import.csv')
  1. Загрузка данных в WP All Import:

    После того как CSV файл будет готов, загрузите его в WP All Import. Настройте импорт так, чтобы соответствие полей происходило корректно с учетом использования делиметров.

Эти шаги помогут вам справиться с задачей импорта динамических репитер-полей в JetEngine, сохраняя при этом гибкость управляемости и простоту импорта данных из Google Sheets.

Оцените материал
Добавить комментарий

Капча загружается...