Come integrare SmoothState.js in un tema WordPress

Nel nostro precedente tutorial, abbiamo utilizzato l'API Web di cronologia all'interno di un sito statico per offrire transizioni di pagina uniformi. In questo tutorial porteremo le cose al livello successivo, applicando ciò che abbiamo appreso in un sito Web WordPress. Ci sarà una differenza cruciale; faremo leva su SmoothState.js invece di crearne di nuovi da zero. 

SmoothState.js:

  • Richiedi le pagine in modo asincrono (AJAX) e sostituisci il contenuto di conseguenza.
  • Aggiorna URL e cronologia di navigazione tramite l'API Web Cronologia.

Opteremo per SmoothState.js per una serie di motivi:

  • Facilità d'uso: è un plugin jQuery estremamente facile da usare, che richiede pochissima configurazione per essere installato e funzionante.
  • API: SmoothState.js è ricco di metodi, proprietà e hook che ci permettono di modellarlo in molte possibili situazioni.
  • Prefetching e caching: queste due caratteristiche consentono alle nostre transizioni di pagina di essere molto più fluide e più veloci di quelle che abbiamo creato nel precedente tutorial.
  • È non specializzato: SmoothState.js non stabilisce come applichiamo l'animazione: possiamo basarci su CSS, jQuery, JavaScript di Vanilla o una libreria di animazioni come Velocity.js.
  • Provato e testato: Considerando che più di cento problemi sono stati chiusi durante il suo sviluppo, possiamo supporre che siano stati risolti numerosi bug.

Prerequisiti

Ci sono un paio di cose che dovrai avere pronto per seguire questo tutorial:

  • WordPress: è necessario disporre di un sito WordPress in esecuzione, localmente sul computer o in diretta su un server online. Se hai bisogno di aiuto per questo passaggio, controlla Tom McFarlin's Come iniziare con WordPress per iniziare e utilizzare un sito WordPress di base.
  • Un tema: Durante questo tutorial utilizzeremo l'ultimo tema predefinito di WordPress: TwentySixteen. Puoi optare per qualsiasi tema, ma assicurati che il tema sia conforme agli standard di WordPress.

1. Crea un tema figlio

L'utilizzo di un "tema figlio" in WordPress (invece di lavorare direttamente con i file del tema originale) ci consente di introdurre in modo sicuro nuove o sovrascrive funzionalità predefinite.

Questa è la migliore procedura quando si tratta di personalizzare un tema, poiché tutte le modifiche apportate verranno mantenute se il tema principale viene aggiornato.

Nel nostro caso, il tema principale è TwentySixteen. Il bambino risiede in un'altra nuova cartella "twentysixteen-child" che contiene un file "functions.php" e un foglio di stile "style.css", come segue.

. ├── twentysixteen └── twentysixteen-child

La parte più importante di un tema figlio è il Modello notazione nell'intestazione del foglio di stile che stabilisce la relazione del tema. Specificare Modello con il nome della directory del tema principale, nel nostro caso twentysixteen

/ ** Nome tema: URI tema Tema di ventisei anni: https://webdesign.tutsplus.com Autore: Thoriq Firdaus Autore URI: https://tutsplus.com/authors/tfirdaus Descrizione: Un tema secondario che aggiunge uno strato aggiuntivo di glam to TwentySixteen Versione: 1.0.0 Licenza: GNU General Public License v2 o successive URI di licenza: http://www.gnu.org/licenses/gpl-2.0.html Text Domain: twentysixteen Template: twentysixteen * /

Una volta impostato, attiva il tema figlio tramite l'amministratore:

Il tema bambino TwentySixteen è attivato: puoi anche aggiungere un "screenshot.png"

2. Accodare i file JavaScript

Abbiamo bisogno di caricare un numero di file JavaScript nel nostro tema WordPress. In linea di principio, potremmo farlo aggiungendo questi JavaScript direttamente a capo tag nel file "header.php" del tema. Seguendo lo standard di WordPress, tuttavia, si consiglia di utilizzare il wp_enqueue_script () funzione, aggiunta al functions.php, al fine di prevenire i conflitti:

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

La funzione ci consente anche di impostare le dipendenze dello script. Nel nostro caso, "smoothstate.js" dipende da jQuery, quindi WordPress caricherà jQuery prima di caricare "smoothstate.js". 

