MySQL запрос WordPress. Получить все публикации

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». Потому что картинка к публикации может быть одна, поэтому нет смысла нагружать базу больше необходимого.



2017-07-08T17:42:45
Веб сайты