Делаем запись в качестве главной страницы в WordPress

Сделать страницу в качестве главной для своего блога достаточно просто – через кастомайзер тем (использовать статичную страницу). Однако как быть, если дело касается записей? Как сделать запись в качестве своей главной страницы? С помощью небольшого кодирования, которое будет использовать все преимущества цепочки выполнения WordPress.

front_page_post

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

Блог про WordPress
Комментарии: 10
  1. Анатолий

    А зачем может понадобиться делать запись домашней страницей? И не проще ли просто скопировать контент в новую страницу?

    1. Дмитрий (автор)

      И делать так все время с каждой новой записью? Ну это не слишком удобно.

  2. Волшебник

    Что значит с каждой новой записью, главная страница то одна. Или тут в статье идет речь о том, последняя запись в блоге автоматом становится главной?

    1. Дмитрий (автор)

      Да. Последняя запись автоматом перебрасывается на главную, либо вместо нее используются прилепленные записи.

  3. Волшебник

    Можно сделать так: в настройках ставим отображать записи целиком, количество последних записей на главной странице — 1. Всё.

    1. Дмитрий (автор)

      Только это приведет к тому, что на всех архивных страницах будет выводиться по одной записи.

  4. investimmo.ru

    Я знал что в ВордПрессе можно делать разное, но о таком слышу впервые.

  5. Андрей

    Мне кажется, что лучше сделать на главной странице статичный текст, а не постоянно меняющиеся записи. Конечно, при этом он должен быть сео-оптимизированным и ссылающимся на важные разделы сайта. Часто такое можно встретить у тематических блогов — о строительстве, авто и т.д.

  6. Волшебник

    Я тоже так думаю, если это ИНФОРМАЦИОННЫЙ САЙТ, а не дневник по типу ежедневника, который читают друзья. Конечно сегодня WP используют не только для блогов и уже наверное не столько для блогов, сколько для сайтов. А сайту лучше иметь понятную структуру: главная страница со статичным текстом и ссылками на разделы, в разделах списки статей, а не блоговую структуру. Но на главной конечно лучше еще и вывести небольшой списочек свежих статей, для тех, кто заходит регулярно, или отдельную страницу с новостями.

  7. Andrey

    Поступил задача сделать главной страницей конкретную запись Post.
    Применил, вашу функцию. Рабочие решение нашёл только у вас.
    Спасибо!

Добавить комментарий

Получать новые комментарии по электронной почте.