Как сделать страницу категории главной страницей блога?
Я хочу использовать страницу категории в качестве главной страницы моего блога. Возможно ли это и как это сделать? Я пробовал через правило перезаписи в .htaccess, но это не сработало.

Обновление
Исключив все остальные решения, остается как минимум одно: template_redirect
:
function wpse121308_redirect_homepage() {
// Проверяем индексную страницу блога
// НЕ главную страницу сайта,
// для которой используется is_front_page()
if ( is_home() ) {
wp_redirect( get_category_link( $id ) );
exit();
}
}
add_action( 'template_redirect', 'wpse121308_redirect_homepage' );
Вам нужно будет передать соответствующий ID категории $id
, конечно же.
Преимущество редиректа на template_redirect
в том, что загрузка шаблона происходит только один раз, вместо повторного редиректа после загрузки шаблона.
Обратите внимание, что вы можете подключиться к процессу еще раньше, например на pre_get_posts
, тем самым потенциально сохранив целый запрос к базе данных:
add_action( 'pre_get_posts', 'wpse121308_redirect_homepage' );
Исходный ответ
Если все, что вам нужно - это отображать определенную категорию на индексной странице блога, вы можете добиться этого с помощью простой фильтрации основного запроса $wp_query
через pre_get_posts
:
function wpse1862_pre_get_posts( $query ) {
// Модифицируем только основной запрос
// на индексной странице блога
if ( is_home() && $query->is_main_query() ) {
$query->set( 'category_name', 'category-slug-here' );
}
}
add_action( 'pre_get_posts', 'wpse1862_pre_get_posts' );
Если вы хотите изменить шаблон, то можете сделать одно из двух:
- Создать
home.php
с нужной разметкой - Использовать
template_redirect
илиhome_template
чтобы заставить WordPress использовать ваш шаблонcategory.php
.
Редактирование
И если вы хотите, чтобы URL индексной страницы блога выглядел как:
www.example.com/main
Тогда вы можете использовать Статическую Главную Страницу и назначить статическую страницу с названием "main" в качестве индексной страницы блога.
И если ваша цель:
Мне действительно нужен редирект. Я хочу, чтобы главная страница (
http://example.com/
) перенаправляла на страницу категории (которая выглядит какhttp://example.com/main/
)
...то принятый ответ правильный для вашего случая использования.

Извините, нет. Мне действительно нужен редирект. Я хочу, чтобы главная страница (http://example.com/
) перенаправляла на страницу категории (которая выглядит как http://example.com/main/
), потому что на сайте категории - это 'Издания' (по странам), и по умолчанию используется US (main). Жаль, что я не могу изменить описание вознаграждения, чтобы сделать это более понятным.

Вы можете отредактировать вопрос, чтобы уточнить это. И если ваш вопрос настолько отличается от оригинального, вам следовало задать собственный вопрос, а не размещать вознаграждение на этот. И ещё: почему вам нужен именно редирект? Редирект - это способ реализации, а не конечная цель. Опишите, чего вы на самом деле хотите достичь. Редирект может быть не единственным или не лучшим решением.

Страница категории не может быть главной страницей (просто так не работает).
Есть два других варианта:
- Ограничить главную страницу записями из определенной категории (похоже, но не совсем то же самое).
- Перенаправить главную страницу на фактическую страницу категории.
Поскольку вас устраивает вариант с перенаправлением, попробуйте следующее. Создайте шаблон home.php
в директории вашей темы со следующим содержимым:
<?php
wp_redirect( 'http://www.yoursite.com/category/category-slug' );
?>
Возможно, есть более аккуратный способ сделать это с помощью хуков, но я сейчас не могу придумать ничего лучше.

Спасибо, именно это я и искал. WP действительно должен лучше документировать все эти специальные PHP-файлы (например, maintenance.php).

Самый семантически правильный способ сделать это вместо использования редиректа (дополнительное время соединения) — создать пользовательский шаблон страницы.
Новая страница:
/* Имя шаблона: Новая Главная по Категории */
<?php query_posts('cat_id'=>'3');?>
<--вставить цикл-->

Если вы хотите выполнить редирект на определённую категорию, например, с ID 3, скопируйте содержимое файла category.php и создайте новый шаблон с именем category-3.php. После этого добавьте:
* Template Name: Новая главная страница для категории 3 */
<?php query_posts('cat_id'=>'3');?>
<--вставьте цикл-->
В настройках WordPress (Настройки → Чтение) необходимо установить "Главная страница" как "Последние записи", а для главной страницы выбрать шаблон "Новая главная страница для категории 3".
