Кнопка случайного поста
21-06-2010Многие хотят поставить ссылку (кнопку) на случайный пост в сйдбаре, но не знают с чего начать. Сейчас я попытаюсь показать вам как это реализовать на WordPress.
Как наверное многие уже знают, WordPress хранит посты в базе данных MySQL. Чтобы получить URL случайного поста из базы данных, нам нужно составить запрос к MySQL базе. На самом деле это не так сложно как может казаться, спасибо WPDB, за класс базы данных который идет с WordPress, благодаря этому классу нам не надо беспокоится о имени базы, пароле, соединении с базой и т.д. Нам всего лишь нужно отправить запрос и получить результат.
MySQL запрос
Наш запрос к базе должен просмотреть таблицу постов и выбрать случайным образом один из опубликованных. Запрос будет выглядеть примерно так:
SELECT guid FROM wp_posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY RAND() LIMIT 1
Теперь пояcним:
1. SELECT guid – выбираем значение столбца guide, которая содержит URL к текущему посту.
2. FROM wp_posts – здесь указываем таблицу постов(в данном случае префикс wp_).
3. WHERE post_type=’post’ – так как вложения также сохраняются в таблице постов, мы должны указать что нам нужны только посты
4. AND post_status=’publish’ – выбираем только из опубликованных постов.
5. ORDER BY rand() – упорядочиваем их в случайном порядке.
6. LIMIT 1 – и выводим первый пост
PHP код
Теперь напишем PHP код. Как я уже говорил будем использовать WPDB класс, который встроен в WordPress. Это наш код:
$randomPost = $wpdb->get_var("SELECT guid FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY rand() LIMIT 1");
echo '<a href="'.$randomPost.'">Random Post</a>';
В первой строке кода, мы запускаем запрос используя WPDB функцию get_var(), и сохраняем результат в переменной $randomPost. Затем на следующей строке выводим ссылку, то есть мы создаем простую ссылку и вместо url записываем наш результат(случайный пост)
Отмечу в PHP коде я использовал $wpdb->posts вместо wp_posts. Так как wp_ это префикс который при установке мы можем и опустить или поменять, то есть не у всех такой префикс, $wpdb->posts выбирает нужную таблицу не зависит от префикса. Вот и все.


