Делаем запись в качестве главной страницы в WordPress
Сделать страницу в качестве главной для своего блога достаточно просто – через кастомайзер тем (использовать статичную страницу). Однако как быть, если дело касается записей? Как сделать запись в качестве своей главной страницы? С помощью небольшого кодирования, которое будет использовать все преимущества цепочки выполнения WordPress.
The Great Discontent – прекрасный журнал, включающий в себя увлекательные интервью с разными людьми.
Одна из особенностей дизайна, которая меня заинтриговала в данном сайте – то, что на нем используется последняя запись в качестве главной страницы. Именно длинная запись, которая была опубликована последней.
В WordPress указанная функциональность не заложена. Через кастомайзер в разделе Параметры Чтения можно легко задать статичную страницу в качестве главной, что, однако, неосуществимо в случае с записью.
Таким образом, если вы желаете сделать вашу запись главной страницей, то в таком случае вам понадобится обратиться к написанию кода – к счастью, фрагмент кода не слишком большой. Добавьте его либо в виде плагина (как это и реализовано в коде), либо просто возьмите функцию и вставьте ее в functions.php:
<?php /* Plugin Name: Post Front Page Plugin URI: http://premium.wpmudev.org Description: Allows a post (not page) to become the front page of a WordPress site Author: Chris Knowles Version: 1.0 Author URI: http://twitter.com/ChrisKnowles */ // intercept the main query function pfp_pre_get_posts ( $query ) { // only interested in home page and the main query if ( !$query->is_home() || !$query->is_main_query() ) return; // default args - most recent post $args = 'posts_per_page=1&order=DESC&orderby=date&ignore_sticky_posts=true'; // check for sticky posts $sticky = get_option( 'sticky_posts' ); // have sticky posts so use them if ( $sticky != '' ) { $args = 'p=' . $sticky[0]; } // clear the current query $query->init(); // parse in the new arguments $query->parse_query( $args ); } add_action( 'pre_get_posts' , 'pfp_pre_get_posts' ); ?>
Код подцепляется к действию pre_get_posts, чтобы сбросить запрос, получающий записи. Делается это только в том случае, если страница является домашней и если это основной запрос – все ваши меню и виджеты останутся неприкосновенными.
Функция сначала попытается использовать любые «прилепленные» записи; если таких нет, то она просто возьмет самый последний пост.
Простота кода связана с цепочкой событий WordPress. Запрос изменяется еще до того, как WordPress определит, какой шаблон использовать для вывода страницы, таким образом, когда запрос меняется на получение отдельной записи, то автоматически выбирается шаблон отдельной записи для построения вывода.
Естественно, есть и другие способы добиться того же самого результата. Вы можете использовать статичную страницу, и либо внедрить шорткод, чтобы получить контент записи, либо создать отдельный шаблон для получения контента; также вы могли бы использовать иерархию шаблонов WordPress и создать файл home.php для вашей темы, который будет получать соответствующий контент.
Однако ни один из этих способов не выглядит таким же элегантным, как плагин выше.
P.s. Если вам требуется уже готовое решение, то можете воспользоваться плагином: http://wordpress.org/plugins/mpress-custom-front-page/. Данный плагин работает в том числе и в мультисайтовых сетях.
Источник: premium.wpmudev.org/blog