Например, у нас есть два CPT, Книги и Авторы, и мы хотели бы сохранить метаданные Книг (т.е. parent_id, isbn, subtitle, average_rating, rating_count, publishing_date, num_pages, bisac_code, author_id и т. Д.) В настраиваемой таблице БД ». Книги », а также хранить метаданные авторов (т. Е. Количество_работ, дата_ рождения, количество поклонников, средний_ рейтинг и т. Д.) В настраиваемой таблице БД« Авторы ».
Затем мы хотели бы запросить данные следующим образом:
SELECT p.post_id, p.post_title, p.post_content, b.subtitle, b.average_rating, a.post_tile as author_name
FROM wp_posts as p
INNER JOIN books as b ON p.post_id = b.parent_id
INNER JOIN authors as a ON b.author_id = a.id
WHERE b.average_rating => 3 AND YEAR(b.publication_date) => 2007 AND bisac_code = 'FIC009050' AND a.average_rating => 3
Хранение всех метаданных CPT в wp_postmeta
не является вариантом, потому что поиск более 1 миллиона строк будет очень медленным и не масштабируется, и это причина, по которой WooCommerce также перемещает заказы и продукты в настраиваемые таблицы БД .
Смогу ли я добавить настраиваемые поля / мета-блоки к двум CPT в Гутенберге, а затем сохранить эти метаданные в настраиваемых таблицах базы данных?
Вы уже можете сделать это, не внося изменений в Gutenberg. Фактически, вы можете сделать это и без Гутенберга. Мы делаем это на наших проектах полурегулярно.
@pmgarman Да, вы уже можете сохранять метаданные CPT в пользовательских таблицах db без Гутенберга, но я совершенно уверен, что вы пока не можете сделать это с Гутенбергом.
Строительные блоки, которые хранят данные в нескольких полях CPT, можно использовать с помощью EntityProvider и хука useEntityProperty. Вы можете проверить, как работают блоки PostTitle, PostExcerpt ...
Самый полезный комментарий
@pmgarman Да, вы уже можете сохранять метаданные CPT в пользовательских таблицах db без Гутенберга, но я совершенно уверен, что вы пока не можете сделать это с Гутенбергом.