SlideShare a Scribd company logo
1 of 37
Download to read offline
Вёрстка тем
Обо мне
2
Кузовлев Дмитрий
Верстальщик / WordPress Developer
kuzovlev.dev@gmail.com
План
3
1. Содержимое WordPress темы
a. Файлы шаблонов
b. Иерархия шаблонов
2. CSS & JS
a. Тонкости подключения
b. Полезные функции
3. О functions.php
a. Что не стоит добавлять в functions.php?
b. Какие альтернативы существуют?
4. Кастомные шаблоны. Продвинутое назначение шаблона
5. Зачем нужна дочерняя тема и как её создать?
6. Правила разработки и отладка в WordPress
Как устроена тема WordPress
4
/wp-content/themes/my-theme/...
style.css
5
/*
Theme Name: Twenty Fifteen
Theme URI: https://wordpress.org/themes/twentyfifteen
Author: the WordPress team
Author URI: https://wordpress.org/
Description: Our 2015 default theme is clean, blog-focused, and
designed for clarity...
Version: 1.0
License: GNU General Public License v2 or later
*/
/* Theme styles are here */
...
Файлы шаблонов
6
Home Templates:
front-page.php
home.php
Static Page Templates:
custom-page.php
page-contact.php
page-3.php
page.php
Archive Templates:
author.php
category.php
tag.php
date.php
taxonomy.php
archive.php
Single Templates:
attachment.php
single.php
single-product.php
Search Results Template:
search.php
Error 404 Template:
404.php
index.php
Иерархия шаблонов WordPress
7
http://codex.wordpress.org/Template_Hierarchy
Archive Pages
8
Static Page
Модульные файлы шаблонов
9
/wp-content/themes/my-theme/...
header.php
sidebar.php
footer.php
tpl.part-gallery.php
get_header()
header-product.php get_header( 'product' )
get_sidebar()
get_footer()
get_template_part( 'tpl.part', 'gallery' )
searchform.php get_search_form()
comments.php comments_template()
CSS & JS
Тонкости подключения
10
Подключение CSS & JS
11
header.php:
<head>
...
<link rel="stylesheet" href="http://mysite.com/css/style.css" >
<script src="http://mysite.com/js/my-script.js" ></script>
...
</head>
functions.php:
function add_js_css_to_head () {
echo '<link rel="stylesheet" ref="http://mysite.com/css/style.css">' ;
echo '<script src="http://mysite.com/js/my-script.js"></script>' ;
}
add_action( 'wp_head', 'add_js_css_to_head' );
Подключение CSS & JS
12
header.php:
<head>
...
<link rel="stylesheet" href="http://mysite.com/css/style.css" >
<script src="http://mysite.com/js/my-script.js" ></script>
...
</head>
functions.php:
function add_js_css_to_head () {
echo '<link rel="stylesheet" ref="http://mysite.com/css/style.css">' ;
echo '<script src="http://mysite.com/js/my-script.js"></script>' ;
}
add_action( 'wp_head', 'add_js_css_to_head' );
13
Функции регистрации CSS & JS
wp_register_style(
$handle, // *идентификатор
$src, // *URL к файлу стилей
$depends, // массив идентификаторов стилей, от которых зависит регистрируемый
$version, // номер версии
$media // медиа-тип ('all', 'screen', 'handheld' или 'print')
);
wp_register_script(
$handle, // *идентификатор
$src, // *URL к скрипту
$depends, // массив идентификаторов скриптов, от которых зависит регистрируемый
$version, // номер версии
$in_footer // где выводить скрипт ('wp_head' или 'wp_footer')?
);
Функции подключения CSS & JS
wp_enqueue_style( $handle );
wp_enqueue_script( $handle );
http://codex.wordpress.org/Function_Reference/wp_register_style
http://codex.wordpress.org/Function_Reference/wp_register_script
http://codex.wordpress.org/Function_Reference/wp_enqueue_style
http://codex.wordpress.org/Function_Reference/wp_enqueue_script
Хуки для подключения CSS & JS
14
Frontend :
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_style' );
add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_script' );
Backend (admin panel) :
add_action( 'admin_enqueue_scripts', 'mytheme_enqueue_style' );
add_action( 'admin_enqueue_scripts', 'mytheme_enqueue_script' );
Login Page :
add_action( 'login_enqueue_scripts', 'mytheme_enqueue_style' );
add_action( 'login_enqueue_scripts', 'mytheme_enqueue_script' );
http://codex.wordpress.org/Plugin_API/Action_Reference/wp_enqueue_scripts
http://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scripts
http://codex.wordpress.org/Plugin_API/Action_Reference/login_enqueue_scripts
Полный код подключения CSS & JS
15
function register_and_enqueue_style() {
wp_enqueue_style(
'my-style',
get_stylesheet_directory_uri() . '/css/my-style.css',
array( 'bootstrap-main' ),
'1.0.1',
'screen'
);
}
function register_and_enqueue_script() {
wp_enqueue_script(
'my-script',
get_stylesheet_directory_uri() . '/js/my-script.js',
array( 'jquery' ),
'1.0.1'
);
}
add_action( 'wp_enqueue_scripts', 'register_and_enqueue_style' );
add_action( 'wp_enqueue_scripts', 'register_and_enqueue_script' );
CSS: Полезные функции
16
Добавление inline-стилей ( <style>/* inline styles*/</style> ) :
wp_add_inline_style( 'my-style', "h2 { font-family: { $font_family }; }" );
Был ли CSS файл зарегистрирован / добавлен в очередь / выведен / ожидает вывода:
wp_style_is( 'my-style', 'registered' /* or 'enqueued', 'done', 'to_do' */ );
Подключение стилей для Internet Explorer :
wp_style_add_data( 'my-style-ie', 'conditional', 'lt IE 9' );
Удаление CSS файла из очереди вывода стилей :
wp_dequeue_style( 'my-style' );
Отмена регистрации CSS файла :
wp_deregister_style( 'my-style' );
JS: полезные функции
17
Локализация JavaScript :
wp_localize_script( 'my-script', 'object_name', array(
'count' => 5,
'color' => $color
)
);
Был ли JS файл зарегистрирован / добавлен в очередь / выведен / ожидает вывода:
wp_script_is( 'my-style', 'registered' /* or 'enqueued', 'done', 'to_do' */ );
Удаление JS файла из очереди вывода скриптов :
wp_dequeue_script( 'my-script' );
Отмена регистрации JS файла :
wp_deregister_script( 'my-script' );
О functions.php...
18
● Лежит в корне темы: /wp-content/themes/my-theme/functions.php
● Загружается при запросе любой страницы (включая админку)
● Выполняется только тогда, когда тема активирована
Позволяет:
● Определять дополнительные функции
● Переопределять существующие функции
● Устанавливать различные параметры для ядра WordPress
● Изменять поведение Wordpress через хуки и фильтры
Когда использовать functions.php
19
● Объявление сайдбаров для виджетов темы
● Определение путей к файлам локализации темы
● Включение поддержки темой различных Wordpress фич
('post-formats', 'post-thumbnails', 'widgets', 'menus' ...)
● Подключение скриптов и стилей для темы
● Создание раздела с настройками темы
● Дополнительные функции используемые в шаблонах темы
● Регистрация новых размеров миниатюр для темы
Когда не использовать functions.php
20
● Код счетчиков Google Analytics или Яндекс.Метрики
● Добавление кастомных типов контента и таксономий
● Регистрация дополнительные ролей и возможностей пользователей
● Добавление шорткодов
Если не в functions.php, то куда?
21
Regular Plugin Must Use Plugin
Кастомный шаблон
22
/wp-content
/themes
/my-theme
/custom-template.php
Продвинутое назначение шаблона
23
function custom_templates( $template ) {
global $post;
$post_format = get_post_format( $post->ID );
$has_thumb = has_post_thumbnail( $post->ID );
if( is_single() && $post_format === 'gallery' && $has_thumb ){
if ( $new_template = locate_template( array( 'custom-template.php' ))) {
return $new_template;
}
}
return $template;
}
add_filter( 'template_include', 'custom_templates' );
Дочерняя тема в WordPress
Who’s
your
(theme’s)
daddy?
24
Дочерняя WP тема
“A child theme is a theme that inherits the functionality
and styling of another theme, called the parent theme.
Child themes are the recommended way of modifying
an existing theme.”
- The WordPress Codex
http://codex.wordpress.org/Child_Themes
25
Дочерняя Wordpress тема:
● имеет родительскую тему
● лежит в папке /wp-content/themes/ с остальными темами
● наследует внешний вид и весь функционал родительской темы
… и применяется если необходимо:
● вносить изменения в родительскую тему
● кастомизировать дизайн родительской темы
● расширить возможности родительской темы новым функционалом
26
/wp-content
/themes
/twentyfifteen
/twentyfifteen-child
Создаём дочернюю тему
27
/twentyfifteen-child
/style.css
/screenshot.png
/wp-content
/themes
/twentyfifteen
Перегрузка шаблонов
28
/wp-content/themes/twentyfifteen /wp-content/themes/twentyfifteen-child
functions.php и дочерняя тема
29
if ( ! function_exists ( 'theme_special_nav' ) ) {
function theme_special_nav () {
// Do something.
}
}
Правила разработки
Стандарты кодирования
31
● повышаем читаемость своего кода
● упрощаем чтение и понимание исходников WordPress
● говорим с другими разработчиками на одном языке
https://make.wordpress.org/core/handbook/coding-standards/php/
https://make.wordpress.org/core/handbook/coding-standards/javascript/
https://make.wordpress.org/core/handbook/coding-standards/html/
https://make.wordpress.org/core/handbook/coding-standards/css/
Debugging in WordPress
32
// Включаем режим отладки в wp-config.php
define( 'WP_DEBUG', true );
http://codex.wordpress.org/Debugging_in_WordPress
Логирование ошибок
33
// Включаем логирование в wp-config.php
define( 'WP_DEBUG', true );
define('WP_DEBUG_LOG' , true);
// Выключаем отображение ошибок на сайте
define('WP_DEBUG_DISPLAY' , false);
CSS & JS debug
34
// Подключаем dev версии JS & CSS файлов
define('SCRIPT_DEBUG' , true);
Плагин Debug Bar
35
● Notices / Warnings
● потребляемая память
● выполненные SQL запросы
https://wordpress.org/plugins/debug-bar/
● состояние объектного кэширования
● информация о запросе WP_Query
● использование устаревших функций
Вопросы?
Спасибо!

