Поддержка Проблемы и решения Работа с записями через базу

  • Здравствуйте уважаемые умельцы. Делаю на WP сайт-базу по игре, есть запись, с кастомными полями от ACF. https://prnt.sc/tfu72j
    Необходимо будет массово заполнять данные записи. Где каждая страница — это отдельное описание предмета. Планировалось это делать SQL запросом на прямую в Базу. Но когда я зашел в базу, понял, что не всё так просто будет. И если используются кастомные поля, то эти поля заносятся в wp_postmeta таблицу, при каждой новой странице. Получится, что каждая новая страница содержит около 30-40 строк в базе. А если записей будет несколько тысяч? Это же очень много… Неужели всемогущий WP не организован под подобное?
    Хотелось бы создать запрос, который будет делать автоматически новый пост с учётом всех кастомных полей.
    Какие есть решения, чтобы сделать подобное?

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Это же очень много…

    Не очень.

    Неужели всемогущий WP не организован под подобное?

    WP организован под использование API.

    Какие есть решения, чтобы сделать подобное?

    Отказаться от ACF и штатных метаданных. Сделать себе отдельную таблицу для «горизонтального» хранения атрибутов. Гибкость, в отличие от родного «вертикального» хранилища, будет близкой к нулю (alter table для каждого нового ключа), зато заполнять можно одним махом и, что более важно, фильтрация и сортировка по атрибутам будет гораздо эффективнее.

    Спасибо за развернутый ответ. То есть, вы видите это так:
    нужно сделать свою таблицу в бд. После чего, через обычный php вызывать данную информацию через select в шаблоне из файла? но тогда я не понимаю, как связать всё это с id страницы. Предположим:
    У меня есть страница в WP предмета.
    У меня есть таблица в базе данных со всей инфой.
    Есть шаблон full-iteminfo.tpl, в котором есть запрос из предыдущей таблицы, который через Select выбирает из базы данные.
    Это я все понимаю и могу сделать, в принципе.
    А дальше ступор. В WP записи имеют «Вертикальное хранилище». При этом эту страницу так просто не создать через INPUT. Мне ведь надо, чтобы по каждому итему из этой табльцы новой. Была отдельная страница. Вот как мне это связать между собой.
    Чтобы по итогу была база с предметами. И каждый предмет из таблицы был связан со страницей. Это должно быть какое то условие? Или как? Подскажите?

    через обычный php вызывать данную информацию через select в шаблоне из файла?

    Ну зачем же так грубо? Можно использовать $wpdb. Можно (и желательно) не в шаблоне, а путем модификации исходного запроса записи/записей, присоединив свою таблицу через join.

    как связать всё это с id страницы.

    (Ой как всё запущено. Почитайте что-нибудь вводное на тему «Реляционные базы данных», раз уже судьба занесла в эти дебри.) Разумеется, через связующее поле с именем post_id (чтобы в едином стиле wordpress). Данные из доп.таблицы с атрибутами могут (чтобы не сказать должны) быть получены вместе с данными из основной таблицы wp_posts. В шаблоне мы их просто выводим (например так <?= $post->weight ?>)

    Есть шаблон full-iteminfo.tpl, в котором есть запрос из предыдущей таблицы

    Так, стоп. Шаблоны предназначены только для вывода. Если в шаблоне имеется прямой запрос к БД, значит что-то где-то в проекте не учли.

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

    А мне кажется, что Вам нужно, чтобы при выводе каждой страницы были доступны данные из этой новой таблицы. Выше я предложил возможный механизм.

    Либо сложите (мысленно) всё до кучи в правильном порядке, либо, если я написал слишком заумно, забудьте всё, что я писал, и делайте по-простому, традиционно, используя какой-нибудь плагин для импорта, который разложит данные как положено в классической схеме wordpress. Слава богам, плагинов импорта более чем достаточно.

    С Вами реально связаться в каком-либо мессенджере?

    Извините, нет.

    Тогда, пожалуй, придется сложить всё до кучи в письменной форме.
    Смотрите. Имеется игра. У игры есть предметы, умения. Данный сайт — это база знаний для игроков, по этим предметам и умениям. У игры есть уже своя база данных. где хранится информация о предметах. Я могу просто выделить основные поля из таблицы и вставить их в новую таблицу. У каждого предмета есть свой ID, название, вес итд. Предметов очень много. Все записи будут исчисляться десятками тысяч страниц. Собственно записи в ручную ни кто создавать не будет. Нужно, чтобы каждая запись — выводила информацию о предмете. Например у меня есть рубрика — Оружие. В которую я делаю импорт и сразу создаются страницы ссылаясь на данные из базы данных по оружию. Есть рубрика броня — аналогично.
    Вот поэтому я думаю, что надо делать это на уже готовую структуру и поэтому начал использовать AFC… Такой огромный проект на WP делаю впервые. Поэтому и прибегаю к помощи более опытных специалистов, типа Вас.
    Как бы вы реализовали подобное?

    На данном этапе меня устраивает любой плагин, или работа через создание отдельных таблиц, как вы упоминали выше. Но я не понимаю, как тогда генерировать записи автоматически к этим всем предметам.
    Просто я импортом пробовал элементарно создать новую запись — INSERT INTO wp_posts VALUES (NULL, ‘1’, ‘2020-07-11 10:09:23’, ‘2020-07-11 07:09:23′, ’21’, ‘Item Name / Название предмета’, », ‘publish’, ‘open’, ‘open’, », ‘item-name’, », », ‘2020-07-11 10:59:05’, ‘2020-07-11 07:59:05’, », ‘0’, ‘xxxxxxxxx.com/?p=84’, ‘0’, ‘post’, », ‘0’);
    оно мне создало запись, но на страницу записи перейти не получается. страница не найдена.
    И даже если вы сейчас мне подскажите, в чем проблема с этим импортом и чего не хватает тут, то это всеравно не выход. Так как чтобы добавить один предмет — у меня выйдет вот такой запрос с AFC
    https://prnt.sc/tfys9j
    Если к этому запросу прибавить то, что будет прям очень много страниц, то база будет очень перегружена, как по мне….
    Это то, как реализовано сейчас у меня.

    Как бы вы реализовали подобное?

    Скорее всего, на фреймворке CodeIgniter (бо других вообще не знаю, а по старинке врукопашную в третьем десятилетии двадцать первого века уже не комильфо). Если «записи в ручную ни кто создавать не будет» и структура данных не очень хорошо вписывается в канон, то я не вижу смысла насиловать использовать wordpress, даже при том, что привык к нему и знаю его, как мне кажется, довольно неплохо.

    Просто я импортом пробовал элементарно создать новую запись

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

    но на страницу записи перейти не получается. страница не найдена.

    Зависит от схемы ЧПУ. У Вас что включено в настройках постоянных ссылок?

Просмотр 9 ответов — с 1 по 9 (всего 9)
  • Тема «Работа с записями через базу» закрыта для новых ответов.