Создание пользовательского шаблона страницы блога правильным способом
Я хочу создать новый пользовательский шаблон страницы для отображения записей блога. Я понимаю, что когда вы назначаете страницу для отображения записей через Настройки > Чтение, WordPress автоматически назначает шаблон home.php для отображения контента этой страницы (а именно записей). При этом опция выбора шаблона страницы в редакторе страницы исчезает.
Сейчас записи отображаются в стандартном постатейном виде. Я хочу предоставить администратору возможность выбрать другой шаблон, который мог бы стилизовать блог в виде сетки или masonry-раскладки. Я не уверен, как это правильно реализовать.
Я мог бы сделать это не назначая страницу для отображения блога в Настройки > Чтение, а затем позволить администратору выбирать конкретный шаблон через меню Атрибуты страницы в редакторе. Но согласно https://make.wordpress.org/themes/2014/06/28/correct-handling-of-static-front-page-and-custom-blog-posts-index-template/, это НЕПРАВИЛЬНЫЙ способ.
Я пытался искать решения в Google, но все, что нахожу - это рекомендации по использованию плагинов. Может кто-то подскажет полезные ресурсы?

Не забывайте, что WordPress изначально разрабатывался как CMS для блогов, поэтому при разработке тем разработчики часто выбирают нестандартный подход в обмен на возможность реализации большего количества функций.
Разработчики тем имеют три варианта при решении этого вопроса, один из которых (#2 ниже) вы упомянули.
Прямое редактирование
index.php
для изменения индекса блога. Это не лучший вариант, потому чтоindex.php
должен быть резервным файлом на случай отсутствия других частей вашего шаблона.- Плюсы: быстро и просто
- Минусы: подвержено ошибкам и противоречит принципам объектно-ориентированного программирования
Создание шаблона страницы для индекса блога. Как вы сказали, многие разработчики тем выбирают этот путь, потому что это быстрый способ получить контроль над индексом блога и даже позволяет экспериментировать с разными шаблонами индекса блога (что полезно при разработке универсальной темы).
- Плюсы: Универсальность, возможность создания мощной темы
- Минусы: вы теряете возможность использовать нативную функциональность WordPress, связанную с индексом блога.
Создание файлов
front-page.php
,home.php
иindex.php
в вашей теме.front-page
будет домашней страницей темы.home
будет использоваться по умолчанию для индекса блога, аindex
станет резервным файлом для всех шаблонов.- Плюсы: Чистота и полное использование нативных объектов и методов WordPress
- Минусы: Ограничения WordPress: не идеально подходит для многих современных тем с богатыми возможностями
Лично я предпочитаю вариант #2, потому что большинство моих проектов на WordPress в последнее время — это не просто блоги: это целые сайты с глубокой информационной архитектурой и сложной интерактивностью.

Документация по этой функциональности: https://developer.wordpress.org/themes/basics/template-hierarchy/#home-page-display

В своем ответе я затрону несколько аспектов. :)
Если вы создаете собственную тему и хотите изменить стандартное отображение некоторых типов страниц (например, страницы архива категории или страницы отдельного поста в блоге), ознакомьтесь с диаграммой иерархии шаблонов WordPress. На ней показано, какие файлы в вашей теме используются для отображения различных типов записей.
Если в вашей теме есть PHP-файл, соответствующий файлу в этой иерархии, WordPress автоматически будет его использовать — например, файл single.php
для отображения отдельного поста. Если в вашей теме уже есть такой файл, вы можете изменить его, и эти изменения отразятся на сайте.
Если же вы хотите создавать пользовательские шаблоны страниц, но чтобы администратор мог изменять их только для отдельных записей, вам потребуется проверка ролей и возможностей; может быть полезен этот ответ на StackExchange. (Вам все равно нужно будет создать эти пользовательские шаблоны страниц, см. эту статью в Smashing Magazine).
Если же вы хотите, чтобы администратор мог глобально выбирать шаблоны страниц/записей на основе определенных критериев или назначать пользовательские шаблоны для всего сайта, вам потребуется добавить опцию в админ-панель вашей темы и пользовательский код для отображения нужной страницы в зависимости от этой опции. Добавить опцию в админ-панель можно с помощью одного из множества плагинов, но также это можно сделать вручную (см., например, эту статью на SitePoint).

Спасибо за ответ. Я знаю, как создавать шаблоны страниц для отдельных страниц/записей на основе иерархии, но не могу понять, как предоставить варианты шаблонов для "Главной страницы блога", которая использует home.php (использую ту же терминологию, что и в предоставленной вами схеме). Это настраивается, когда администратор выбирает страницу для отображения записей в Панель управления → Настройки → Чтение. После этого странице назначаются шаблоны home.php/index.php. Я не могу найти способ создать альтернативный шаблон без отмены назначения страницы в Панель управления → Настройки → Чтение.

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

Хорошо, вы хотите создать свою собственную шаблонную страницу для отображения записей блога, верно?
Тогда сделайте следующее: создайте PHP-файл с именем blog-template.php
Внутри этого файла в самом начале добавьте этот код:
<?php
/*
* Template Name: Записи блога
*/
?>
Затем ниже этого кода вставьте весь ваш код из файлов index.php
или home.php
в этот новый файл, сохраните его. Теперь создайте страницу через админ-панель
, например, назовите её "Блог"
. Справа выберите шаблон страницы
, который мы только что создали — Записи блога
из выпадающего списка шаблонов.
Опубликуйте страницу, и теперь у вас есть собственная страница для отображения записей.
Дайте знать, если вам что-то ещё понадобится.

Хорошо, вы просто перефразировали решение, которое автор вопроса явно указал как неправильное ;) Создание шаблона страницы и использование его в качестве индексной страницы блога — не самый лучший подход, я думаю.
