Статьи

Создание дочерних тем для вашей WordPress Theme Framework

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

Очевидный способ сделать это — погрузиться и начать создавать файлы шаблонов в своей дочерней теме, чтобы переопределить их в платформе, но благодаря хукам действий и фильтров, добавленным в вашу платформу, это не всегда может быть лучшим подходить.

В этой статье я расскажу о некоторых приемах, которые вы можете использовать в своих дочерних темах, чтобы наилучшим образом использовать вашу среду и импровизировать рабочий процесс.

Темы, которые я затрону, таковы:

  • Создание начальных дочерних тем
  • Внесение изменений в код через фильтр хуков фреймворка
  • Добавление кода через хуки действий платформы
  • Создание файлов шаблонов в вашей дочерней теме
  • Когда вместо этого использовать плагин

Основной целью разработки вашей тематической структуры является принятие принципа СУХОЙ (не повторяйте себя), который также применим к вашим дочерним темам.

Это может сделать вас более эффективным, если вы создадите одну или несколько «начальных» дочерних тем для использования с вашей инфраструктурой, которые содержат основной код, необходимый для начала работы над новыми проектами.

Принимая решение о том, как это сделать, подумайте, как вы работаете и какие сайты создаете:

  • Вы создаете много сайтов для клиентов в одном секторе с аналогичными потребностями?
  • Хотите предложить недорогие сайты на основе шаблонов для небольших клиентов?
  • Существуют ли конкретные файлы шаблонов, которые вы склонны создавать для большинства своих новых проектов?
  • Есть ли функциональность, которую нужно включить на некоторых сайтах, но не на других? (Например, я использую две начальные дочерние темы, одну с функцией комментариев, а другую без.)
  • Есть ли стили, которые вы склонны использовать для большинства проектов, или вы можете использовать объектно-ориентированные стили или препроцессор CSS для большинства проектов?
  • Есть ли библиотеки или ресурсы, которые вы используете для большинства новых проектов, или для значительной их части?
  • Есть ли у вас две или три основные категории, в которые вы можете поместить проекты, причем каждая категория включает в себя аналогичные разработки?

Если вы ответили «да» на любой из этих вопросов, то разработка одной или нескольких начальных дочерних тем может сэкономить ваше время. Вы можете создать набор дочерних тем с базовым кодом, который вы повторяете для всех проектов, используя их, и тогда вам не нужно переписывать этот код (или создавать эти файлы) для каждого нового проекта.

Примечание для предостережения: если вы добавляете некоторый код в каждый новый проект, вы можете добавить его в свою инфраструктуру, а не в дочерние темы, возможно, с помощью ловушки, чтобы вы могли переопределить ее, если в будущем возникнет другая необходимость ,

Даже если вы ответили «нет» на поставленные выше вопросы, стоит создать очень простую начальную тему с пустым файлом таблиц стилей и функций и добавить инструкции, необходимые WordPress для доступа к родительской теме вашей платформы в таблице стилей:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
/*
 Theme Name: My Theme Framework Child
 Theme URI:
 Description: Starter Child Theme
 Author: Rachel McCollin
 Author URI: https://rachelmccollin.co.uk
 Template: wptutsplus-theme-framework-part6
 Version: 1.0.0
 Tags:
 Text Domain: tutsplus
*/
 
 
@import url(«../wptutsplus-theme-framework-part6/style.css»);

Обязательными полями являются Theme Name и Template , остальные поля являются необязательными. Убедитесь, что для Template вы используете каталог темы фреймворка, а не его имя. Полезно также заполнить другие поля, относящиеся к вашей теме.

Объявление @import также важно, если вы хотите загрузить таблицу стилей фреймворка. Пока вы размещаете это над любым другим CSS, он будет загружать таблицу стилей родительской темы перед любыми стилями в таблице стилей дочерней темы, а это значит, что вы можете добавлять и переопределять стили в своей структуре в дочерней теме по мере необходимости.

Вы также можете создать начальный файл functions.php с функциями, которые вы чаще всего используете в своих дочерних темах. Затем вы можете удалить любой из них и / или добавить к ним для конкретных проектов.

Помимо добавления стилей в вашу дочернюю тему, вы, скорее всего, захотите внести изменения в код, выводимый платформой. Самый легкий способ сделать это — через фильтр-хуки, поэтому стоит сначала изучить их, чтобы определить, можете ли вы использовать какие-либо из них.

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

Чтобы быть более эффективным, вы можете захотеть создать набор соответствующих функций, которые вы поместите в файл функций различных начальных тем, или даже создать плагин с вашей функцией, который вы активируете при необходимости. Я расскажу о плагинах более подробно позже в этой серии.

Я рассмотрел процесс создания перехватчиков фильтров в предыдущей части этой серии, но, скажем, вы присоединяете функцию к фильтру с помощью функции add_filter() . Так, например, чтобы изменить ссылку и имя, используемые в колофоне моего сайта, я создаю две функции следующим образом:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
function wptp_amend_colophon_name() {
     
    $name = ‘Rachel McCollin’;
    return $name;
     
}
add_filter( ‘wptp_colophon_name’, ‘wptp_amend_colophon_name’ );
 
