Мы видели, что в большинстве случаев добавление сценариев jQuery и редактирование шаблонов позволяет добиться поставленной цели. Однако, давайте представим себе более сложное развитие событий, которое будет затрагивать нашу стандартную тему и гипотетического клиента из прошлой статьи.
Когда мы настраивали стандартную тему, я предполагал, что клиент хочет увидеть сайт в “журнальном” ключе. Очень часто для такого подхода характерно повышенное внимание к авторам записей. В данном случае важно не просто указать скупой никнейм, из которого вряд ли можно почерпнуть какую-то полезную информацию; важно предоставить посетителям краткую биографию автора: его имя с фамилией, увлечения, и т.д., поскольку это выглядит более профессионально. В то же самое время указанные материалы не должны влиять на удобочитаемость основной записи. Предположим, что гипотетический клиент обладает сетью новостных сайтов, на которых он хочет увидеть реализацию биографии автора.
В случае с одним конкретным WordPress сайтом решить поставленную задачу можно довольно просто: с помощью тега the_author (для получения имени и фамилии) и отдельного тега для получения биографии из пользовательской панели (если, конечно, биография была указана). Кроме того, можно написать jQuery скрипт, который будет создавать отдельный div для биографии. Однако достаточно столкнуться с сетью сайтов, как все эти способы окажутся неэффективными. Никто не захочет вбивать вручную один и тот же код для нескольких десятков сайтов. Тем более, если они обладают различными темами (отличными от стандартной). Тем более, если у большинства из них не подключен jQuery.
Только самый отчаянный разработчик рискнет выполнить такой объем работ. Поправка: ненужный объем работ. Гораздо проще написать отдельный плагин WordPress. С помощью плагина данная функциональность с легкостью будет применена к любому количеству сайтов, вне зависимости от установленных тем. Давайте приступим к его написанию!
Создание плагина
Ниже мы приведем код, который будет отвечать за получение биографии автора. Основные действия описаны в комментариях:
...
//add author function
function addAuthor($text) {
/*переменная $text принимает контент от фильтра*/
//проверяем, указал ли автор имя, фамилию и url
//если нет, то выводим на экран ссылку "Find out more"
//и используем его никнейм (который является обязательным).
if (get_the_author_meta('user_url')){
$bioUrl = "<a href='".get_the_author_meta('user_url')."'>
Find Out More</a>";
}
if (get_the_author_meta('first_name')
&& get_the_author_meta('last_name')){
$bioName = get_the_author_meta('first_name').
" ".get_the_author_meta('last_name');
}else{
$bioName = get_the_author_meta('nickname');
}
//проверяем, указал ли автор краткое описание
//если нет, то биография автора не будет отображена.
if (get_the_author_meta('description')){
$bio = "<div class='authorName'>by <strong>".$bioName."</strong>
<div class='authorBio'>"
.get_the_author_meta('description')." ".$bioUrl."
</div>
</div>";
}else{
$bio = "<div class='authorName'>
by <strong>".$bioName."</strong>
</div>";
}
//возвращаем контент записи
//и добавляем биографию в ее начало
return $bio.$text;
}//addAuthor
add_filter('the_content', 'addAuthor');
...
Теперь, для того чтобы биография получила удобное представление, необходимо добавить некоторые стили. Для этого мы создадим в папке с плагином отдельную стилевую таблицу authover.css и добавим в нее следующие стилевые правила:
.authorBio {
border-top: 2px solid #666;
border-bottom: 2px solid #999;
background-color: #ccc;
padding: 10px;
font-size: 10px;
}
Основная причина, по которой я создал отдельную стилевую таблицу, состояла в том, чтобы проиллюстрировать передовую практику использования функций wp_register_style и wp_enqueue_style, входящих в Script API. Эти две функции регистрируют новую стилевую таблицу и загружают ее, тем самым гарантируя, что никаких конфликтов с другими стилевыми таблицами (в результате совпадения имен) не произойдет.
За название моей таблицы стилей я даже не беспокоюсь, поскольку оно в 99% случаев не вызовет никаких конфликтов, однако вам, как разработчикам, полезно будет знать о существовании рассмотренных выше функций, так как они часто используются в различных плагинах. Отдельная стилевая таблица позволяет забыть о длительном блуждании в PHP-коде. Все, что потребуется пользователю при стилизации своего проекта – это открыть стилевую таблицу, найти необходимые стили и заменить их.
Теперь перейдем к функции authorcss(). Я хочу, чтобы стилевая таблица была зарегистрирована и загружена еще до хука wp_head. Для этого нам понадобится использовать хук действий init. Ниже приведен код функции с комментариями:
...
function authorCSS() {
//создаем переменные для основных путей к файлу стилевой таблицы
$authorStyleUrl =
WP_PLUGIN_URL . '/add_author_bio-tbs/authover.css';
$authorStyleFile =
WP_PLUGIN_DIR . '/add_author_bio-tbs/authover.css';
//проверка существования файла
if ( file_exists($authorStyleFile) ) {
//регистрация и вызов таблицы стилей
wp_register_style('authorStyleSheet', $authorStyleUrl);
wp_enqueue_style( 'authorStyleSheet');
}
}
//вызов функции authorCSS при инициализации WordPress
add_action('init', 'authorCSS');
Теперь нам достаточно активировать созданный плагин через панель администратора и проверить его функционирование в WordPress.
Результат его работы приведен на скриншоте:






