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

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

Я только начинаю страницу, и для моих текущих целей, похоже, что единственное дополнительное, что мне нужно, это пара дополнительных полей для постов определенной категории. Поскольку мне нужно добавить лишь немного информации, я думаю, что было бы уместно предоставить постам, принадлежащим этой категории, пользовательские поля с помощью Advanced Custom Fields (также известного как ACF). Однако я думал, что позже я могу обнаружить, что лучше использовать пользовательские типы постов, у которых поля встроены в структуру пользовательского типа поста.

Например, предположим, что я изначально начинаю с обычных постов и назначаю им всем категорию “фильм”. Я даю каждому посту в категории фильм пользовательское поле под названием “режиссер” и заполняю его соответствующим режиссером. Затем, позже, если я хочу создать пользовательский тип поста, который имеет поле “режиссер” в качестве части создаваемого мною пользовательского типа поста, который называется “MovieType”, могу ли я легко перенести режиссеров из пользовательских полей для каждого старого “обычного поста” категории “фильм”, чтобы импортировать в новый пользовательский тип поста?

Я беспокоюсь, что экспортировать эти данные в пользовательский тип поста позже может быть не просто, и я не хочу вручную копировать/вставлять или вводить все поля из моих пользовательских полей в поля нового пользовательского типа поста.

Вопрос: каков самый простой способ преобразовать стандартные посты с пользовательскими полями в новый пользовательский тип поста и сохранить данные, изначально назначенные каждому посту из пользовательского поля, в нативное поле нового типа поста? Можно ли сделать это автоматически?

Спасибо!

Вопрос: каков самый простой способ преобразовать стандартные посты с пользовательскими полями в новый пользовательский тип поста

Нет “легкого” способа. Учтите, что все посты имеют пользовательские поля (некоторые скрыты, и WordPress добавит их). Поэтому вам нужно будет преобразовать типы постов на основе наличия / значения конкретных пользовательских полей.

Это не так просто. Это можно сделать с некоторыми навыками SQL, но не “легко”.

И импортировать/сохранить данные, изначально назначенные каждому посту из пользовательского поля в нативное поле нового типа поста? Можно ли сделать это автоматически?

Смена типа поста означает изменение столбца в таблице постов. Пока колонка идентификатора поста остается прежней, пользовательские поля в таблице метаданных останутся неизменными, так что вам не нужно ничего делать, чтобы сохранить данные, изначально назначенные каждому посту.

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

Возможно, это поможет вам с преобразованием пользовательских метаполей WP в ACF:

https://support.advancedcustomfields.com/forums/topic/help-converting-an-existing-custom-field-into-acf/

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

Автоматическое преобразование стандартных постов с пользовательскими полями в пользовательские типы постов

Введение

В процессе разработки веб-сайта на базе WordPress может возникнуть необходимость адаптации структуры данных, чтобы лучше соответствовать требованиям проекта. Например, вы можете начать с обычных постов, добавляя пользовательские поля, такие как "режиссер" для постов в категории "фильм". В дальнейшем, как только ваши нужды станут более сложными, может возникнуть желание перейти на пользовательский тип поста, который будет обладать встроенными полями и лучшей организацией данных.

В самом начале важно понимать, что процесс автоматического преобразования стандартных постов с пользовательскими полями в пользовательские типы постов не является тривиальной задачей. Однако, с правильным подходом, это можно сделать эффективно.

Как провести автоматическое преобразование

  1. Создание пользовательского типа поста
    Первым шагом является создание нового пользовательского типа поста, например, "MovieType". Это можно сделать с помощью функции register_post_type() в файле functions.php вашей темы или с использованием плагинов для управления пользовательскими типами постов, таких как Custom Post Type UI.

    function create_movie_type() {
       register_post_type('movie',
           array(
               'labels' => array(
                   'name' => __('Movies'),
                   'singular_name' => __('Movie')
               ),
               'public' => true,
               'has_archive' => true,
           )
       );
    }
    add_action('init', 'create_movie_type');
  2. Перенос данных из пользовательских полей
    После создания нового типа поста следующим шагом будет перенос данных из пользовательских полей, которые вы ранее создали для стандартных постов, в новое структуру. Это можно сделать с помощью SQL-запросов.

    Пример SQL-запроса для изменения типа поста и копирования значений пользовательских полей:

    -- Обновление типа поста
    UPDATE wp_posts 
    SET post_type = 'movie' 
    WHERE post_type = 'post' AND ID IN (
       SELECT post_id
       FROM wp_postmeta
       WHERE meta_key = 'your_custom_field_director' AND meta_value IS NOT NULL
    );
    
    -- Перенос значений пользовательского поля в новое поле
    INSERT INTO wp_postmeta (post_id, meta_key, meta_value)
    SELECT post_id, 'director', meta_value
    FROM wp_postmeta
    WHERE meta_key = 'your_custom_field_director';
  3. Подтверждение результата
    После выполнения запросов необходимо проверить, что данные перенесены корректно и формат нового типа поста соответствует ожиданиям. Это можно сделать, просмотрев записи в админке WordPress или с помощью SQL-запросов для учета данных.

Автоматизация процесса

Для автоматизации процесса вы можете создать специальный плагин или использовать сценарий, который будет выполнять вышеуказанные SQL-запросы. Это значительно упростит процесс, избавив вас от ручного копирования данных.

Заключение

Перевод стандартных постов с пользовательскими полями в новый пользовательский тип поста в WordPress — это процесс, требующий некоторых технических знаний, особенно в работе с SQL. Однако, с пониманием основ и правильными инструментами, такими как функции WordPress и SQL-запросы, вы можете эффективно управлять изменениями данных на своем сайте.

Соблюдение данной процедуры позволит вам не только сохранить все данные, но и оптимизировать структуру вашего проекта, что будет способствовать более эффективному управлению и будущему расширению вашего веб-сайта.

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

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