Advertisement
  1. Web Design
  2. WordPress

Как интегрировать SmoothState.js в тему WordPress

Scroll to top
Read Time: 9 min

() translation by (you can also view the original English article)

В предыдущем уроке мы использовали History Web API в статическом сайте, чтобы обеспечить плавные переходы между страницами. В этом уроке мы перейдем к следующему уровню, применяя то, что мы изучили на веб-сайте WordPress. Будет одно существенное различие; Мы будем использовать SmoothState.js вместо создания собственного с нуля.

SmoothState.js будет:

  • Запрашивать страницы асинхронно (AJAX) и заменять содержимое соответствующим образом.
  • Обновлять URL-адреса и историю просмотров через History Web API.

Мы выберем SmoothState.js по нескольким причинам:

  • Простота использования: это чрезвычайно простой в использовании плагин jQuery, не требующий практически никакой конфигурации для его запуска и работы.
  • API: SmoothState.js упакован различными методами, свойствами и перехватами, которые позволяют нам использовать его во многих возможных ситуациях.
  • Предварительная выборка и кэширование: эти две функции позволяют нашим переходам на странице быть намного более плавными и более быстрыми, чем то, что мы построили в предыдущем уроке.
  • Не указывает на практики: SmoothState.js не диктует нам, как мы применяем анимацию - мы можем опираться на CSS, jQuery, ванильный JavaScript или библиотеку анимации, такую как Velocity.js.
  • Испробована и оттестирована: учитывая, что во время разработки было закрыто более ста вопросов, мы можем предположить, что были исправлены многочисленные ошибки.

Изначальные требования

Есть несколько вещей, которые вы должны будете иметь, чтобы следовать этому руководству:

  • WordPress: наличие работающего сайта WordPress, либо локально на вашем компьютере, либо работа на онлайн-сервере. Если вам нужна помощь для этого шага, посмотрите «Как начать работу с WordPress» Тома МакФарлина, чтобы начать работу с базовым сайтом WordPress.
  • Тема: Во время этого урока мы будем использовать последнюю тему WordPress по умолчанию: TwentySixteen. Вы можете выбрать любую тему, но убедитесь, что тема соответствует стандартам WordPress.

1. Создайте дочернюю тему

Использование «дочерней темы» в WordPress (вместо непосредственной работы с исходными файлами темы) позволяет нам безопасно вводить новые или переопределять функциональность по умолчанию.

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

В нашем случае родительская тема - TwentySixteen. Дочерняя находится в другой новой папке «twentysixteen-child», которая содержит файл «functions.php» и таблицу стилей «style.css», следующим образом.

1
.
2
├── twentysixteen
3
└── twentysixteen-child

Наиболее важной частью дочерней темы является обозначение Template в заголовке таблицы стилей, в котором указывается отношение темы. Укажите Template с именем каталога родительской темы, в нашем случае twentysixteen

1
/**

2
Theme Name: Twenty Sixteen Child

3
Theme URI: https://webdesign.tutsplus.com

4
Author: Thoriq Firdaus

5
Author URI: https://tutsplus.com/authors/tfirdaus

6
Description: A child theme that adds an extra layer of glam to TwentySixteen

7
Version: 1.0.0

8
License: GNU General Public License v2 or later

9
License URI: https://www.gnu.org/licenses/gpl-2.0.html

10
Text Domain: twentysixteen

11


12
Template: twentysixteen

13
*/

После этого активируйте дочернюю тему через admin:

WordPress List of Theme Interface in the DashboardWordPress List of Theme Interface in the DashboardWordPress List of Theme Interface in the Dashboard
Включена дочерняя тема TwentySixteen: вы также можете добавить «screenshot.png»

2. Файлы JavaScript.

Нам нужно загрузить несколько файлов JavaScript в нашу тему WordPress. В принципе мы могли это сделать, добавив эти JavaScript непосредственно в тег head в файле header.php темы. Однако, следуя стандарту WordPress, рекомендуется использовать функцию wp_enqueue_script(), добавленную к functions.php, чтобы предотвратить конфликты:

1
wp_enqueue_script( 'smoothstate-js', 'assets/js/smoothstate.js', array( 'jquery' ), '0.5.2' );
2
wp_enqueue_script( 'script-js', 'assets/js/script.js', array( 'jquery', 'smoothstate-js' ), '1.0.0' );

Эта функция также позволяет нам устанавливать зависимости скриптов. В нашем случае «smoothstate.js» зависит от jQuery, поэтому WordPress загрузит jQuery перед загрузкой «smoothstate.js».

Наш файл «script.js» зависит от обоих сценариев, поэтому последовательность загрузки всех наших скриптов выглядит следующим образом:

