В чем разница между вложением в wp_posts и вложением в wp_postmeta?

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

Вопрос в том, почему? Каковы различия между этими записями? Это дублирование / избыточность в хранении данных?

Возьмем post_id=16 как снимок снизу. Мы увидим, как показано ниже.

  1. В таблице wp_posts id = 16 имеет post_type = attachment и его направляющие точки к изображению T1_front_1.jpg .

введите описание изображения здесь

  1. В таблице wp_postmeta одна с post_id = 16 также принимает meta_key как _wp_attachment_file и meta_value указывает на одно и то же изображение T1_front_1.jpg .

введите описание изображения здесь

Solutions Collecting From Web of "В чем разница между вложением в wp_posts и вложением в wp_postmeta?"

Вложение это сообщение

Таблица сообщений содержит информацию о сообщении вложения.

В WordPress каждый загруженный носитель имеет собственную запись, где post_type – это 'attachment' а post_status'inherit' .

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

Это включает WP_Query , get_posts() и get_post() .

Что находится в таблице posts

Для каждого прикрепленного сообщения

  • post_title используется для заголовка приложения
  • post_excerpt используется для прикрепления надписи
  • post_content используется для описания вложения

Обратите внимание, что тип записи вложения может иметь post_parent который указывает на идентификатор сообщения, в которое было добавлено приложение.

Например:

 get_posts( 'post_type=attachment&post_parent=10' ); 

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

Вложение – это не только сообщение

Однако есть информация для носителей (особенно изображений), которые просто не соответствуют таблице сообщений.

Вся эта информация хранится в таблице postmeta, где столбец post_id ссылается на строку вставки в таблице сообщений.

Что находится в таблице postmeta

Например, атрибут "alt" хранится в мета-поле, которое имеет ключ '_wp_attachment_image_alt' .

Мета-поле с ключом '_wp_attached_file' содержит относительный путь (в папку содержимого) загруженного файла.

Это используется для создания URL и пути вложения в таких функциях, как wp_get_attachment_url() , wp_get_attachment_image_src() , get_attached_file() и т. Д.

Наконец, поле '_wp_attachment_metadata' содержит различную информацию (в сериализованном массиве в базе данных):

  • Размер изображения (по 'width' клавиш и 'height' )
  • Информация о промежуточных размерах

Промежуточные размеры

Фактически, каждый раз, когда изображение загружается, WordPress создает разные копии изображения разных размеров.

Пожалуйста, прочитайте этот ответ для получения более подробной информации.

Ключевые "sizes" в поле '_wp_attachment_metadata' содержат массив с информацией обо всех сгенерированных изображениях: созданный файл, размер (ширина и высота) и т. Д.

Обратите внимание, что предпочтительный способ получения информации из '_wp_attachment_metadata' не использует общий get_post_meta() а конкретный wp_get_attachment_metadata() , поскольку он запускает фильтр.

Если вас интересует информация об определенном сгенерированном изображении, функция image_get_intermediate_size() будет image_get_intermediate_size() .

Использовать определенные функции

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

В WordPress есть много функций для работы с вложениями, это должно дать вам представление …

Однако основные функции перечислены в этом ответе.

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

благодаря

Вложение в wp_post показывает заголовок, время, автор и т. д.

wp_postmeta показывает вложение всех других деталей, например, вложение – это текст, pdf, изображение и т. д., поэтому он имеет разные метаданные для разных типов сообщений.

благодаря