function wptp_amend_colophon_link() {
     
    $link = ‘http://rachelmccollin.co.uk’;
    return $link;
     
}
add_filter( ‘wptp_colophon_link’, ‘wptp_amend_colophon_link’ );

Они подключаются к двум фильтрам в моей структуре темы: wptp_colophon_name и wptp_colophon_link и изменяют вывод каждого из них.

Ваш фреймворк также будет иметь хуки действий, которые вы можете использовать для вставки контента в различные места на ваших сайтах.

Если вы работали над файлами кода для платформы, прилагаемой к этой серии руководств, у вас будет семь хуков действий для работы:

  • перед заголовком
  • внутри заголовка
  • перед содержанием
  • после содержания
  • в боковой панели
  • в нижнем колонтитуле
  • после нижнего колонтитула.

Например, допустим, вы хотите добавить кнопку призыва к действию на боковой панели. Вы можете создать новый файл sidebar.php , но было бы эффективнее использовать вместо wptp_sidebar хук wptp_sidebar .

Для этого создайте файл functions.php в своей дочерней теме и добавьте в него следующее:

1
2
3
4
5
6
7
8
9
function wptp_cta() {?>
     
    <div class=»cta»>
        <p>Email us on <a href=»mailto:[email protected]»>[email protected]</a></p>
    </div>
     
<?php
}
add_action( ‘wptp_sidebar’, ‘wptp_cta’, 1 )

Функция wptp_cta() создает разметку для призыва к действию, а функция add_action() запускает ее через wptp_sidebar с приоритетом 1 так что она появляется перед любым другим контентом, активированным через эту ловушку.

Существует множество другого контента, который можно добавить с помощью кнопок действий, таких как кнопки общего доступа над или под контентом, дополнительный контент в нижнем колонтитуле, поле поиска в заголовке и многое другое.

Возможно, вы просто захотите добавить некоторый контент на определенные типы страниц, такие как отдельные посты в блоге, и в этом случае наиболее очевидным началом будет создание нового шаблона single.php . Но вы все равно можете использовать свои ловушки действий с добавлением условного тега:

01
02
03
04
05
06
07
08
09
10
11
12
13
function wptp_after_single_posts() {
     
    if( is_singular( ‘post’ ) ) { ?>
         
        <h3>Enjoyed this?
             
        <?php
        // query to list latest blog posts here
             
    }
     
}
add_action( ‘wptp_after_content’, ‘wptp_after_single_posts’ );

Это создаст новый запрос (с использованием WP_Query ), который WP_Query список самых последних сообщений в блоге, чтобы поощрить посетителей читать что-то еще после того, как они закончили запись в блоге. is_singular( 'post' ) гарантирует, что он выводится только для отдельных сообщений, и, прикрепив его к wptp_after_content вы отобразите его после основного содержимого публикации.

Иногда вы не сможете делать то, что хотите, используя фильтр или хуки действий в вашей структуре, и в этом случае вам нужно будет создавать новые файлы шаблонов в ваших дочерних темах.

Это могут быть те же файлы шаблонов, которые хранятся в вашей платформе, и в этом случае файлы в дочерней теме переопределяют их. Или это могут быть новые файлы шаблонов, например, для новой категории, таксономии или типа записей.

Если вы создаете файлы шаблонов в своих дочерних темах, вам будет проще, если вы будете использовать файлы шаблонов в своей структуре в качестве отправной точки. Шаги, которые я выполняю:

  1. Определите файл шаблона, который необходимо создать, со ссылкой на иерархию шаблонов WordPress.
  2. Создайте пустой файл с соответствующим именем в вашей дочерней теме
  3. Определите файл в вашей структуре, который ближе всего к новому файлу (снова со ссылкой на иерархию шаблонов)
  4. Скопируйте содержимое этого в ваш новый файл
  5. Внесите изменения в новый файл по мере необходимости.

Это избавляет вас от дублирования любого кода, который будет распространен между вашим новым файлом и существующими файлами в вашей среде, например, при вызове включаемых файлов.

Другой вариант, который у вас есть при создании сайтов на основе вашей платформы, — это использование плагинов в сочетании с вашими дочерними темами. Плагин не полностью заменит дочернюю тему, но может быть полезен в следующих случаях:

  • Функциональность, которую вы хотите добавить, не зависит от темы (т.е. вы хотите сохранить ее, если сайт когда-либо изменит тему в будущем). Это может включать, например, регистрацию пользовательских типов записей или таксономий.
  • Вы хотите использовать эту функциональность на нескольких сайтах, которые вы создаете, но недостаточно для того, чтобы перейти в начальную дочернюю тему или сам фреймворк.

Я расскажу о разработке плагинов для вашего фреймворка в следующей части этой серии.

Каркас вашей темы — это только отправная точка библиотеки кода и файлов, которые вы создадите для поддержки сайтов, которые вы разрабатываете. Каждый созданный вами сайт должен работать на дочерней теме, которая будет иметь вашу базовую тему в качестве родительской.

Как мы уже видели, ваши дочерние темы добавят свои собственные стили и функциональность, и они могут сделать это, подключившись к действиям и фильтрам в вашей инфраструктуре, или создав новые файлы шаблонов. Это всегда хорошая идея, чтобы принять решение, которое требует наименьшего количества кода, поскольку это делает ваш сайт быстрее и вашу жизнь проще!