More Related Content

What's hot

Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьCodeFest
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковDevDay
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIAGetDev.NET
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Ontico
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...JSib
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressIgor Sazonov
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейKonstantin Komelin
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Ontico
 
WordPress.org Under the Hood, WordCamp Moscow 2017
WordPress.org Under the Hood, WordCamp Moscow 2017WordPress.org Under the Hood, WordCamp Moscow 2017
WordPress.org Under the Hood, WordCamp Moscow 2017Sergey Biryukov
 
Вёрстка по методологии БЭМ
Вёрстка по методологии БЭМВёрстка по методологии БЭМ
Вёрстка по методологии БЭМversusbassz
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Mikhail Davydov
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlexander Baumgertner
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)Ontico
 
WordPress-сообщество
WordPress-сообществоWordPress-сообщество
WordPress-сообществоAnna Ladoshkina
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCDevDay
 
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...PVasili
 
Premium-темы WordPress
Premium-темы WordPressPremium-темы WordPress
Premium-темы WordPressversusbassz
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Ontico
 

What's hot (20)

Изоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесьИзоморфный JavaScript — будущее уже здесь
Изоморфный JavaScript — будущее уже здесь
 
Рендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей СолодовниковРендеринг может больше: vue.js vs React, Андрей Солодовников
Рендеринг может больше: vue.js vs React, Андрей Солодовников
 