1
<script type='text/javascript' src='wp-includes/js/jquery/jquery.js'></script>
2
<script type='text/javascript' src='assets/js/smoothstate.js'></script>
3
<script type='text/javascript' src='assets/js/script.js'></script>

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


3. Развертывание SmoothState.js

Давайте добавим следующий код в наш «script.js», чтобы запустить и запустить SmoothState.js:

1
( function( $ ) {
2
3
  $( function() { // Ready

4
5
		var settings = { 
6
			anchors: 'a'
7
		};
8
9
		$( '#page' ).smoothState( settings );
10
	} );
11
12
})( jQuery );

В приведенном выше коде мы выбираем #page (элемент, который обертывает содержимое страницы сайта) и развертываем SmoothState.js с его самой базовой конфигурацией.

Наши страницы должны обслуживаться без полной перезагрузки окна браузера при навигации по нашему сайту WordPress. Наши страницы теперь доставляются асинхронно.

Asynchronoous page loading in actionAsynchronoous page loading in actionAsynchronoous page loading in action
Извините меня за скучный контент.

В принципе, все готово! Тем не менее, есть несколько деталей, которые все же заслуживают внимания:

  • Есть несколько URL-адресов, которые не следует загружать асинхронно, например ссылку на #page  которая указывает на WordPress Admin, wp-admin или wp-login.php.
  • Ссылки с хешем, например #respond, не переходят к назначенным разделам на странице.
  • Наша загрузка страницы невероятно быстрая. Но еще не совсем плавная, поскольку мы не применили анимацию для передачи перехода.

4. Ссылки на WordPress Admin

На странице есть несколько ссылок, которые указывают на административную область WordPress, например ссылку «Редактировать» в каждом сообщении, «Вход в систему с правами администратора» и «Выход из системы» перед формой комментария.

The WordPress post edit link in the front-endThe WordPress post edit link in the front-endThe WordPress post edit link in the front-end
Ссылка «Изменить» в TwentySixteen, которая появляется, когда мы входим в систему.

Одна из проблем, когда SmoothState.js запрашивает Администратора, состоит в том, что мы не сможем вернуться на предыдущую страницу, когда нажмем кнопку Назад в браузере. Эта проблема возникает из-за того, что сценарий SmoothState.js отсутствует в области администратора для запроса и обслуживания предыдущей страницы.

WordPress DashboardWordPress DashboardWordPress Dashboard
Мы не сможем вернуться на предыдущую страницу после посещения Личного кабинета WordPress.

Нам нужно будет запретить SmoothState.js запрашивать какой-либо URL-адрес, указывающий на wp-admin или wp-login. Для этого мы можем использовать параметр blacklist  , как показано ниже:

1
( function( $ ) {
2
	$( function() { // Ready

3
		var settings = { 
4
			anchors: 'a'
5
			blacklist: '.wp-link'
6
		};
7
		$( '#page' ).smoothState( settings );
8
	} );
9
})( jQuery );

blacklist указывает SmoothState.js игнорировать ссылки с указанным селектором класса; И с учетом приведенного выше фрагмента кода, он будет игнорировать ссылки с классом wp-link. Это имя класса в настоящее время не существует, поэтому мы создадим новый класс и добавим его динамически в нужные ссылки:

1
function addBlacklistClass() {
2
	$( 'a' ).each( function() {
3
		if ( this.href.indexOf('/wp-admin/') !== -1 || 
4
			 this.href.indexOf('/wp-login.php') !== -1 ) {
5
			$( this ).addClass( 'wp-link' );
6
		}
7
	});
8
}

Эта функция оценивает каждый тег привязки на странице, а затем добавляет класс wp-link, если URL-адрес включает /wp-admin/ или /wp-login.php.

Мы выполняем эту функцию дважды, чтобы эффективно добавить класс к странице. Во-первых, при начальной загрузке страницы. Второй - после того, как SmoothState.js обслужил новую страницу через onAfter; Метод, который будет запускаться каждый раз, когда новый контент и анимация будут полностью доставлены.

1
function addBlacklistClass() {
2
	$( 'a' ).each( function() {
3
		if ( this.href.indexOf('/wp-admin/') !== -1 || 
4
			 this.href.indexOf('/wp-login.php') !== -1 ) {
5
			$( this ).addClass( 'wp-link' );
6
		}
7
	});
8
}
9
10
$( function() {
11
12
	addBlacklistClass();
13
14
	var settings = { 
15
		anchors: 'a',
16
		blacklist: '.wp-link',
17
		onAfter: function() {
18
			addBlacklistClass();
19
		}
20
	};
21
22
	$( '#page' ).smoothState( settings );
23
} );

