Advertisement
  1. Web Design
  2. WordPress

Cara Mengintegrasikan SmoothState.js ke Tema Wordpress

Scroll to top
Read Time: 9 min

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

Di panduan kami sebelumnya, kita menggunakan History Web API dalam sebuah situs statis untuk menyajikan transisi laman yang halus. Di panduan ini, kita akan berlanjut ke tingkat selanjutnya dengan menerapkan apa yang telah kita pelajari dalam sebuah situs Wordpress. Akan ada satu perbedaan krusial; kita akan menggunakan SmoothState.js ketimbang membuatnya dari awal.

SmoothState.js akan:

  • Meminta halaman secara asinkron dan menggantikan kontennya.
  • Memperbaharui URL dan riwayat penjelajahan melalui History Web API.

Kita memilih SmoothState.js untuk beberapa alasan:

  • Mudah digunakan: Dia adalah plugin jQuery yang sangat mudah digunakan yang hanya membutuhkan sedikit konfigurasi untuk berjalan.
  • API: SmoothState.js dikemas dengan method, property dan hook yang mengizinkan kita untuk melatakkannya di aneka situasi yang mungkin.
  • Prefetching and caching: KEdua fitur ini mengizinkan halaman kita bertansisi secara lebih halus dan cepat dari yang kita buat di panduan sebelumnya.
  • Dia terbuka: SmoothState.js tidak mengatur cara kita menerapkan animasinya-kita bisa menyandarkannya di CSS, jQuery, Vanilla JavaScript, atau pustaka animasi seperti Velocity.js
  • Telah diuji coba: Mempertimbangkan lebih dari seratus masalah yang telah ditutup selama pengembangannya, kita bisa berasumsi banyak bug telah diselesaikan.

Prasyarat

Ada beberapa hal yang kamu perlukan untuk mengikuti panduan ini:

  • WordPress: Memiliki sebuah situs WordPress yang berjalan, baik secara lokal di komputermu atau online di sebuah server. Jika kamu butuh bantuan untuk tahap ini, cek Cara Memulai WordPress oleh Tom McFarlin untuk mempersiapkan dan menjalankan sebuah situs WordPress dasar.
  • Sebuah Tema: Selama panduan ini kita akan menggunakan tema bawaan WordPress terbaru: TwentySixteen. Kamu bisa memilih tema manapun, tapi pastikan temanya sesuai dengan standar WordPress.

1. Buat Sebuah Anak Tema

Menggunakan sebuah "anak tema" di WordPress (Ketimbang mengerjakan langsung dengan berkas tema asli) mengizinkan kita secara aman mengenalkan dan mengganti fungsi bawaan.

Ini adalah praktik terbaik ketika mengkostumisasi tema, semenja banyak perubahan yang kamu buat akan tersimpan jika tema induknya diubah.

Dalam kasus kita, tema induknya adalah TwentySixteen. Anaknya akan tersimpan di folder situs "twentysixteen-child" yang mengandung sebuah berkas "functions.php" dan stylesheet "style.css", seperti berikut:

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

Bagian yang paling penting dari anak tema adalah notasi Template di header stylesheet yang menyatakan hubungan tema. Spesifikasikan Template dengan nama dari direktori induk tema, dalam kasus kita adalah 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
*/

Setelah siap, aktifkan anak tema melalui admin:

WordPress List of Theme Interface in the DashboardWordPress List of Theme Interface in the DashboardWordPress List of Theme Interface in the Dashboard
Anak tema TwentySixteen telah aktif. Kamu bisa menambahkan sebuah "screenshot.png" juga

2. Enqueue Berkas JavaScript

Kita perlu memuat sejumlah berkas JavaScript ke tema WordPress. Pada dasarnya kita bisa melakukannya dengan menambahkan JavaScript secara langsung ke tag head di berkas "header.php" dari tema. Mengikuti standar WordPress, walau bagaimanapun, disarankan untuk menggunakan fungsi wp_enqueue_script(), ditambahkan ke functions.php, untuk mencegah konflik:

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' );

Fungsinya juga mengizinkan kita untuk mengatur script dependencies. Dalam kasus kami, "smootstate.js" bergantung pada jQuery. karena WordPress akan memuat jQuery sebelum memuat "smoothstate.js".

Berkas "script.js" bergantung pada kedua skrip, makanya urutan pemuatan semua skripnya akan seperti berikut:

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>

Perhatikan pada panduan berikut untuk mempelajari lebih mengenai enqueue berkas di Wordpress:


3. Meluncurkan SmoothState.js

Mari tambahkan kode berikut ke "script.js" kita untuk membuat SmoothState.js berjalan:

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

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

Pada kode di atas, kita memilih #page (elemen yang membungkus konten halaman situs) dan meluncurkan SmoothState.js dengan konfigurasi paling dasarnya.

Halaman kita harus disajikan tanpa memuat secara penuh jendela browser saat kita bernavigasi melalui situs WordPress. Halaman kita sekarang tersaji secara asinkron.

Asynchronoous page loading in actionAsynchronoous page loading in actionAsynchronoous page loading in action
Maafkan sata untuk conton konten yang tidak menginsipirasi.

Pada dasarnya, kita telah siap! Namun, ada beberapa detil yang masih perlu diperhatikan:

  • Ada beberapa URL yang tidak akan dimuat secara asinkron, seperti tautan di dalam #page yang menunjuk ke WordPress Admin, wp-admin atau wp-login.php.
  • Tautan dengan trailing hash, contohnya #respond, tidak akan melompat ke poin yang tertunjuk dari halaman.
  • Laman kita termuat dengan sangat cepat. Namun masih belum terasa halus semenjak kita belum menerapkan animasi apapun untuk menyalurkan transisi.