jQuery как путь к RIA
jQuery как путь к RIAjQuery как путь к RIA
jQuery как путь к RIA
 
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
Как мы разрабатываем новый фронтенд / Филипп Нехаев (Tinkoff.ru)
 
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
#3 "Webpack и Vue.JS: Создание больших приложений и их расширение" Кирилл Кай...
 
Bootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPressBootstrap 3. Адаптивная верстка для WordPress
Bootstrap 3. Адаптивная верстка для WordPress
 
Vue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людейVue.js - реактивный фронтенд фреймворк для людей
Vue.js - реактивный фронтенд фреймворк для людей
 
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
Как мы ускоряли WebGL / Мстислав Живодков (2GIS)
 
Bootstrap
BootstrapBootstrap
Bootstrap
 
WordPress.org Under the Hood, WordCamp Moscow 2017
WordPress.org Under the Hood, WordCamp Moscow 2017WordPress.org Under the Hood, WordCamp Moscow 2017
WordPress.org Under the Hood, WordCamp Moscow 2017
 
Вёрстка по методологии БЭМ
Вёрстка по методологии БЭМВёрстка по методологии БЭМ
Вёрстка по методологии БЭМ
 
Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)Modules and assembling of JavaScript (in russian)
Modules and assembling of JavaScript (in russian)
 
