У меня есть тема, где я хочу, чтобы домашняя страница выглядела иначе, чем остальные списки сообщений. Я использовал home.php
для создания домашней страницы и предположил, что при нажатии на « Старые записи» /page/2
будет использоваться index.php
но это кажется неправильным.
Есть ли комбинация файлов тем, которые могут это сделать? или мне нужно использовать статическую страницу для моей домашней страницы с содержимым home.php
.
Моя интерпретация кода была:
example.com/
-> home.php
example.com/page/2
-> index.php
example.com/category/foo/
-> archive.php
Я думаю, что у вас есть недоразумение, что домашняя страница ( индексная страница ) находится в контексте WordPress. Домашняя страница – это главная страница сайта, по умолчанию это будет выглядеть как example.com
, и любая страница с постраничной страницей, полученная с этой домашней страницы. Таким образом, example.com/page/2
также считается главной страницей. Короче говоря, любая страница, где is_home()
возвращает true, будет домашней страницей.
По умолчанию index.php
будет использоваться для главной страницы. home.php
будет использоваться, если доступно, для страницы блога, если она установлена, когда установлена статическая передняя страница.
Если вам нужна страница с одной из главных страниц, которая будет выглядеть по-разному, чем другие страницы с постраничной страницей главной страницы, лучшим вариантом было бы создать пользовательский шаблон вне нормальной иерархии, а затем использовать фильтр home_template
для включения этого шаблона всякий раз, когда страница один просматривается на главной странице.
Давайте создадим свой собственный шаблон и назовем его index-home.php
. Это соглашение об именах уникально и не существует в нормальной иерархии, поэтому мы здесь сохраняем. Теперь нам просто нужно включить его
add_filter( 'home_template', function ( $template ) { // Only target page one if ( is_paged() ) return $template; // We are on page one of the homepage, lets locate and include our template $locate_template = locate_template( 'index-home.php' ); if ( !$locate_template ) return $template; return $locate_template; });
Вы также можете просто изменить index.php
и добавить свой собственный стиль и код для первой страницы в состоянии is_paged()
. Единственный недостаток этого может заключаться в том, что index.php
является резервным для всех страниц независимо, так что это сделало бы index.php
недопустимым беспорядок
if ( !is_paged() && is_home() ) { // Add code etc for page one homepage } else { // Add code etc for all oher pages }
Как раз последнее замечание, основной запрос все равно будет выполняться нормально. Если вам нужно изменить это, вам придется использовать pre_get_posts
для изменения поведения основного запроса