WordPress — это популярный движок для создания блогов. К сожалению, его api мне плохо знаком — работаю в основном с bitrix. Поэтому в WordPress обращаюсь напрямую к базе, при необходимости что-то запрограммировать. В статье расскажу какими MySQL запросами можно получить данные публикаций с сайта на WordPress.
Задача: получить названия, тексты, картинки и url адреса всех публикаций из базы данных этого сайта на WordPress. Сразу скажу, что получать url в чистом виде не будем. Ведь ссылка на каждую статью в этом блоге имеет вид: alexgur.ru/articles/2782/ . Где последние цифры — это id статьи в базе. Поэтому задача сводится к получению названия, текста, картинки и id новости.
Текст новости, название и id из базы WordPress
Запрос к базе данных будет выглядеть так:
SELECT ID, post_title, post_content FROM wp_posts WHERE post_status=’publish’ AND post_type=’post’ ORDER BY ID ASC;
Как видно из запроса, возвращаться будут столбцы:
- ID — номер записи
- post_title — название публикации
- post_content — текст публикации
Но возвращаться должны только опубликованные статьи, а не черновики. Поэтому в запросе стоит фильтр post_status=’publish’.
Необходимо учитывать, что таблица wp_posts формируется не только из черновиков и опубликованных новостей. Поэтому в запросе установлено ограничение post_type=’post’.
Ссылка на фото к публикации из базы WordPress
Путь к картинке от публикации находится в другой таблице. Но для её получения необходимо соединить две таблицы: wp_postmeta и childmeta. И поставить условие на id поста. К счастью id был получен в предыдущем запросе.
Для получения картинки к публикации MySQL запрос будет выглядеть так:
SELECT concat((select option_value from wp_options where option_name =’siteurl’ limit 1),’/wp-content/uploads/’,childmeta.meta_value) as ‘PIC’
FROM wp_postmeta childmeta
INNER JOIN wp_postmeta parentmeta ON (childmeta.post_id=parentmeta.meta_value)
WHERE parentmeta.meta_key=’_thumbnail_id’ and childmeta.meta_key = ‘_wp_attached_file’
AND parentmeta.post_id = #id# LIMIT 1;
На последней строчке запроса стоит #id# — это id публикации, полученный в предыдущем запросе.
В конце запроса стоит ограничение на вывод: «LIMIT 1». Потому что картинка к публикации может быть одна, поэтому нет смысла нагружать базу больше необходимого.