SmoothState.js integreren in een WordPress-thema

In onze vorige zelfstudie hebben we de History Web API binnen een statische site gebruikt voor soepele paginaovergangen. In deze tutorial gaan we de dingen naar een hoger niveau tillen door wat we hebben geleerd toe te passen op een WordPress-website. Er zal één cruciaal verschil zijn; we maken gebruik van SmoothState.js in plaats van zelf een geheel nieuw te bouwen. 

SmoothState.js zal:

  • Vraag pagina's asynchroon (AJAX) en vervang de inhoud dienovereenkomstig.
  • Update URL's en browsegeschiedenis via de History Web API.

We zullen om een ​​aantal redenen kiezen voor SmoothState.js:

  • Makkelijk te gebruiken: het is een zeer eenvoudig te gebruiken jQuery-plug-in, die nauwelijks enige configuratie vereist om deze in gebruik te nemen.
  • APIs: SmoothState.js zit boordevol methoden, eigenschappen en haken waarmee we het in vele mogelijke situaties kunnen vormen.
  • Prefetching en caching: deze twee functies zorgen ervoor dat onze pagina-overgangen veel vloeiender en sneller zijn dan wat we in de vorige zelfstudie hebben gebouwd.
  • Het is ongepland: SmoothState.js dicteert niet hoe we de animatie toepassen - we kunnen leunen op CSS, jQuery, Vanilla JavaScript of een animatiebibliotheek zoals Velocity.js.
  • Geprobeerd en getest: Gezien het feit dat meer dan honderd problemen tijdens de ontwikkeling ervan zijn afgesloten, kunnen we aannemen dat talloze bugs zijn aangepakt.

voorwaarden

Er zijn een aantal dingen die je nodig hebt om klaar te zijn om deze tutorial te volgen:

  • WordPress: Het hebben van een draaiende WordPress-site, hetzij lokaal op uw computer, hetzij live op een online server is vereist. Als je hulp nodig hebt bij deze stap, bekijk dan Tom McFarlin's Aan de slag met WordPress om aan de slag te gaan met een eenvoudige WordPress-site.
  • Een thema: Tijdens deze tutorial gaan we het nieuwste standaard WordPress-thema gebruiken: Twenty Sixteen. U kunt kiezen voor elk thema, maar zorg ervoor dat het thema voldoet aan de WordPress-normen.

1. Maak een kindthema

Door een "kindthema" in WordPress te gebruiken (in plaats van rechtstreeks met de originele themabestanden te werken), kunnen we veilig nieuwe standaardfuncties introduceren of vervangen.

Dit is de beste manier om een ​​thema aan te passen, omdat eventuele wijzigingen die u aanbrengt, behouden blijven als het bovenliggende thema wordt bijgewerkt.

In ons geval is het bovenliggende thema TwentySixteen. Het kind bevindt zich in een andere nieuwe map "zestienixteen-child" die een "functions.php" -bestand en een stylesheet "style.css" bevat, als volgt.

. ├── twintigentien └── twintigentienjarig kind

Het belangrijkste onderdeel van een kindthema is het Sjabloon notatie in de stylesheet-header waarin de themarelatie staat. specificeren Sjabloon met de naam van de parent-themadirectory, in ons geval twentysixteen

/ ** Theme Name: Twenty Sixteen Child Theme URI: https://webdesign.tutsplus.com Auteur: Thoriq Firdaus Auteur URI: https://tutsplus.com/authors/tfirdaus Beschrijving: Een kindthema met een extra laag glam to TwentySixteen Versie: 1.0.0 Licentie: GNU General Public License v2 of later Licentie URI: http://www.gnu.org/licenses/gpl-2.0.html Tekstdomein: twintigentien Template: twintigentachtig * /

Zodra dat is ingesteld, activeert u het onderliggende thema via de beheerder:

Het thema Twenty16ixt child is geactiveerd, misschien wilt u ook een screenshot.png toevoegen

2. Geef de JavaScript-bestanden een wachtrij