4. Tautan Wordpress Admin

Ada beberapa tautan di situs yang menunjuk ke area admin Wordpress, seperti tautan Edit di tiap post, Logged in as admin dan Log-out sebelum kolom komentar.

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
Tautan "Edit" di TwentySixteen yang muncul ketika kita telah masuk.

Salah satu masalah saat SmoothState.js meminta Admin adalah bahwa kita tidak akan bisa kembali ke halaman sebelum ketika kita menekan tombol Back di browser. Masalah ini terjadi karena skrip SmoothState.js tidak hadir di area admin untuk meminta dan menyajikan laman sebelumnya.

WordPress DashboardWordPress DashboardWordPress Dashboard
Kita gagal kembali ke laman sebelumnya setelah mengunjungi Dasbor WordPress.

Kita perlu mencegah SmoothState.js meminta URL apapun menuju ke wp-admin atau wp-login.2 Untuk melakukannya kita bisa menggunakan parameter blacklist, seperti berikut:

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

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

Parameter blacklist memberitahu Smoothstate.js untuk menolak tautan dengan class selector tertentu dan memberikan kode di atas intipan, ini akan menolak tautan dengan class wp-link. Nama class ini saat ini belum ada, sehingga kita akan membuat sebuah kelas baru dan menambahkannya secara dinamis ke tautan yang dibutuhkan.

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
}

Fiungsi ini mengevaluasi setiap anchor tag di halaman, lalu menambahkan class wp-link jika URL mengandung /wp-admin/ atau /wp-login.php

Kita bisa mengeksekusi fungsi ini sekaligus untuk menambahkan kelas ke halaman secara efektif. Pertama, di laman yang dimuat di awal. Yang kedua adalah setalah SmoothState.js telah menyajikan halaman baru melalui onAfter; sebuah metode yang akan berjalan tiap kali konten baru dan animasinya telah selesai ditampilkan.

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. Mengatur Link Hash

Selanjutnya, kita perlu mengatur tautan dengan sebuah trailing hash. Dalam sebuah tema WordPress, biasanya kita akan menemukan satu yang menautkan ke bagian komentar dari Kiriman atau Halaman.x

'Leave a Comment' menunjuk ke bagian komentar dari kiriman.

Sebagaimana iya berdiri, kamu akan menemukan bahwa tautannya tidak akan membawa kita ke bagian komentas karena halamannya sesungguhnya tidah dimuat maupun disegarkan ulang. Makanya, kita perlu mereplikasi perilaku normal yang diinginkan.

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 );

Seperti yang bisa kamu lihat pada intipan kode di atas, kita telah menambahkan beberapa baris kode di bawah metode onAfter. Kodenya mendapatkan hash URL, lalu menggulung ke bagian yang diinginkan (jika bagiannya hadir di halaman) menggunakan animasi jQuery.

Leave a Comment link scroll in actionLeave a Comment link scroll in actionLeave a Comment link scroll in action
Menggulung secara halus ke bagian komentar dari kiriman.

6. Menerapkan Page Motion

Kita harus membuat transisi halamannya terasa lebih hidup. Pertama, kita akan menambahkan CSS style untuk menganimasikan halaman ke "styles.css" anak tema kita seperti berikut.

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 adalah nama class yang membungkus kiriman utama atau konten halaman, sementara .slide-out adalah class tambahan yang telah kita buat untuk menggeser konten.

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 );

Setelah memberikan kode di atas, kita menggunakan metode onStart untuk menambah class ketika SmootState.js mulai menarik ke konten baru. Lalu, melalui onAfter, kita menghapus class setelah konten baru telah dikirim.

Dan itulah! Namun, masih ada satu hal yang perlu diingat mengenai kompabilitas dengan beberapa plugin WordPress.

Apa Selanjutnya?

Ada lebih dari 40.000 plugin WordPRess tersedia, bahkan belum termasuk plugin yang disimpan di luar repositori resmi, seperti CodeCanyon contohnya. Ada banyak plugin di luar sana yang mungkin tidak cocok (atau bahkan rusak) dengan pemuatan asinkron kita, terutama yang bergantung pada scripting.

Daftar berikut adalah perkiraan saya mengenai beberapa yang perlu kamu perhatikan saat menggunakannya bersama SmoothState.js:

Tambahan, JavaScript banyak digunakan di Customizer di dalam WordPress Admin. Jadi, kamu bisa berpikir untuk tidak memuat SmoothState.js di Customizer, jika sesuatu rusak.

Kesimpulan

Kita telah belajar cara mengintegrasikan SmoothState.js ke WordPRess, dan juga menggunakan anak tema sebagai strategi pengembangan. Dan ini hanyalah permulaan! Kita bisa, sebagai contohnya, memperluas apa yang telah kita lakukan ke plugin dengan pilihan di pengaturannya di mana pengguna biasa bisa dengan mudah mengkostumisasi output.

Inspirasi

Jika kamu mencari inspirasi, cek tema multiguna ini di Envato Market yang menggunakan teknik pemuatan AJAX yang mirip.

bridgebridgebridge
Bridge
salientsalientsalient
salient
stokholmstokholmstokholm
stockholm

Referensi lebih lanjut

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.