Мы видели, что в большинстве случаев добавление сценариев 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.
Результат его работы приведен на скриншоте: