Вывод работ портфолио в виде сетки с фильтром – урок 27
Данные у нас добавляются и выводятся, но хотелось бы не просто выводить данные, а сделать что-то похожее на настоящее портфолио, со списком работ которые можно будет просматривать и фильтровать. Сейчас же, наше портфолио выглядит как обычные записи. Увидеть работу созданного нами ранее портфолио можно по ссылке https://{ваш сайт}/my-portfolio/
То как портфолио выводиться сейчас
Как будет выводиться портфолио после доработки
Демо галереи на сайте разработчика
Продолжаем работу над нашей темой
Я думаю вам, как и мне, не очень нравиться, что ссылка выглядит так /my-portfolio/, давайте изменим это в файле /wp-content/themes/my_theme_tmp/functions/custom-type.php.
Изменим slug такой my-portfolio на portfolio. Если вы зайдете по вашей ссылке https://{ваш сайт}/portfolio/, то можете столкнуться с проблемой, так как у нас уже была ранее создана страница с ярлыком (slug) portfolio. Для того чтобы наши записи снова хорошо выводились, давайте удалим страницу с ярлыком portfolio.
После удаления страницы wordpress все еще помнит ее. Чтобы окончательно закрыть вопрос с ярлыком portfolio нам необходимо удалить эту страницу из корзины.
У меня после этих действий перестал отображаться шаблон отдельной страницы, но я нашел выход. Если у вас такая же ошибка, то вам необходимо в настройках в разделе «Постоянные ссылки» сначала переключиться на вид по умолчанию (Default), чтобы все ссылки работали в виде https://wp-admin.com.ua/?p=123, сохраните настройку.
После сохранения снова в настройках ссылок выбираем «Название записи«, как показано ниже и сохраняем.
После этих не хитрых манипуляций у вас снова должны нормально работать ссылки и новый ярлык произвольного типа /portfolio/.
Настройка шаблона вывода
После настройки красивых ссылок перейдем к настройке шаблона для вывода всех работ в портфолио. Шаблон мы назовем archive-my_works.php (archive-{post type}.php). Так как наш тип назывался my_work, то создание файла с таким названием будет автоматически присвоено для списка записей данного типа.
Название нашего типа можно подсмотреть в файле /wp-content/themes/my_theme_tmp/functions/custom-type.php, на рисунке ниже я покажу где смотреть.
Поместим в созданный шаблон базовый код верхней, центральной и нижней части.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
<?php get_header(); ?> <div id="header-wrapper"> <?php get_template_part( 'content-top', get_post_format() ); ?> </div> <!-- Content --> <div id="content-wrapper"> <div id="content"> <div class="container"> <div class="row"> <!-- тут будет вывод портфолио --> </div> </div> </div> </div> <?php get_template_part( 'content-bottom', get_post_format() ); get_footer(); ?> |
Так как портфолио будет использовать новые скрипты, то нам будет необходимо их подключить. Скрипты нужно подключить так, чтобы они выводились между тегами <head></head>, но не изменяли основной код шаблона header.php.
Для подключения скриптов создайте файл /functions/ создадим файл custom-header-script.php и подключите его в functions.php нашей темы.
В файл custom-header-script.php вносим код для подключения скрипта галереи.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
<?php function my_scripts_method() { $tmpDir = get_template_directory_uri(); if ( uGetPostType() == 'portfolio'){ wp_register_script( 'easing-portfolio', $tmpDir.'/js/simple-portfolio-page/js/jquery.easing.min.js'); wp_enqueue_script( 'easing-portfolio' ); wp_register_script( 'mixitup-portfolio', $tmpDir.'/js/simple-portfolio-page/js/jquery.mixitup.min.js'); wp_enqueue_script( 'mixitup-portfolio' ); wp_register_script( 'custom-portfolio', $tmpDir.'/js/simple-portfolio-page/js/custom.js'); wp_enqueue_script( 'custom-portfolio' ); } } add_action( 'wp_enqueue_scripts', 'my_scripts_method' ); function add_my_stylesheet() { $tmpDir = get_template_directory_uri(); if ( uGetPostType() == 'portfolio'){ wp_register_style('normalize-portfolio', $tmpDir.'/js/simple-portfolio-page/css/normalize.css'); wp_enqueue_style('normalize-portfolio'); wp_register_style('layout-portfolio', $tmpDir.'/js/simple-portfolio-page/css/layout.css'); wp_enqueue_style('layout-portfolio'); } } add_action('wp_print_styles', 'add_my_stylesheet'); function uGetPostType(){ $post_type = get_post_type(); if ($post_type){ $post_type_data = get_post_type_object( $post_type ); $post_type_slug = $post_type_data->rewrite['slug']; return $post_type_slug; } } ?> |
Представленный выше скрипт подключает CSS и JS файлы в WordPress на то место, где в файле header.php установлена функция wp_head(). Подробнее о функциях подключения шрифтов можно почитать на моей статье «Работа с jquery в WordPress«, которая на примере библиотеки jquery показывает как подключать скрипты. Также о подключении стилей можно почитать в кодексе WordPress.
В моем примере есть пользовательская функция uGetPostType() созданная мной, она служит для вытаскивания текущего типа данных на текущей странице. На основе полученного типа мы определяем нужно нам добавлять скрипты в шапку сайта или нет.
Следующим шагом будет добавление галереи к файлам вашего сайта. Скачайте архив галереи ниже и положите его в папку /wp-content/themes/my_theme_tmp/js/simple-portfolio-page/… .
Предлагаю вам мой код для вывода данной галереи в файле archive-my_works.php:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
<?php get_header(); ?> <div id="header-wrapper"> <?php get_template_part( 'content-top', get_post_format() ); ?> </div> <!-- Content --> <div id="content-wrapper"> <div id="content"> <div class="container"> <div class="row"> <?php // берем все имеющиеся термы (категории нашего портфолио) из таксономии category_portfolio $categories = get_terms( 'category_portfolio', array( 'orderby' => 'count', // в начале показывает категории с большим количеством работ 'hide_empty' => 0, // скрывает пустые категории ) ); ?> <div class="container"> <ul id="filters" class="clearfix"> <?php /* формируем структуру меню фильтра для портфолио на основе полученных категорий */ foreach($categories as $cat){ if($cat->parent==0 && $cat->count>0){ $singleCat .= '<li><span class="filter" data-filter="'.$cat->slug.'">'.$cat->name.'</span></li>'; $allCat .= $cat->slug.' '; } } echo '<li><span class="filter active" data-filter="'.$allCat.'">All</span></li>'; echo $singleCat; /* формируем структуру меню фильтра для портфолио на основе полученных категорий */ ?> </ul> <div id="portfoliolist"> <?php // выводим работы из портфолио $args = array( 'post_type' => 'my_works' // указываем записи какого типа необходимо достать ); $query = new WP_Query; $portfolio_item = $query->query($args); // делаем запрос данных foreach( $portfolio_item as $item ){ $category = get_the_terms( $item->ID, 'category_portfolio' ); // достае все термы таксономии category_portfolio $flag = 0; foreach($category as $catItem){ if($flag == 0){ // если запись закреплена за одной категорией, категории сохраняются без запятой $dataCat = $catItem->slug; $dataCatComma = $catItem->name; }else{ // если запись закреплена за несколькими категориями, категории сохраняются с запятой $dataCat .= ' '.$catItem->slug; $dataCatComma .= ', '.$catItem->name; } $flag++; } $attachmentId = get_post_thumbnail_id($item->ID); $thymbUrl = wp_get_attachment_url($attachmentId, 'full', true); // берем URL миниатюры, которая относится к записи echo ' <div class="portfolio '.$dataCat.'" data-cat="'.$dataCat.'"> <div class="portfolio-wrapper"> <img src="'.$thymbUrl.'" alt="" /> <div class="label"> <div class="label-text"> <a class="text-title">'.$item->post_title.'</a> <span class="text-category">'.$dataCatComma.'</span> </div> <div class="label-bg"></div> </div> </div> </div> '; } ?> </div> </div><!-- container --> </div> </div> </div> </div> <?php get_template_part( 'content-bottom', get_post_format() ); get_footer(); ?> |
Код немаленький, но я добавил комментарии, чтобы было проще разобраться в нем. Ниже вы можете скачать полный код шаблона на текущий момент.
Последнее что нам осталось это добавить ссылку на портфолио в меню нашего сайта. Заходим в меню Внешний вид -> Меню -> Ссылки и добавляем новую ссылку /portfolio/, ставим полученную ссылку в нужное место.
Перемещаем пункт меню в нужное место, чтобы при заходе на сайт его было видно.
Шаблон портфолио готов к работе, постарайтесь разобраться в уроке, если не получится, то задавайте вопросы в комментариях. Постараюсь на них отвечать как можно скорее.
В следующем уроке мы реализуем открытие каждой работы во всплывающем окне (лайтбокс) для портфолио.

/*

- Базовый курс по веб-дизайну;
- Верстка сайтов;
- Общий курс по CMS WordPress и продолжение курса по разработке шаблонов;
- Разработка сайтов на PHP.