Последние релизы дают понять, что WordPress расширил границы своих возможностей далеко за пределы блоггинга, приобретая все больше качеств серьёзной и мощной системы по управлению контентом. Изначально, WordPress предлагает довольно поверхностный, минимальный функционал. Но простота основы с лихвой компенсируется изобилием плагинов, которые значительно увеличивают потенциал движка.
Зачастую, плагины предлагают простые решения. Но простота не всегда сестра таланта. Так, иногда они могут создавать ощутимый балласт, например, если включают в себя больше функций, чем необходимо. Фактически, некоторые общие и часто используемые функции можно добавить в движок и без помощи раздутых плагинов, используя софт сам по себе.
В этой статье представлены 6 советов для разработчиков сайтов на WordPress, которые рассматривают распространённые моменты по реализации тех или иных функций с минимальным использованием плагинов, или вовсе без такового.
1. Привязываем страницы к категориям постов
WordPress позволяет администраторам определять каждую страницу, как страницу поста: это идеальная база для CMS, с реализацией ленты для блога или ленты новостей. Несмотря на это, WordPress не предлагает нам простого и удобного механизма настройки сайта с несколькими независимыми лентами одновременно.
Распространенный случай: компания хочет свободный неофициальный блог, и отдельную, более официальную ленту для пресс-релизов внутри раздела [О компанииk. Давайте перечислим несколько требований, которые предъявит подобный клиент:
* Ни в коем случае нельзя, чтобы эти ленты смешивались и выводились как одна.
* Ссылки на ленты должны появиться в навигации страницы.
* Страница с пресс-релизами должна иметь статический, но редактируемый контент над самой лентой.
* Для SEO, эти ленты должны иметь [страничнуюk структуру пермалинков: другими словами mysite.com/category/press-releases недопустима; а наша цель mysite.com/about-us/press-releases.
И как обычно существует несколько решений этой проблемы. Особое внимание мы заострили на выведении лучшей техники, включая отдельно стоящие страницы лент записей (в данном случае одной для пресс-релизов) и необходимость создания основной ленты, которая должна включать несколько категорий. Для этого примера давайте считать, что [Наш блогk должен быть полноценным блогом с категориями.
Подготовка сайта
Этот подход [страницы с отдельными лентамиk основан на привязке страницы к категории постов. [Главныйk блог будем считать [страницей с постамиk, настроенной таким образом, чтобы исключать посты из ленты [Пресс-релизыk. Чтобы соответствовать требованиям SEO по обеспечению логичной и последовательной структуры URL, нам необходимо тщательно сформировать и настроить пермалинки.
* зайдите в настройки [Чтениеk и убедитесь, что для опции На главной странице отображать задано значение Статическая страница, а для Страница записей значение Наш блог.
* в WordPress-настройках Постоянные ссылки, убедитесь что выбран параметр Произвольно. Структура должна быть такой: /%category%/%postname%/.
* в списке страниц, установите пермалинк (или ярлык) для страницы [О компанииk (в случае с сайтом, которые мы взяли для примера, пусть это будет about-us). Сделайте ярлык для страницы Пресс-релизы (press-releases).
* добавьте две соответствующие категории: категорию [О компанииk с соответственным пермалинком (about-us), и категорию [Пресс-релизыk с согласованным пермалинком (press-releases) и родительской категорией [О компанииk.
* создайте пост в категории [Пресс-релизыk для тестирования.
wp-cat-config
Удаляем категорию со страницы блога
Чтобы удалить категорию с главной страницы блога (на которой отображаются все посты в пределах своих категорий), необходимо изменить функцию query в коде страницы, которая используется в шаблоне страницы блога.
Кодекс WordPress предалагет решение. Просто установите ID для категории [Пресс-релизыk (наведите мышку на имя категории в админ-панели, вы легко найдете ID, посмотрев на URL в статус-баре для примера, пусть это будет 5), и вставьте следующий код над циклом поста:
query_posts(«cat=-5»);
Обратите внимание: многие шаблоны включают в себя список категорий в сайдбаре, список недавних постов, а также другие компоненты, которые не смогут исключить из себя посты категории [Пресс-релизыk. Эти элементы тоже требуют модификации, чтобы можно было исключить категорию. Большинство обращений WordPress позволяют сделать это с легкостью.
Активация страницы с собственной лентой
Странице с лентой понадобится собственный отдельный шаблон страницы. Для этого примера мы назвали шаблон [Лента пресс-релизовk и использовали родной page.php как точку для старта (скопировав и переименовав в page_press.php).
Так как нам необходим статичный, редактируемый контент поверх ленты, первый пост-цикл, который выводит контент страницы, оставим без изменений. Ниже код для вывода содержимого страницы, таким образом, будут выполнены еще одна функция post query и цикл. После выполнения, query должна быть очищена с помощью wp_reset_query, чтобы элементы отображаемые после цикла (например, боковая навигация) могли корректно ссылаться на информацию, сохраненную в исходном query страницы.
Общий фреймворк кода представлен ниже. Документация по query posts дает нам полные и четкие инструкции по кастомизации.
query_posts('category_name=Press Releases');
if ( have_posts() ) : while ( have_posts() ) : the_post();
//выводить пост нужно здесь
endwhile; endif;
wp_reset_query();
Также разумеется нужно выбрать новый шаблон для страницы [Пресс-релизыk в редакторе.
Мелочи решают всё
В зависимости от характеристик каждого конкретного сайта, вам понадобится дополнительная кастомизация шаблона. В частности этот совет не охватывает особенностей в работе по отображению индивидуальных постов внутри изолированных лент. Углубляясь в технику, использование функции проверки состояния in_category в шаблоне single.php позволяет кастомизировать отображение постов, исходя из их категорий.
Альтернативные пути
Создание индивидуальных шаблонов страниц для каждой отдельной ленты является хорошим решением для сайтов имеющих лишь несколько таких лент. Тем не менее сайты на WordPress вроде m62 visual communications достаточно сильно расширяют идею ассоциаций категорий (и даже тэгов) со страницами. m62 представляет десятки страниц, ассоциированных с определенными категориями, подкатегориями и тегами, при этом перемешивая их со стандартными [статическимиk страницами. В этом случае, более правильным решением будет использовать специальные шаблоны страниц, которые будут соответствовать пермалинкам тегов и категорий, а не обычных страниц, и таким образом динамически создавать эти ассоциации.
2. [Дружественныеk страницы только для зарегистрированных пользователей
WordPress имеет встроенную функцию обозначить любую страницу или пост как [личныйk. По умолчанию эти страницы не отображаются во всех списках постов и меню (включая навигацию) и генерируют 404 ошибку если зайти по прямой ссылке до тех пор пока пользователь не залогинен. Несмотря на практичность, чаще всего это не идеальный вариант в плане юзабильности.
Часто, сайты информируют посетителей о том, что полное содержимое некоторых страниц или постов доступно только для зарегистрированных пользователей. Дружественное сообщение, указывающее пользователям, что они попали на страницу доступную только зарегистрированным пользователям и формой авторизации, может стать отличным решением. Контент-ориентированные сайты могут дразнить публику, показывая интригующую часть всем посетителям, а давать читать до конца только после авторизации/регистрации.
Этот пример предлагает фреймворк для реализации [гибридногоk (авторизован/не авторизован) способа отображения страниц и использует следующий сценарий: содержимое поста над отметкой [Read morek будет отображаться всем пользователям; контент под отметкой зарегистрированным пользователям. Под тегом more незарегистрированным пользователям будет предложено авторизоваться или зарегистрироваться.
Этот подход будет работать не для всех постов подряд, а идентифицировать посты по custom полю, которое будет определять пост [эксклюзивным для зарегистрированных пользователейk.
1. Создайте страницу или запись.
2. Напишите текст, видимый для пользователей.
3. Вставьте тэг [morek в конце.
4. Напишите текст видимый только для зарегистрированных пользователей.
5. Добавьте custom поле с названием [member_contentk и значением 1
6. Опубликуйте запись / страницу.
wp-member-content
Следующий шаг включает в себя редактирование файлов шаблона. Это будут файлы [page.phpk и [single.phpk. Для этого примера будем считать, мы создали запись (не страницу) с эксклюзивным контентом. Таким образом, нам нужно редактировать [single.phpk. Внутри шаблона найдите запрос the_content используемый для вывода содержимого. Вот как он обычно выглядит:
the_content();
Вот новый код с требуемой нам функциональностью:
if(!get_post_meta($post->ID, 'member_content', true) || is_user_logged_in()) {
the_content('
Читать дальше k
');
} else {
global $more;
$more = 0;
the_content(«»);
echo «
Полный текст статьи доступен только для зарегистрированных пользователей. Пожалуйста авторизуйтесь, чтобы дочитать до конца.
«;
}
Совет: скомбинируйте это со следующим шагом, чтобы получить форму, которая будет возвращать пользователей к текущему посту.
3. Внедрение формы авторизации с редиректом на просматриваемую страницу
Иногда, редиректить пользователей на стандартную страницу авторизации WordPress не идеальное решение. К примеру, она может выглядить совсем не так, как хочет заказчик. Также, форма авторизации прямо на странице часто является гораздо более юзабильным решением, чем ссылка на стандартную страницу авторизации.
mip-login
Код, представленный ниже вставляет форму логина в шаблон и перегружает ту же страницу после авторизации.
Примите во внимание некий подвох этого метода: если пользователь не пройдет авторизацию с первого раза, WordPress таки перебросит его на свою стандартную форму авторизации, но вернет обратно после успешной попытки.
4. Хлебные крошки без использования плагина.
breadcrumbs
Существует масса плгинов, которые генерируют хлебные крошки для удобной навигации. Но вообще-то, вы и сами можете создать себе навигацию хлебными крошками при помощи всего нескольких строк кода, которые будут иметь хороший потенциал для кастомицации и настройки под себя.
Мы не будем подробно останавливаться на форматировании крошек, для этого примера крошки будут выводиться неотсортированным списком. В таком формате они достаточно дружественны для поисковых систем, и вы потом сами сможете отформатировать их на свой вкус.
Чтобы начать, вот простой способ реализации хлебных крошек, который работает только со страницами и включает в себя крошку [Homek (главную страницу сайта) в начала списка. В зависимости от дизайна конкретного шаблона, вам может понадобиться вставить этот код в какой-нибудь тег. В этом примере предполагается что код будет вставлен в файл header.php, крошки будут появляться только на страницах и не будут выводиться на главной странице. К ссылкам на текущую и домашнюю страницы также можно будет применить особый CSS класс.
if (is_page() && !is_front_page()) {
echo '
';
}
Если в настройках WordPress указано, что главная страница должны быть статической, вам может понадобиться вывести в хлебных крошках путь к странице блога. Это можно сделать добавив проверку состояния is_home() вверху:
if ((is_page() && !is_front_page()) || is_home()) {
…
Следующая модификация этого кода делает возможным включение хлебных крошек для отдельных категорий и постов. Обратите внимание, что WordPress позволяет добавлять посты в несколько категорий; чтобы не сделать из крошек нагромождения, скрипт просто выберет первую категорию из выбранных для поста. Ради простоты, исключим иерархически вложенные категории.
if ((is_page() && !is_front_page()) || is_home() || is_category() || is_single()) {
echo '
';
}
Существует много способов как дальнейшего расширения возможностей хлебных крошек. Например, вы можете захотеть сделать хлебные крошки для различных типов архивов (тэги, месяцы, годы) или внедрить поддержку иерархии категорий. Конечно, эта статья не может покрыть все возможные варианты реализации, но предложенные примеры предоставят вам ощутимый фреймворк для дальнейшей работы.
5. Выделяем избранные записи на главной странице
Много CMS реализаций позволяет выделить некоторые избранные элементы из блога и отобразить их на главной странице или где-либо еще на сайте на боковой панели или в футере. Редакторы контента очень тщательно подходят к отбору информации, которая попадет на первую страницу. Ниже решение, дающее возможность реализовать выборочное отображение ленты постов, которое можно разместить в абсолютно любой части вашего блога.
featurednews-sge
Нам потребуется специальная категория для классификации постов как [Избранноеk одноименная категория отлично подойдет для этого. В дальнейшем для редактора пометить запись [избраннымk будет крайне легко. Также нам потребуется ID этой категории. Самый простой способ узнать его навести курсор на кнопку редактирования и посмотреть в строку статуса.
Используя этот ID (например [4k) и количество постов для отображения на главной странице (скажем [3k), следующий код отобразит список избранных записей начиная с самых последних.
echo «
Featured Blog Posts
«;
echo «
«;
$feat_posts = get_posts('numberposts=4&category=71');
foreach ($feat_posts as $feat) {
echo '
- '.$feat->post_title.'
';
}
echo «
«;
Также как и в остальных примерах, этот код может быть расширен разными путями. Например, главная страница SGE Corporation отображает отрывок самого последнего элемента блога. Отрывок можно собственноручно вводить в поле [Цитатаk или если вы этого не сделаете, оно будет сгенерировано автоматически, взяв некоторое количество символов с начала поста.
6. Выделяем текущую категорию поста
Список страниц WordPress добавляет специальные class каждому елементу, включая классы, которые указывают является ли страница текущей, родительской, дочерней и так далее. Спискам категорий присваивается особый класс (current-cat), чтобы выводить элементы списка соответствующим образом в то время, когда пользователь перемещается в архивах категории. К сожалению, по умолчанию категориям не присваевается особый класс, когда пользователь переходит на запись внутри самой категории. Однако, мы можем обойти ограничения этой функции, определяя ID текущей категории и передавая его функции wp_list_categories.
$category = get_the_category();
wp_list_categories('current_category='.$category[0]->cat_ID);
Обратите внимание, что у этого подхода также имеется значительный недостаток только некоторые категории могут быть переданы функции списка категорий. Например, если записи присвоены несколько категорий, только первая будет выделена. Тем не менее, если у сайта не предполагается записей в множестве категорий, из списка категорий можно сделать полноценную навигацию по сайту.
Оригинал статьи: Power Tips For WordPress Template Developers
Перевод с сайта WordPress для каждого