Урок #13. Интеграция вёрстки. Страница записи. Создание темы WordPress.
Сейчас мы будем производить интеграцию вёрстки для самой сложной страницы — single.html, поскольку нужно будет модифицировать не только стандартные блоки, такие как: название, мета данные и текст записи, но и еще блок — похожие записи и форма комментариев. Хотя это всё не так уж и сложно, как говорится «глаза боятся, а руки делают!».
Подготовка к интеграции
0. Переименовываем файл single.html в single.php.
Разбиение на блоки: header, sidebar и footer
Открываем файл single.php для внесения изменений.
Выделяем весь код сверху до закрытия блока div с классом header и удаляем его. У вас должен быть удалён этот участок кода.
<!DOCTYPE html> <html> <head> <!-- Charset --> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <!-- Page info --> <title>Страница записи</title> <meta name="language" content="ru"> <!-- Favicon --> <link rel="shortcut icon" href="favicon/favicon.png" type="image/png"> <link rel="shortcut icon" href="favicon/favicon.ico" type="image/x-icon"> <link rel="apple-touch-icon" sizes="60x60" href="favicon/favicon_apple_60.png"> <link rel="apple-touch-icon" sizes="76x76" href="favicon/favicon_apple_76.png"> <link rel="apple-touch-icon" sizes="120x120" href="favicon/favicon_apple_120.png"> <link rel="apple-touch-icon" sizes="152x152" href="favicon/favicon_apple_152.png"> <!-- Style CSS--> <link rel="stylesheet" href="reset.css"> <link rel="stylesheet" href="style.css"> <!-- JQuery Library --> <script type="text/javascript" src="http://code.jquery.com/jquery.min.js"></script> </head> <body> <!-- Обёртка --> <div id="wrapper"> <!-- Шапка --> <div class="header"> <!-- Название блога и описание --> <div class="bloginfo"> <h1><a href="">Блог Артёма Санникова</a></h1> <p>Подробные пошаговые обучающие уроки по сайтостроению и продвижению.</p> </div> <!-- Навигация --> <div class="nav"> <ul> <li class="current_page_item"><a href="">Главная</a></li> <li><a href="">Об авторе</a></li> <li><a href="">Контакты</a></li> <li><a href="">Карта сайта</a></li> </ul> </div> </div>
Вместо удалённого кода вставляем функцию для подключения файла header.php.
<?php get_header(); ?>
Выделяем блоки sidebar и footer, а затем удаляем их. На их место вставляем конструкции для подключения файлов sidebar.php и footer.php.
<?php get_sidebar(); ?> //подключение файла sidebar.php <?php get_footer(); ?> //подключение файла footer.php
Область для вывода текста записи
Перед блоком div с классом information-post вставляем конструкцию, которая запускает цикл для вывода информации на текущей странице.
<?php if(have_posts()) : ?> <?php while(have_posts()) : the_post(); ?>
После закрытия блока div с классом text-post вставляем конструкцию, которая завершит выполнение цикла.
<?php endwhile; ?> <?php endif; ?>
Переходим к блоку information-post в котором необходимо написать четыре функции для вывода названия страницы, категории, даты публикации и количества просмотров.
Важный момент: если вы хотите, чтобы у вас отображалось количество просмотров записи/страницы, то вам необходимо установить плагин — WP-PostViews.
#было <!-- Информация о записи страницы/записи--> <div class="information-post"> <h1>Тестовая страница</h1> <p>Категория: Тест / Опубликовано: 2017-07-24 / Просмотров: 30</p> </div> #стало <!-- Информация о записи страницы/записи--> <div class="information-post"> <h1><?php the_title(); ?></h1> <p>Категория: <?php $category = get_the_category(); echo $category[0]->cat_name; ?> / Опубликовано: <?php the_time('Y-m-d'); ?> / Просмотров: <?php if(function_exists('the_views')) { the_views(); } ?></p> </div>
Блок text-post очищаем от ненужной тестовой информации. Вместо тестовой информации напишем функцию, которая будет выводить текст записи.
#было <!-- Текст страницы/записи --> <div class="text-post"> <p>Конечно, возникают некоторые вопросы, связанные с использованием Lorem ipsum на сайтах и проектах, ориентированных на кириллический контент – написание символов на латыни и на кириллице значительно различается.</p> <p>И даже с языками, использующими латинский алфавит, могут возникнуть небольшие проблемы: в различных языках те или иные буквы встречаются с разной частотой, имеется разница в длине наиболее распространенных слов. Отсюда напрашивается вывод, что все же лучше использовать в качестве «рыбы» текст на том языке, который планируется использовать при запуске проекта.</p> <p>Сегодня существует несколько вариантов Lorem ipsum, кроме того, есть специальные генераторы, создающие собственные варианты текста на основе оригинального трактата, благодаря чему появляется возможность получить более длинный неповторяющийся набор слов.</p> </div> #стало <!-- Текст страницы/записи --> <div class="text-post"> <?php the_content(); ?> </div>
Похожие записи
Перемещаемся в блок div с классом related-post, и произведём небольшую модификацию этого блока.
Похожие записи у нас выводятся маркированным списком, который начинается с <ul>. Сразу после открытия <ul> вставляем этот код:
<?php $categories = get_the_category($post->ID); if ($categories) { $category_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, //сортировка по тегам (меткам) 'post__not_in' => array($post->ID), 'showposts'=>3, //количество выводимых ячеек 'orderby'=>rand, // в случайном порядке 'caller_get_posts'=>1); //исключаем одинаковые записи $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo ''; while ($my_query->have_posts()) { $my_query->the_post(); ?>
Сейчас нужно изменить элемент списка <li>, то есть вставить две функции, которые будут выводить название похожей записи и ссылку на нее.
#было <li><a href="">Урок #1. Структура темы WordPress.</a></li> #стало <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
Перед закрывающим <ul> вставляем еще небольшой фрагмент кода:
<?php } echo ''; } wp_reset_query(); } ?>
Вот что у нас получилось в результате модификации блока «Похожие записи».
<!-- Похожие записи --> <div class="related-post"> <p>Еще записи по теме</p> <ul> <?php $categories = get_the_category($post->ID); if ($categories) { $category_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, //сортировка по тегам (меткам) 'post__not_in' => array($post->ID), 'showposts'=>3, //количество выводимых ячеек 'orderby'=>rand, // в случайном порядке 'caller_get_posts'=>1); //исключаем одинаковые записи $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo ''; while ($my_query->have_posts()) { $my_query->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php } echo ''; } wp_reset_query(); } ?> </ul> </div>
Форма комментариев
После разделительной линии (блок div с классом devide-line), которая идёт после блока с похожими записями вставляем функцию для вывода встроенной формы комментариев.
<!-- Форма комментариев --> <?php comments_template(); ?>
Для того, чтобы форма комментариев отображалась корректно необходимо добавить следующий код в файл style.css.
/*Форма комментариев*/ #commentform p.comment-form-author > label, #commentform p.comment-form-comment > label, #commentform p.comment-form-email > label, #commentform p.comment-form-url > label { display: block; margin: 0 0 10px 0; font-size: 14px; color: #666; line-height: 1; } #commentform input[type="text"] { font-family: 'Open Sans', sans-serif; font-size: 14px; width: 240px; height: auto; color: #666; padding: 10px 5px 10px 5px; margin: 0 10px 10px 0; border: 1px solid #dedede; border-radius: 2px; } #commentform textarea { font-family: 'Open Sans', sans-serif; width: 97.8%; height: 100px; font-size: 14px; color: #666; padding: 1% 1%; margin: 0 0 10px 0; border: 1px solid #dedede; resize: vertical; border-radius: 2px; } #commentform input[type="submit"]{ cursor: pointer; font-family: 'Open Sans', sans-serif; font-size: 14px; color: #333; background-color: #FFD15C; margin: 10px 0 0 0; padding: 6px 5px; border: 1px solid #FFD15C; border-radius: 2px; transition: 0.2s; -moz-transition: 0.2s; -o-transition: 0.2s; -webkit-transition: 0.2s; } #commentform input[type="submit"]:hover{ color: #fff; background: #2689b0; border: 1px solid #2689b0; transition: 0.2s; -moz-transition: 0.2s; -o-transition: 0.2s; -webkit-transition: 0.2s; } /*Количество комментариев*/ #comments-wordpress h3#comments { font-size: 14px; font-weight: normal; color: #5f5f5f; } /*Текст с количеством комментариев*/ h3#comments { font-size: 16px; font-weight: bold; color: #333; line-height: 1; } /*Текст - Добавить комментарий*/ #respond > h3 { font-size: 16px; font-weight: bold; color: #333; line-height: 1; margin: 30px 0; } #respond > h3 > a { color: #2d3e50; text-decoration: underline; } #respond > h3 > a:hover { text-decoration: none; color: #333; } /*отменить комментарий*/ a#cancel-comment-reply-link { font-size: 16px; color: #2d3e50; text-decoration: underline; } a#cancel-comment-reply-link:hover { text-decoration: none; color: #333; } /*Текст в форме комментариев для зарегистрированного пользователя*/ #commentform p.comment-notes { font-size: 14px; color: #666; line-height: 1; margin: 0 0 30px 0; } #commentform p.comment-notes a { text-decoration: underline; color: #5b892f; } #commentform p.comment-notes a:hover { text-decoration: none; color: #333; } /*Текст для зарегистрованного пользователя (вы вошли как)*/ p.logged-in-as { font-size: 14px; color: #666; line-height: 1; margin: 0 0 30px 0; } p.logged-in-as a { text-decoration: underline; color: #666; } p.logged-in-as a:hover { text-decoration: none; color: #2d3e50; } /*Список комментариев*/ ol.commentlist { width:100%; list-style:none; list-style-position:outside; display:block; margin: 30px 0; padding:0 0; } ol.commentlist ul { list-style-type:none; list-style-position:outside; margin:0; } /*Стиль комментария*/ ol.commentlist li { padding: 0 0 10px 40px; margin: 30px 0 0 0; position:relative; border-bottom:1px solid #f3f4f5; background:none; outline: 0px solid green; } /*Коментарий ожидает проверки*/ em.comment-awaiting-moderation { font-size: 12px; color: #fff; font-style: normal; background-color: #e0891f; padding: 2px 2px 2px 2px; margin: 2px 0 2px 13px; } /*Выделение комменария автора поста*/ .commentlist li.bypostauthor > .comment-body { border-left:2px solid #2d3e50; margin: 0 0 0 5px; } ol.commentlist li p { font-size: 14px; color: #333; line-height: 1.8; margin:10px 0 10px 13px; } ol.commentlist li p a { text-decoration: underline; color: #2d3e50; } ol.commentlist li p a:hover { color: #333; text-decoration: none; } /*Автор комментария*/ div.comment-author.vcard { margin:0 0 3px 13px; } div.comment-author.vcard cite { font-size: 14px; color: #333; font-style: normal; } div.comment-author.vcard cite a.url { text-decoration: none; color: #333; } div.comment-author.vcard cite a.url:hover { color: #2d3e50; text-decoration: underline; } /*Дата публикации комментария*/ div.comment-meta.commentmetadata { display: inline-block; margin:0 0 0 13px; } ol.commentlist li .comment-meta a { font-size: 12px; color: #ccc; text-decoration: none; } /*Аватар комментатора*/ ol.commentlist li .avatar { background:#fff; padding: 2px 2px 2px 2px; border:1px solid #ccc; position:absolute; left:0; top:0; border-radius:50%; } /*Кнопка - Ответить на комментарий*/ ol.commentlist .reply { position:absolute; right:0px; top:0px; } ol.commentlist .reply span.comment-reply-link { font-size: 14px; color: #ccc; text-decoration: none; background-color: #fff; border: 1px solid #f3f4f5; padding: 3px 3px; display:block; border-radius: 2px; cursor: pointer; } ol.commentlist .reply span.comment-reply-link:hover { color: #fff; background-color: #2689b0; border: 1px solid #2689b0; } /*Дочерние комментарий*/ ol.commentlist li .children li { margin-top: 20px; padding-top: 20px; padding-bottom:0; border-top:1px solid #E5E8EA; border-bottom:none; overflow:hidden; outline: 0px solid green; } /*Аватар коментатора*/ ol.commentlist li .children li .avatar { top:20px; } /*Кнопка ответить*/ ol.commentlist li .children li .reply { top: 20px; } .reply a.comment-reply-link { font-size: 12px; color: #ccc; text-decoration: none; padding: 0 2px; border: 1px solid #ccc; border-radius: 2px; } .reply a.comment-reply-link:hover { background: #2d3e50; color: #fff; border: 1px solid #2d3e50; cursor: pointer; }
Интеграция завершена
Окончательный вариант станицы — single.php, представлен ниже.
<?php get_header(); ?> <!-- Область для вывода контента --> <div class="content"> <?php if(have_posts()) : ?> <?php while(have_posts()) : the_post(); ?> <!-- Информация о записи страницы/записи--> <div class="information-post"> <h1><?php the_title(); ?></h1> <p>Категория: <?php $category = get_the_category(); echo $category[0]->cat_name; ?> / Опубликовано: <?php the_time('Y-m-d'); ?> / Просмотров: <?php if(function_exists('the_views')) { the_views(); } ?></p> </div> <!-- Текст страницы/записи --> <div class="text-post"> <?php the_content(); ?> </div> <?php endwhile; ?> <?php endif; ?> <!-- Разделительная линия --> <div class="devide-line"></div> <!-- Похожие записи --> <div class="related-post"> <p>Еще записи по теме</p> <ul> <?php $categories = get_the_category($post->ID); if ($categories) { $category_ids = array(); foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; $args=array( 'category__in' => $category_ids, //сортировка по тегам (меткам) 'post__not_in' => array($post->ID), 'showposts'=>3, //количество выводимых ячеек 'orderby'=>rand, // в случайном порядке 'caller_get_posts'=>1); //исключаем одинаковые записи $my_query = new wp_query($args); if( $my_query->have_posts() ) { echo ''; while ($my_query->have_posts()) { $my_query->the_post(); ?> <li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li> <?php } echo ''; } wp_reset_query(); } ?> </ul> </div> <!-- Разделительная линия --> <div class="devide-line"></div> <!-- Форма комментариев --> <?php comments_template(); ?> </div> <?php get_sidebar(); ?> <?php get_footer(); ?> </div> </body> </html>
Если у вас остались какие-то вопросы или вы нашли непонятный момент в описании, пишите в комментариях ниже и я вам обязательно отвечу.
С уважением, Артём Санников
Сайт: ArtemSannikov.ru
Метки: Wordpress, Создание темы.
Эдравствуйте. Отличные уроки!!!
Как вывести изображение миниатюры в записи? ВП_КОНТЕНТ разве этим не занимается?
За вывод миниатюры отвечает функция the_post_thumbnail