Как сделать страницу категории главной страницей блога?

15 сент. 2010 г., 20:24:24
Просмотры: 15.1K
Голосов: 5

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

0
Все ответы на вопрос 4
3
13

Обновление

Исключив все остальные решения, остается как минимум одно: 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' );

Если вы хотите изменить шаблон, то можете сделать одно из двух:

  1. Создать home.php с нужной разметкой
  2. Использовать template_redirect или home_template чтобы заставить WordPress использовать ваш шаблон category.php.

Редактирование

И если вы хотите, чтобы URL индексной страницы блога выглядел как:

www.example.com/main

Тогда вы можете использовать Статическую Главную Страницу и назначить статическую страницу с названием "main" в качестве индексной страницы блога.

И если ваша цель:

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

...то принятый ответ правильный для вашего случая использования.

5 нояб. 2013 г. 16:17:53
Комментарии

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

its_me its_me
5 нояб. 2013 г. 16:22:19

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

Chip Bennett Chip Bennett
5 нояб. 2013 г. 16:23:21

Chip, причина/сценарий использования могут быть разными, но вопрос точно такой же, поэтому я избегал создания нового вопроса. И, как видите, похожий ответ уже был опубликован (хотя с использованием query_posts, менее рекомендуемого метода).

its_me its_me
5 нояб. 2013 г. 16:24:53
2

Страница категории не может быть главной страницей (просто так не работает).

Есть два других варианта:

  1. Ограничить главную страницу записями из определенной категории (похоже, но не совсем то же самое).
  2. Перенаправить главную страницу на фактическую страницу категории.

Поскольку вас устраивает вариант с перенаправлением, попробуйте следующее. Создайте шаблон home.php в директории вашей темы со следующим содержимым:

<?php
wp_redirect( 'http://www.yoursite.com/category/category-slug' );
?>

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

15 сент. 2010 г. 20:38:12
Комментарии

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

2ndkauboy 2ndkauboy
15 сент. 2010 г. 21:59:46

Просто имейте в виду, что это почти удваивает нагрузку на сервер для главной страницы. Ядро WP запускается дважды. Может быть важным фактором, если у вас значительное количество посетителей.

Rarst Rarst
15 сент. 2010 г. 22:06:33
1

Самый семантически правильный способ сделать это вместо использования редиректа (дополнительное время соединения) — создать пользовательский шаблон страницы.

Новая страница:

/* Имя шаблона: Новая Главная по Категории */

<?php query_posts('cat_id'=>'3');?>
<--вставить цикл-->
6 янв. 2012 г. 22:39:02
Комментарии

Да, это тот самый. Загрузите этот шаблон в вашу тему. Создайте новую страницу, выберите шаблон "New Homepage by Cat". Затем перейдите в настройки > чтение > выберите "статическую страницу" > главная страница = New Homepage by Cat...

И всё готово...

inTOWN inTOWN
7 нояб. 2013 г. 20:30:06
0

Если вы хотите выполнить редирект на определённую категорию, например, с ID 3, скопируйте содержимое файла category.php и создайте новый шаблон с именем category-3.php. После этого добавьте:

    * Template Name: Новая главная страница для категории 3 */

    <?php query_posts('cat_id'=>'3');?>
    <--вставьте цикл-->

В настройках WordPress (Настройки → Чтение) необходимо установить "Главная страница" как "Последние записи", а для главной страницы выбрать шаблон "Новая главная страница для категории 3".

8 нояб. 2013 г. 12:59:14