Alex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projectsAlex baumgertner bem_in_small_projects
Alex baumgertner bem_in_small_projects
 
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
base.network — пиринговый веб на JavaScript / Денис Глазков (Lazada Rus)
 
WordPress-сообщество
WordPress-сообществоWordPress-сообщество
WordPress-сообщество
 
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVCАрхитектура кода нового 2ГИС Web API или куда мы дели MVC
Архитектура кода нового 2ГИС Web API или куда мы дели MVC
 
Bootstrap 3
Bootstrap 3Bootstrap 3
Bootstrap 3
 
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
построение внутренней ссылочной структуры сайта на Drupal 7 (seo). Костин ...
 
Premium-темы WordPress
Premium-темы WordPressPremium-темы WordPress
Premium-темы WordPress
 
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
Радости и гадости регрессионного тестирования вёрстки / Алексей Малейков (HTM...
 

Viewers also liked

Как не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPressКак не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPressYevhen Kotelnytskyi
 
WordCamp Moscow 2016: Как получить качество
WordCamp Moscow 2016: Как получить качествоWordCamp Moscow 2016: Как получить качество
WordCamp Moscow 2016: Как получить качествоYevhen Kotelnytskyi
 
Как устроен WordPress - WP Kharkiv Meetup #1
Как устроен WordPress - WP Kharkiv Meetup #1Как устроен WordPress - WP Kharkiv Meetup #1
Как устроен WordPress - WP Kharkiv Meetup #1Yevhen Kotelnytskyi
 
Архитектура крупных WordPress сайтов
Архитектура крупных WordPress сайтовАрхитектура крупных WordPress сайтов
Архитектура крупных WordPress сайтовYevhen Kotelnytskyi
 
Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0Yevhen Kotelnytskyi
 
Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?Yevhen Kotelnytskyi
 
Защищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атакЗащищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атакRuslan Sukhar
 
SEO - поведенческие факторы.
SEO - поведенческие факторы.SEO - поведенческие факторы.
SEO - поведенческие факторы.Pavel Karpov
 

Viewers also liked (8)

Как не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPressКак не сойти с ума при разработке крупных проектов на WordPress
Как не сойти с ума при разработке крупных проектов на WordPress
 
WordCamp Moscow 2016: Как получить качество
WordCamp Moscow 2016: Как получить качествоWordCamp Moscow 2016: Как получить качество
WordCamp Moscow 2016: Как получить качество
 
Как устроен WordPress - WP Kharkiv Meetup #1
Как устроен WordPress - WP Kharkiv Meetup #1Как устроен WordPress - WP Kharkiv Meetup #1
Как устроен WordPress - WP Kharkiv Meetup #1
 
Архитектура крупных WordPress сайтов
Архитектура крупных WordPress сайтовАрхитектура крупных WordPress сайтов
Архитектура крупных WordPress сайтов
 
Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0Как получить чёрный пояс по WordPress? v2.0
Как получить чёрный пояс по WordPress? v2.0
 
Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?Как получить чёрный пояс по WordPress?
Как получить чёрный пояс по WordPress?
 
Защищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атакЗащищаем WordPress-сайт от хакерских атак
Защищаем WordPress-сайт от хакерских атак
 
SEO - поведенческие факторы.
SEO - поведенческие факторы.SEO - поведенческие факторы.
SEO - поведенческие факторы.
 

Similar to Вёрстка WordPress тем - WP Kharkiv Meetup #1

Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Igor Sazonov
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPressDarja Kruzhkova
 
Yii2
Yii2Yii2
Yii2Noveo
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...Viktor Likin
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноKrivoy Rog IT Community
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Yandex
 
03 templates kachalova
03 templates kachalova03 templates kachalova
03 templates kachalovaSokolov Artyom
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта Olga Pirozhenko
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7Technopark
 
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"Yandex
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptAlexey Ivanov
 
презентация Day4
презентация Day4презентация Day4
презентация Day4Bulatov Edward
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPressKonstantin Kovshenin
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11olgaoov
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовPyNSK
 

Similar to Вёрстка WordPress тем - WP Kharkiv Meetup #1 (20)

Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
Оптимальная архитектура масштабируемого плагина WordPress на Custom Post Type...
 
Первые шаги после установки WordPress
Первые шаги после установки WordPressПервые шаги после установки WordPress
Первые шаги после установки WordPress
 
Wordpress theme
Wordpress themeWordpress theme
Wordpress theme
 
Yii2
Yii2Yii2
Yii2
 
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
DrupalCamp Kyiv 2011. Views - стандарт вывода списка данных. Расширение Views...
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективноkranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
kranonitS20 Сергей Бурма. Django - легко, быстро, эффективно
 
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
Сергей Бережной, Варвара Степанова "Как использовать БЭМ! вне Яндекса"
 
03 templates kachalova
03 templates kachalova03 templates kachalova
03 templates kachalova
 
всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта  всплывающее окно при закрытии сайта
всплывающее окно при закрытии сайта
 
Что нового в Django 1.4
Что нового в Django 1.4Что нового в Django 1.4
Что нового в Django 1.4
 
5 urok
5 urok5 urok
5 urok
 
Web весна 2012 лекция 7
Web весна 2012 лекция 7Web весна 2012 лекция 7
Web весна 2012 лекция 7
 
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
Сергей Бережной "Экзотическая шаблонизация, или как писать HTML для блоков"
 
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScriptCSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
CSS-в-JS, HTML-в-JS, ВСЁ-в-JS. Все гораздо проще, когда всё вокруг JavaScript
 
презентация Day4
презентация Day4презентация Day4
презентация Day4
 
презентация Day4
презентация Day4презентация Day4
презентация Day4
 
Основые безопасности WordPress
Основые безопасности WordPressОсновые безопасности WordPress
Основые безопасности WordPress
 
Trening modul2-webinar11
Trening modul2-webinar11Trening modul2-webinar11
Trening modul2-webinar11
 
Применение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектовПрименение behave+webdriver для тестирования Web-проектов
Применение behave+webdriver для тестирования Web-проектов
 

Вёрстка WordPress тем - WP Kharkiv Meetup #1

  • 2. Обо мне 2 Кузовлев Дмитрий Верстальщик / WordPress Developer kuzovlev.dev@gmail.com
  • 3. План 3 1. Содержимое WordPress темы a. Файлы шаблонов b. Иерархия шаблонов 2. CSS & JS a. Тонкости подключения b. Полезные функции 3. О functions.php a. Что не стоит добавлять в functions.php? b. Какие альтернативы существуют? 4. Кастомные шаблоны. Продвинутое назначение шаблона 5. Зачем нужна дочерняя тема и как её создать? 6. Правила разработки и отладка в WordPress
  • 4. Как устроена тема WordPress 4 /wp-content/themes/my-theme/...
  • 5. style.css 5 /* Theme Name: Twenty Fifteen Theme URI: https://wordpress.org/themes/twentyfifteen Author: the WordPress team Author URI: https://wordpress.org/ Description: Our 2015 default theme is clean, blog-focused, and designed for clarity... Version: 1.0 License: GNU General Public License v2 or later */ /* Theme styles are here */ ...
  • 6. Файлы шаблонов 6 Home Templates: front-page.php home.php Static Page Templates: custom-page.php page-contact.php page-3.php page.php Archive Templates: author.php category.php tag.php date.php taxonomy.php archive.php Single Templates: attachment.php single.php single-product.php Search Results Template: search.php Error 404 Template: 404.php index.php
  • 9. Модульные файлы шаблонов 9 /wp-content/themes/my-theme/... header.php sidebar.php footer.php tpl.part-gallery.php get_header() header-product.php get_header( 'product' ) get_sidebar() get_footer() get_template_part( 'tpl.part', 'gallery' ) searchform.php get_search_form() comments.php comments_template()
  • 10. CSS & JS Тонкости подключения 10
  • 11. Подключение CSS & JS 11 header.php: <head> ... <link rel="stylesheet" href="http://mysite.com/css/style.css" > <script src="http://mysite.com/js/my-script.js" ></script> ... </head> functions.php: function add_js_css_to_head () { echo '<link rel="stylesheet" ref="http://mysite.com/css/style.css">' ; echo '<script src="http://mysite.com/js/my-script.js"></script>' ; } add_action( 'wp_head', 'add_js_css_to_head' );
  • 12. Подключение CSS & JS 12 header.php: <head> ... <link rel="stylesheet" href="http://mysite.com/css/style.css" > <script src="http://mysite.com/js/my-script.js" ></script> ... </head> functions.php: function add_js_css_to_head () { echo '<link rel="stylesheet" ref="http://mysite.com/css/style.css">' ; echo '<script src="http://mysite.com/js/my-script.js"></script>' ; } add_action( 'wp_head', 'add_js_css_to_head' );
  • 13. 13 Функции регистрации CSS & JS wp_register_style( $handle, // *идентификатор $src, // *URL к файлу стилей $depends, // массив идентификаторов стилей, от которых зависит регистрируемый $version, // номер версии $media // медиа-тип ('all', 'screen', 'handheld' или 'print') ); wp_register_script( $handle, // *идентификатор $src, // *URL к скрипту $depends, // массив идентификаторов скриптов, от которых зависит регистрируемый $version, // номер версии $in_footer // где выводить скрипт ('wp_head' или 'wp_footer')? ); Функции подключения CSS & JS wp_enqueue_style( $handle ); wp_enqueue_script( $handle ); http://codex.wordpress.org/Function_Reference/wp_register_style http://codex.wordpress.org/Function_Reference/wp_register_script http://codex.wordpress.org/Function_Reference/wp_enqueue_style http://codex.wordpress.org/Function_Reference/wp_enqueue_script
  • 14. Хуки для подключения CSS & JS 14 Frontend : add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_style' ); add_action( 'wp_enqueue_scripts', 'mytheme_enqueue_script' ); Backend (admin panel) : add_action( 'admin_enqueue_scripts', 'mytheme_enqueue_style' ); add_action( 'admin_enqueue_scripts', 'mytheme_enqueue_script' ); Login Page : add_action( 'login_enqueue_scripts', 'mytheme_enqueue_style' ); add_action( 'login_enqueue_scripts', 'mytheme_enqueue_script' ); http://codex.wordpress.org/Plugin_API/Action_Reference/wp_enqueue_scripts http://codex.wordpress.org/Plugin_API/Action_Reference/admin_enqueue_scripts http://codex.wordpress.org/Plugin_API/Action_Reference/login_enqueue_scripts
  • 15. Полный код подключения CSS & JS 15 function register_and_enqueue_style() { wp_enqueue_style( 'my-style', get_stylesheet_directory_uri() . '/css/my-style.css', array( 'bootstrap-main' ), '1.0.1', 'screen' ); } function register_and_enqueue_script() { wp_enqueue_script( 'my-script', get_stylesheet_directory_uri() . '/js/my-script.js', array( 'jquery' ), '1.0.1' ); } add_action( 'wp_enqueue_scripts', 'register_and_enqueue_style' ); add_action( 'wp_enqueue_scripts', 'register_and_enqueue_script' );
  • 16. CSS: Полезные функции 16 Добавление inline-стилей ( <style>/* inline styles*/</style> ) : wp_add_inline_style( 'my-style', "h2 { font-family: { $font_family }; }" ); Был ли CSS файл зарегистрирован / добавлен в очередь / выведен / ожидает вывода: wp_style_is( 'my-style', 'registered' /* or 'enqueued', 'done', 'to_do' */ ); Подключение стилей для Internet Explorer : wp_style_add_data( 'my-style-ie', 'conditional', 'lt IE 9' ); Удаление CSS файла из очереди вывода стилей : wp_dequeue_style( 'my-style' ); Отмена регистрации CSS файла : wp_deregister_style( 'my-style' );
  • 17. JS: полезные функции 17 Локализация JavaScript : wp_localize_script( 'my-script', 'object_name', array( 'count' => 5, 'color' => $color ) ); Был ли JS файл зарегистрирован / добавлен в очередь / выведен / ожидает вывода: wp_script_is( 'my-style', 'registered' /* or 'enqueued', 'done', 'to_do' */ ); Удаление JS файла из очереди вывода скриптов : wp_dequeue_script( 'my-script' ); Отмена регистрации JS файла : wp_deregister_script( 'my-script' );
  • 18. О functions.php... 18 ● Лежит в корне темы: /wp-content/themes/my-theme/functions.php ● Загружается при запросе любой страницы (включая админку) ● Выполняется только тогда, когда тема активирована Позволяет: ● Определять дополнительные функции ● Переопределять существующие функции ● Устанавливать различные параметры для ядра WordPress ● Изменять поведение Wordpress через хуки и фильтры
  • 19. Когда использовать functions.php 19 ● Объявление сайдбаров для виджетов темы ● Определение путей к файлам локализации темы ● Включение поддержки темой различных Wordpress фич ('post-formats', 'post-thumbnails', 'widgets', 'menus' ...) ● Подключение скриптов и стилей для темы ● Создание раздела с настройками темы ● Дополнительные функции используемые в шаблонах темы ● Регистрация новых размеров миниатюр для темы
  • 20. Когда не использовать functions.php 20 ● Код счетчиков Google Analytics или Яндекс.Метрики ● Добавление кастомных типов контента и таксономий ● Регистрация дополнительные ролей и возможностей пользователей ● Добавление шорткодов
  • 21. Если не в functions.php, то куда? 21 Regular Plugin Must Use Plugin
  • 23. Продвинутое назначение шаблона 23 function custom_templates( $template ) { global $post; $post_format = get_post_format( $post->ID ); $has_thumb = has_post_thumbnail( $post->ID ); if( is_single() && $post_format === 'gallery' && $has_thumb ){ if ( $new_template = locate_template( array( 'custom-template.php' ))) { return $new_template; } } return $template; } add_filter( 'template_include', 'custom_templates' );
  • 24. Дочерняя тема в WordPress Who’s your (theme’s) daddy? 24
  • 25. Дочерняя WP тема “A child theme is a theme that inherits the functionality and styling of another theme, called the parent theme. Child themes are the recommended way of modifying an existing theme.” - The WordPress Codex http://codex.wordpress.org/Child_Themes 25
  • 26. Дочерняя Wordpress тема: ● имеет родительскую тему ● лежит в папке /wp-content/themes/ с остальными темами ● наследует внешний вид и весь функционал родительской темы … и применяется если необходимо: ● вносить изменения в родительскую тему ● кастомизировать дизайн родительской темы ● расширить возможности родительской темы новым функционалом 26 /wp-content /themes /twentyfifteen /twentyfifteen-child
  • 29. functions.php и дочерняя тема 29 if ( ! function_exists ( 'theme_special_nav' ) ) { function theme_special_nav () { // Do something. } }
  • 31. Стандарты кодирования 31 ● повышаем читаемость своего кода ● упрощаем чтение и понимание исходников WordPress ● говорим с другими разработчиками на одном языке https://make.wordpress.org/core/handbook/coding-standards/php/ https://make.wordpress.org/core/handbook/coding-standards/javascript/ https://make.wordpress.org/core/handbook/coding-standards/html/ https://make.wordpress.org/core/handbook/coding-standards/css/
  • 32. Debugging in WordPress 32 // Включаем режим отладки в wp-config.php define( 'WP_DEBUG', true ); http://codex.wordpress.org/Debugging_in_WordPress
  • 33. Логирование ошибок 33 // Включаем логирование в wp-config.php define( 'WP_DEBUG', true ); define('WP_DEBUG_LOG' , true); // Выключаем отображение ошибок на сайте define('WP_DEBUG_DISPLAY' , false);
  • 34. CSS & JS debug 34 // Подключаем dev версии JS & CSS файлов define('SCRIPT_DEBUG' , true);
  • 35. Плагин Debug Bar 35 ● Notices / Warnings ● потребляемая память ● выполненные SQL запросы https://wordpress.org/plugins/debug-bar/ ● состояние объектного кэширования ● информация о запросе WP_Query ● использование устаревших функций