Получить изображение записи

6 июл. 2012 г., 23:45:43
Просмотры: 25.1K
Голосов: 10

Мы разрабатываем приложение для Android на основе базы данных MySQL WordPress. Нам удалось получить большую часть информации из базы данных для отображения в приложении. Теперь осталось только получить изображение записи.

Есть ли способ получить URL изображения записи?

Спасибо!

0
Все ответы на вопрос 6
0
17

Идентификатор вложения миниатюры записи хранится в таблице post_meta с meta_key _thumbnail_id.

Используйте этот ID записи, чтобы найти метаданные записи с meta_key _wp_attachment_metadata.

Значение представляет собой сериализованный массив с ключами thumb, file, width, height, sizes (массив) и image_meta (массив).

Значение file указывает на оригинальное изображение в полном размере относительно директории загрузок WordPress. На основе этого можно вычислить URL изображения.

sizes содержит ключи с размерами изображения (например, 'small', 'medium', 'large', 'thumbnail'), а значением является массив с ключами file, height и width.

image_meta содержит метаданные изображения, такие как exif/iptc, извлеченные из самого изображения.

7 июл. 2012 г. 01:25:09
4

Миниатюра записи хранится в таблице {$wpdb->prefix}_postmeta с ключом _thumbnail_id.

Пример запроса:

SELECT * from {$wpdb->prefix}_posts 
WHERE ID in (
   SELECT meta_value FROM {$wpdb->prefix}_postmeta 
   WHERE meta_key = '_thumbnail_id'
   AND post_id = ':ID'
);

Замените :ID на идентификатор записи.

Этот запрос вернёт саму запись изображения — поле post_title будет содержать заголовок, который пользователь указал в атрибуте title изображения, а guid будет содержать URL изображения в полном размере.

Если вам нужны другие размеры, вам нужно посмотреть значение метаполя _wp_attachment_metadata, которое содержит сериализованный массив со всеми доступными размерами.

Использование WordPress API значительно проще:

<?php
if(has_post_thumbnail($some_post_id))
{
   $img = wp_get_attachment_img_src(get_post_thumbnail_id($some_post_id), 'the_image_size');
   // возвращает массив, первый элемент — URL изображения
   echo $img[0];
}
7 июл. 2012 г. 00:07:41
Комментарии

Не полагайтесь на поле guid как на URL... оно предназначено для уникального идентификатора, а не для ссылки.

EAMann EAMann
7 июл. 2012 г. 00:14:41

Хорошее замечание! Есть ли поле, которое хранит фактический URL изображения вне поля postmeta _wp_attachment_metadata?

chrisguitarguy chrisguitarguy
7 июл. 2012 г. 00:15:46

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

Martin Hasan Martin Hasan
7 июл. 2012 г. 00:18:40

Посмотрите на wp_get_attachment_url() и как она формирует URL для прикрепленных изображений на основе ID...

EAMann EAMann
7 июл. 2012 г. 00:27:54
0

Изображение записи (featured image) - это обычное вложение (attachment) к записи. Поэтому, как и с любым другим вложением-изображением, вам нужно выполнить запрос к таблице wp_posts для типа записи attachment. Основная хитрость заключается в том, чтобы сначала получить ID вложения, которое нужно извлечь.

Эта информация содержится в метаданных указанной записи, конкретно в метаполе _thumbnail_id.

Таким образом, вам понадобится запрос, который:

  1. Извлекает значение с ключом _thumbnail_id из таблицы wp_postmeta на основе заданного ID записи.
  2. Извлекает вложение из таблицы wp_posts по ID, полученному в шаге №1
  3. Генерирует постоянную ссылку (permalink) для вложения на основе информации, полученной в шаге №2

Хотя, по правде говоря, вы делаете много лишней работы, изобретая велосипед...

7 июл. 2012 г. 00:00:14
0

Вот что я использовал для получения данных записи, URL миниатюры и деталей изображения (таких как размеры):

SELECT p.*, ( SELECT guid FROM wp_posts WHERE id = m.meta_value ) AS imgurl,  (SELECT meta_value FROM wp_postmeta pm WHERE meta_key='_wp_attachment_metadata' AND pm.post_id=m.meta_value ) AS imgdetails
FROM wp_posts p
LEFT JOIN  wp_postmeta m ON(p.id = m.post_id AND m.meta_key =  '_thumbnail_id' )
WHERE p.post_type =  'post'
AND p.post_status =  'publish' AND p.id=@postId;
20 мар. 2018 г. 12:15:54
0

Используйте следующий запрос для получения миниатюр всех записей:

SELECT result.post_parent, result.guid AS featuredImage
FROM wp_posts AS p 
INNER JOIN wp_postmeta AS pm ON p.ID=pm.post_id
INNER JOIN wp_posts as result ON pm.meta_value = result.ID
WHERE pm.meta_key = '_thumbnail_id' AND p.post_type='post' AND 
p.post_status = 'publish'
28 мая 2017 г. 20:29:25
1

Лучшее SQL-решение,

Поиск ID из wp_post

SELECT * FROM wp_posts WHERE post_status='publish'

Найти мета-контент

SELECT * FROM wp_postmeta WHERE meta_key='_thumbnail_id' AND post_id=MyID

С ID миниатюры, ищем файл еще раз в wp_postmeta

SELECT * FROM wp_postmeta WHERE meta_key='_wp_attached_file' AND post_id=MyID

Вот один пример.

$query = mysql_query("SELECT * FROM wp_posts WHERE post_status='publish' ORDER BY id DESC LIMIT 6") or die(mysql_error());
    $json='{ "Blog" : [ ';
    while($row =mysql_fetch_array($query)){

        $queryMeta=mysql_query("SELECT * FROM wp_postmeta WHERE meta_key='_thumbnail_id' AND post_id=$row[ID]") or die(mysql_error());

        $f=mysql_fetch_array($queryMeta);

        $value=$f[meta_value];

        $queryMeta2=mysql_query("SELECT * FROM wp_postmeta WHERE meta_key='_wp_attached_file' AND post_id=$value") or die(mysql_error());

        $f2=mysql_fetch_array($queryMeta2);

        $value=$f2[meta_value];

        $json.='{"id" : "'.$row[ID].'" , "date" : "'.$row[post_date].'", "title" :"'.$row[post_title].'", "link" : "'.$row[guid].'" , "image" :"https://dartesanos.com/blog/wp-content/uploads/'.$value.'" },';

    }
    $json=substr($json,0,-1);

    echo $json ."]}";
1 сент. 2017 г. 04:49:09
Комментарии

Лучше использовать json_encode(), $row[post_date] может вызывать уведомления/предупреждения, так как ключ не заключен в кавычки

Svetoslav Marinov Svetoslav Marinov
8 апр. 2020 г. 16:32:38