We moeten een aantal JavaScript-bestanden in ons WordPress-thema laden. In principe kunnen we dit doen door deze JavaScript rechtstreeks aan de hoofd tag in het bestand "header.php" van het thema. Volgens de WordPress standaard wordt het echter aangemoedigd om de wp_enqueue_script () functie, toegevoegd aan de functions.php, om conflicten te voorkomen:

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

Met deze functie kunnen we ook de afhankelijkheden van het script instellen. In ons geval hangt de "smoothstate.js" af van jQuery, dus zal WordPress jQuery laden voor het laden van "smoothstate.js". 

Ons bestand "script.js" is afhankelijk van beide scripts, dus de laadvolgorde van al onze scripts is als volgt:

   

Bekijk de volgende zelfstudies voor meer informatie over hoe bestandsparkeren werkt in WordPress:


3. SmoothState.js implementeren

Laten we de volgende code toevoegen aan ons 'script.js' om SmoothState.js te activeren:

(functie ($) $ (function () // Ready var-instellingen = anchors: 'a'; $ ('#page'). smoothState (settings););) (jQuery); 

In de bovenstaande code selecteren we #pagina (het element dat de inhoud van de site-pagina omspant) en SmoothState.js met de meest eenvoudige configuratie implementeert.

Onze pagina's moeten worden weergegeven zonder het browservenster volledig opnieuw te laden terwijl we door onze WordPress-site navigeren. Onze pagina's worden nu asynchroon afgeleverd.

Excuseer me voor de niet-inspirerende dummy-inhoud.

Kortom, we zijn er helemaal klaar voor! Er zijn echter nog enkele details die de aandacht waard zijn:

  • Er zijn enkele URL's die zouden moeten niet asynchroon worden geladen, zoals de link binnen de #pagina dat wijst naar de WordPress Admin, wp-admin of wp-login.php.
  • Koppelingen met een slepende hash bijvoorbeeld #reageren, spring niet naar de benoemde secties op de pagina.
  • Onze paginabelasting is razendsnel. Maar het voelt nog niet soepel omdat we geen animatie hebben toegepast om de overgang over te brengen.

4. WordPress Admin-koppelingen

Er zijn enkele links op de pagina die verwijzen naar het WordPress-beheergebied, zoals de Bewerk link in elke post, de Ingelogd als admin, en de Uitloggen voor het reactieformulier.

"Bewerken" -link in Twenty Sixteen die verschijnt wanneer we zijn ingelogd.

Een van de problemen wanneer SmoothState.js de Admin vraagt, is dat we niet terug kunnen gaan naar de vorige pagina wanneer we op de browser klikken Terug knop. Dit probleem treedt op omdat het script SmoothState.js niet aanwezig is in het gedeelte Beheerder om de vorige pagina op te vragen en weer te geven.

We gaan niet terug naar de vorige pagina nadat we het WordPress-dashboard hebben bezocht.

We moeten voorkomen dat SmoothState.js een URL opvraagt ​​waarnaar wordt verwezen wp-admin of wp-login. Om dit te doen kunnen we gebruik maken van de blacklist parameter, als volgt:

(functie ($) $ (function () // Gereed var-instellingen = anchors: 'a' blacklist: '.wp-link'; $ ('#page'). smoothState (settings);); ) (jQuery); 

De blacklist parameter vertelt SmoothState.js om de koppelingen met de opgegeven klasseselector te negeren; en gezien het bovenstaande codefragment, zal het de links negeren wp-koppeling klasse. Deze klassenaam is momenteel niet beschikbaar, dus we zullen een nieuwe klasse maken en deze dynamisch toevoegen aan de benodigde koppelingen:

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

Deze functie evalueert elke ankertag op de pagina en voegt vervolgens toe wp-koppeling klasse als de link-URL bevat / Wp-admin / of /wp-login.php.

We voeren deze functie twee keer uit om de klasse effectief aan de pagina toe te voegen. Ten eerste, bij het laden van de eerste pagina. De tweede is nadat SmoothState.js de nieuwe pagina heeft bezocht via de onAfter; een methode die telkens wordt uitgevoerd wanneer de nieuwe inhoud en animatie volledig is afgeleverd.

functie 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 = anchors: 'a', blacklist: '.wp-link', onAfter: function () addBlacklistClass ();; $ ('#page') .smoothState (instellingen);); 

5. Omgaan met de Link Hash

Vervolgens moeten we links behandelen met een slepende hash. In een WordPress-thema vinden we er meestal een die linkt naar het commentaargedeelte van een bericht of een pagina.

De 'Leave a Comment' verwijst naar het commentaargedeelte van het bericht.

Zoals de zaken er nu voorstaan, zult u merken dat de link ons ​​niet naar de commentaarsectie zal leiden, omdat de pagina niet daadwerkelijk is herladen of vernieuwd. Daarom moeten we het verwachte normale gedrag repliceren.

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

Zoals u kunt zien aan de hand van het bovenstaande codefragment, hebben we enkele regels met codes toegevoegd onder de onAfter methode. De code haalt de URL op hachee, scrolt vervolgens naar het gedeelte dat is aangewezen (als het gedeelte op de pagina staat) met behulp van jQuery-animatie.

Blader soepel naar het gedeelte Opmerkingen van het bericht 

6. Toepassen van pagina-beweging

We moeten de paginaovergang levendiger maken. Eerst voegen we de CSS-stijlen toe om de pagina te animeren, naar 'styles.css' van ons kindthema als volgt.

.site-inhoud -webkit-overgang: -webkit-transform .28s, opacity .28s; -ms-overgang: -o-transform .28s, opacity .28s; -o-overgang: -o-transform .28s, opacity .28s; overgang: transformeer .28s, opacity .28s;  .slide-out .site-content -webkit-transform: translate3d (0, 100px, 0); -ms-transformatie: translate3d (0, 100px, 0); -o-transform: translate3d (0, 100px, 0); transformatie: translate3d (0, 100px, 0); dekking: 0;  

De .website-inhoud is de klassenaam die de hoofdpost- of pagina-inhoud omspant, terwijl .uitglijden is een extra les die we hebben gemaakt om de inhoud eruit te schuiven.

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

Gezien de bovenstaande code gebruiken we de onStart methode om de klasse toe te voegen wanneer SmoothState.js nieuwe inhoud begint toe te voegen. Vervolgens door onAfter, we verwijderen de klas nadat de nieuwe inhoud is afgeleverd.

En dat is alles wat er is! Toch is er één ding om rekening mee te houden met betrekking tot compatibiliteit met sommige WordPress plug-ins ...

Wat is het volgende?

Er zijn meer dan 40.000 WordPress-plug-ins beschikbaar, zelfs niet inclusief plug-ins die buiten de officiële repository worden gehost, zoals bijvoorbeeld op CodeCanyon. Er zijn veel plug-ins beschikbaar die mogelijk niet compatibel zijn (of zelfs breken) onze asynchrone laden, met name die welke in welke mate ook vertrouwen op scripting.

De volgende lijst is mijn ruwe schatting van enkele die u mogelijk moet bekijken wanneer u ze gebruikt in combinatie met SmoothState.js:

  • WordPress.com Stat (een Jetpack-module)
  • Carousel (een Jetpack-module)
  • Infinite Scroll (een Jetpack-module)
  • Google Analytics voor WordPress
  • Disqus
  • Lazy Load

Bovendien wordt JavaScript intensief gebruikt in de Customizer binnen de WordPress Admin. Dus, je zou kunnen denken uitladen SmoothState.js in de Customizer, als er ooit iets breekt.

Conclusie

We hebben geleerd hoe SmoothState.js in WordPress te integreren, en we kunnen een kindthema gebruiken als onze ontwikkelingsstrategie. En dit is slechts een begin! We kunnen bijvoorbeeld uitbreiden wat we hebben gedaan in een plug-in met opties in de instellingen waar gewone gebruikers de uitvoer gemakkelijk kunnen aanpassen.

Inspiratie

Als je op zoek bent naar inspiratie, bekijk dan deze veelzijdige WordPress-thema's op Envato Market die vergelijkbare AJAX-laadtechnieken gebruiken:

BrugsaillantStockholm

Verdere referenties

  • Lijst met opties van SmoothState.js
  • Mooie, vloeiende paginaovergangen met de History Web API
  • AJAX voor front-end ontwerpers