Il nostro file "script.js" dipende da tutti e due script, quindi la sequenza di caricamento di tutti i nostri script è la seguente:

   

Dai un'occhiata alle seguenti esercitazioni per saperne di più su come funziona l'enqueuing di file in WordPress:


3. Distribuzione di SmoothState.js

Aggiungiamo il seguente codice al nostro "script.js", al fine di ottenere SmoothState.js attivo e funzionante:

(function ($) $ (function () // Ready var settings = ancore: 'a'; $ ('#page') .smoothState (impostazioni););) (jQuery); 

Nel codice sopra, selezioniamo #pagina (l'elemento che avvolge il contenuto della pagina del sito) e distribuire SmoothState.js con la sua configurazione di base.

Le nostre pagine dovrebbero essere servite senza ricaricare completamente la finestra del browser mentre navighiamo attraverso il nostro sito WordPress. Le nostre pagine sono ora consegnate in modo asincrono.

Perdonami per il contenuto fittizio non entusiasmante.

Fondamentalmente, siamo tutti pronti! Tuttavia, ci sono alcuni dettagli ancora degni di attenzione:

  • Ci sono alcuni URL che dovrebbero non essere caricati in modo asincrono, come il collegamento all'interno di #pagina che punta all'amministratore di WordPress, wp-admin o wp-login.php.
  • Collegamenti con un hash finale, per esempio #rispondere, non saltare alle sezioni designate sulla pagina.
  • Il carico della nostra pagina è incredibilmente veloce. Ma non è ancora tranquillo dato che non abbiamo applicato alcuna animazione per trasmettere la transizione.

4. Collegamenti amministrativi di WordPress

Ci sono alcuni link sulla pagina che puntano all'area di amministrazione di WordPress, come ad esempio modificare link in ogni post, il Registrato come amministratore, e il Disconnettersi prima del modulo di commento.

Link "Modifica" in TwentySixteen che appare quando siamo loggati.

Uno dei problemi quando SmoothState.js richiede all'amministratore è che non saremo in grado di tornare alla pagina precedente quando clicchiamo sul browser Indietro pulsante. Questo problema si verifica perché lo script SmoothState.js non è presente nell'area di amministrazione per richiedere e servire la pagina precedente.

Non riusciamo a tornare alla pagina precedente dopo aver visitato il Dashboard di WordPress.

Dovremo impedire a SmoothState.js di richiedere qualsiasi URL che punta a wp-admin o wp-login. Per fare questo possiamo utilizzare il lista nera parametro, come segue:

(function ($) $ (function () // Ready var settings = ancore: 'a' lista nera: '.wp-link'; $ ('#page') .smoothState (impostazioni);); ) (jQuery); 

Il lista nera parametro dice a SmoothState.js di ignorare i collegamenti con il selettore di classe specificato; e dato lo snippet di codice sopra, ignorerà i collegamenti con wp-link classe. Questo nome di classe è al momento inesistente, quindi creeremo una nuova classe e la aggiungeremo dinamicamente ai collegamenti necessari:

function addBlacklistClass () $ ('a') .each (function () if (this.href.indexOf ('/ wp-admin /')! == -1 || this.href.indexOf ('/ wp -login.php ')! == -1) $ (this) .addClass (' wp-link ');); 

Questa funzione valuta ogni tag di ancoraggio nella pagina, quindi aggiunge wp-link classe se l'URL del link include / Wp-admin / o /wp-login.php.

Eseguiamo questa funzione due volte per aggiungere efficacemente la classe alla pagina. Innanzitutto, sul caricamento iniziale della pagina. Il secondo è dopo che SmoothState.js ha servito la nuova pagina tramite il onAfter; un metodo che verrà eseguito ogni volta che il nuovo contenuto e l'animazione sono stati completamente consegnati.

function addBlacklistClass () $ ('a') .each (function () if (this.href.indexOf ('/ wp-admin /')! == -1 || this.href.indexOf ('/ wp -login.php ')! == -1) $ (this) .addClass (' wp-link '););  $ (function () addBlacklistClass (); var settings = ancore: 'a', lista nera: '.wp-link', onAfter: function () addBlacklistClass ();; $ ('#page') .smoothState (impostazioni);); 

5. Gestione dell'hash di collegamento

Successivamente, dobbiamo gestire i collegamenti con un hash finale. In un tema WordPress, di solito ne troviamo uno che collega alla sezione commenti di un post o di una pagina.

Il 'Lascia un commento' sta puntando alla sezione commenti del post.

Allo stato attuale, scoprirai che il link non ci porterà nella sezione dei commenti perché la pagina non è effettivamente ricaricata o rinfrescato. Pertanto, abbiamo bisogno di replicare il comportamento normale atteso.

(function ($) ... $ (function () ... onAfter: function () ... var $ hash = $ (window.location.hash); if ($ hash.length! == 0) var offsetTop = $ hash.offset (). top; $ ('body, html') .animate (scrollTop: (offsetTop - 60),, duration: 280);;);) (jQuery); 

Come puoi vedere dallo snippet di codice precedente, abbiamo aggiunto alcune righe di codici sotto onAfter metodo. Il codice recupera l'URL hash, quindi scorre fino alla sezione designata (se la sezione è presente sulla pagina) utilizzando jQuery Animation.

Scorri facilmente fino alla sezione Commenti del post 

6. Applicazione di movimento della pagina

Dobbiamo rendere la transizione della pagina più vivace. Per prima cosa, aggiungeremo gli stili CSS per animare la pagina, in "styles.css" del nostro tema figlio come segue.

.contenuto del sito -webkit-transition: -webkit-transform .28s, opacity .28s; -ms-transition: -o-transform .28s, opacity .28s; -o-transizione: -o-transform .28s, opacità .28s; transizione: trasforma .28s, opacità .28s;  .slide-out .site-content -webkit-transform: translate3d (0, 100px, 0); -ms-transform: translate3d (0, 100px, 0); -o-transform: translate3d (0, 100px, 0); transform: translate3d (0, 100px, 0); opacità: 0;  

Il .site-content è il nome della classe che avvolge il post principale o il contenuto della pagina, mentre .sfilare è una classe aggiuntiva che abbiamo creato per far uscire il contenuto.

(function ($) ... $ (function () ... var settings = ... onStart: duration: 280, // ms render: function ($ container) $ container.addClass ('slide-out'); , onAfter: function ($ container) ... $ container.removeClass ('slide-out');; $ ('#page') .smoothState (impostazioni););) (jQuery);

Dato il codice sopra, utilizziamo il onStart metodo per aggiungere la classe quando SmoothState.js inizia a inserire nuovi contenuti. Quindi attraverso onAfter, rimuoviamo la classe dopo che il nuovo contenuto è stato consegnato.

E questo è tutto ciò che c'è da fare! Tuttavia, c'è una cosa da tenere a mente per quanto riguarda la compatibilità con alcuni plugin di WordPress ...

Qual'è il prossimo?

Sono disponibili più di 40.000 plug-in WordPress, nemmeno i plug-in ospitati al di fuori del repository ufficiale, come ad esempio CodeCanyon. Ci sono molti plugin là fuori che potrebbero non essere compatibili (o addirittura interrompere) il nostro caricamento asincrono, in particolare quelli che si basano su script in qualsiasi misura.

Il seguente elenco è la mia stima approssimativa di alcuni che potrebbe essere necessario esaminare quando li si utilizza in combinazione con SmoothState.js:

  • WordPress.com Stat (un modulo Jetpack)
  • Carousel (un modulo Jetpack)
  • Infinite Scroll (un modulo Jetpack)
  • Google Analytics per WordPress
  • Disqus
  • Carico pigro

Inoltre, JavaScript è ampiamente utilizzato nel Customizer all'interno dell'amministratore di WordPress. Quindi, puoi pensare a scarico SmoothState.js nel Customizer, se mai qualcosa si rompe.

Conclusione

Abbiamo imparato come integrare SmoothState.js in WordPress, oltre a sfruttare un tema figlio come strategia di sviluppo. E questo è solo l'inizio! Potremmo, ad esempio, estendere ciò che abbiamo fatto in un plugin con le opzioni nelle impostazioni in cui gli utenti regolari possono facilmente personalizzare l'output.

Ispirazione

Se stai cercando ispirazione, dai un'occhiata a questi temi WordPress multiuso su Envato Market che utilizzano tecniche di caricamento delle pagine simili AJAX:

pontesalientestoccolma

Ulteriori riferimenti

  • Elenco delle opzioni SmoothState.js
  • Transizioni di pagina belle e fluide con l'API Web cronologia
  • AJAX per progettisti front-end