5. Обработка ссылок с хешами

Затем нам нужно обработать ссылки с хэшем. В теме WordPress обычно мы находим ссылку, которая ссылается на раздел комментария Post или Page.

«Оставить комментарий» указывает на раздел комментария в сообщении.

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

1
( function( $ ) {
2
	...
3
	$( function() {
4
		...
5
			onAfter: function() {
6
				...
7
				var $hash = $( window.location.hash );
8
9
				if ( $hash.length !== 0 ) {
10
11
					var offsetTop = $hash.offset().top;
12
13
					$( 'body, html' ).animate( {
14
							scrollTop: ( offsetTop - 60 ),
15
						}, {
16
							duration: 280
17
					} );
18
				}
19
			}
20
		};
21
	} );
22
})( jQuery );

Как видно из приведенного фрагмента кода, мы добавили несколько строк кода в методе onAfter. Код извлекает хеш URL-адреса, а затем прокручивает до указанного раздела (если раздел присутствует на странице) с помощью jQuery Animation.

Leave a Comment link scroll in actionLeave a Comment link scroll in actionLeave a Comment link scroll in action
Плавно прокрутите до раздела «Комментарий» сообщения

6. Применение движения страницы

Нам нужно сделать изменение страницы более оживленным. Сначала мы добавим стили CSS, чтобы оживить страницу, в «styles.css» нашей дочерней темы следующим образом.

1
.site-content {
2
	-webkit-transition: -webkit-transform .28s, opacity .28s;
3
	-ms-transition: -o-transform .28s, opacity .28s;
4
	-o-transition: -o-transform .28s, opacity .28s;
5
	transition: transform .28s, opacity .28s;
6
}
7
.slide-out .site-content {
8
	-webkit-transform: translate3d( 0, 100px, 0 );
9
	-ms-transform: translate3d( 0, 100px, 0 );
10
	-o-transform: translate3d( 0, 100px, 0 );
11
	transform: translate3d( 0, 100px, 0 );
12
	opacity: 0;
13
}

.site-content - это имя класса, которое обертывает основное сообщение или содержимое страницы, а .slide-out - это дополнительный класс, который мы создали, чтобы вывести контент.

1
( function( $ ) {
2
	...
3
	$( function() {
4
		...
5
		var settings = { 
6
			...
7
			onStart: {
8
				duration: 280, // ms

9
				render: function ( $container ) {
10
					$container.addClass( 'slide-out' );
11
				}
12
			},
13
			onAfter: function( $container ) {
14
				...
15
				$container.removeClass( 'slide-out' );
16
			}
17
		};
18
19
		$( '#page' ).smoothState( settings );
20
	} );
21
22
})( jQuery );

Учитывая вышеприведенный код, мы используем метод onStart, чтобы добавить класс, когда SmoothState.js начинает вытягивать новый контент. Затем через onAfter мы удаляем класс после того, как будет доставлено новое содержимое.

И это все, что нужно сделать! Тем не менее, есть одна вещь, которую следует иметь в виду относительно совместимости с некоторыми плагинами WordPress.

Что дальше?

Доступно более 40,000 плагинов WordPress, даже не включая плагины, которые размещаются вне официального хранилища, например, на CodeCanyon. Там есть много плагинов, которые могут быть несовместимы (или могут даже сломать) нашу асинхронную загрузку, особенно те, которые в какой-то степени зависят от сценариев.

Следующий список - это приблизительная оценка некоторых из них, которые вам, возможно, потребуется изучить при их использовании в сочетании с SmoothState.js:

Кроме того, JavaScript интенсивно используется в Customizer в WordPress Admin. Таким образом, вы можете подумать о выгрузке SmoothState.js в Настройщике, если что-нибудь когда-нибудь сломается.

Заключение

Мы узнали, как интегрировать SmoothState.js в WordPress, а также использовать дочернюю тему в качестве нашей стратегии разработки. И это только начало! Мы могли бы, например, расширить то, что мы сделали, в плагине с параметрами в тех метах, где обычные пользователи могут легко настраивать вывод.

Вдохновение

Если вы ищете вдохновения, ознакомьтесь с этими многоцелевыми темами WordPress на Envato Market, которые используют похожие методы загрузки страниц AJAX:

bridgebridgebridge
Bridge
salientsalientsalient
salient
stokholmstokholmstokholm
stockholm

Дополнительные ссылки

Advertisement
Did you find this post useful?
Want a weekly email summary?
Subscribe below and we’ll send you a weekly email summary of all new Web Design tutorials. Never miss out on learning about the next big thing.
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.