Comment intégrer SmoothState.js dans un thème WordPress

Dans notre précédent tutoriel, nous avions utilisé l’API Web History au sein d’un site statique pour effectuer des transitions de page en douceur. Dans ce tutoriel, nous allons passer au niveau supérieur en appliquant ce que nous avons appris dans un site Web WordPress. Il y aura une différence cruciale; nous allons tirer parti de SmoothState.js au lieu de construire le nôtre à partir de zéro. 

SmoothState.js va:

  • Demander des pages de manière asynchrone (AJAX) et remplacer le contenu en conséquence.
  • Mettre à jour les URL et l'historique de navigation via l'API Web History.

Nous allons opter pour SmoothState.js pour plusieurs raisons:

  • Facilité d'utilisation: c’est un plugin jQuery extrêmement facile à utiliser, ne nécessitant pratiquement aucune configuration pour le rendre opérationnel.
  • Apis: SmoothState.js regorge de méthodes, propriétés et crochets qui nous permettent de le modeler dans de nombreuses situations possibles.
  • Préchargement et mise en cache: ces deux fonctionnalités permettent à nos transitions de page d'être beaucoup plus fluides et rapides que ce que nous avions construit dans le précédent tutoriel.
  • C'est pas une affaire: SmoothState.js ne dicte pas comment nous appliquons l'animation, nous pouvons nous appuyer sur CSS, jQuery, JavaScript Vanilla ou une bibliothèque d'animation comme Velocity.js.
  • Essayé et testé: Considérant que plus d'une centaine de problèmes ont été fermés au cours de son développement, nous pouvons supposer que de nombreux bugs ont été corrigés.

Conditions préalables

Pour pouvoir suivre ce didacticiel, vous devez disposer de plusieurs éléments:

  • WordPress: avoir un site WordPress en cours d'exécution, soit localement sur votre ordinateur, soit en direct sur un serveur en ligne, est requis. Si vous avez besoin d'aide pour cette étape, consultez Comment commencer avec WordPress de Tom McFarlin pour vous familiariser avec un site WordPress de base..
  • Un thème: Au cours de ce tutoriel, nous allons utiliser le dernier thème WordPress par défaut: TwentySixteen. Vous pouvez choisir n'importe quel thème, mais assurez-vous qu'il est conforme aux normes WordPress..

1. Créer un thème pour enfants

L'utilisation d'un «thème enfant» dans WordPress (au lieu de travailler directement avec les fichiers de thème d'origine) nous permet d'introduire en toute sécurité de nouvelles fonctionnalités ou de remplacer les fonctionnalités par défaut..

Il est recommandé de personnaliser un thème, car toutes les modifications que vous apportez seront conservées si le thème parent est mis à jour..

Dans notre cas, le thème parent est Vingt seize. L'enfant réside dans un autre nouveau dossier "vingt-six-enfant" qui contient un fichier "functions.php" et une feuille de style "style.css", comme suit.

. Vingt-six seize └── vingt-seize ans

La partie la plus importante d’un thème pour enfants est la Modèle notation dans l'en-tête de la feuille de style qui indique la relation de thème. Spécifier Modèle avec le nom du répertoire de thème parent, dans notre cas vingt-six

/ ** Nom du thème: Twenty Sixteen Child URI du thème: https://webdesign.tutsplus.com Auteur: Thoriq Firdaus URI de l'auteur: https://tutsplus.com/authors/tfirdaus Description: Un thème enfant qui ajoute une couche supplémentaire de Glam to TwentySixteen Version: 1.0.0 Licence: Licence publique générale GNU v2 ou ultérieure URI de la licence: http://www.gnu.org/licenses/gpl-2.0.html Domaine de texte: twentysixteen Modèle: twentysixteen * /

Une fois cela défini, activez le thème enfant via l’administrateur:

Le thème enfant TwentySixteen est activé. Vous pouvez également ajouter un "screenshot.png".

2. Mettre en file d'attente les fichiers JavaScript

Nous devons charger un certain nombre de fichiers JavaScript dans notre thème WordPress. En principe, nous pourrions le faire en ajoutant ces JavaScript directement à la tête balise dans le fichier “header.php” du thème. Suivant le standard WordPress, il est toutefois recommandé d’utiliser le wp_enqueue_script () fonction, ajoutée à la functions.php, afin de prévenir les conflits:

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 fonction nous permet également de définir les dépendances de script. Dans notre cas, le fichier «smoothstate.js» dépend de jQuery. Par conséquent, WordPress chargera jQuery avant le chargement de «smoothstate.js».. 

Notre fichier «script.js» dépend de tous les deux scripts, ainsi la séquence de chargement de tous nos scripts est la suivante:

   

Consultez les didacticiels suivants pour en savoir plus sur le fonctionnement de la mise en file d'attente de fichiers dans WordPress:


3. Déploiement de SmoothState.js

Ajoutons le code suivant à notre "script.js", afin de rendre SmoothState.js opérationnel:

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

Dans le code ci-dessus, nous sélectionnons #page (l'élément qui enveloppe le contenu de la page du site) et déployez SmoothState.js avec sa configuration la plus basique.

Nos pages doivent être servies sans recharger complètement la fenêtre du navigateur lorsque nous naviguons sur notre site WordPress. Nos pages sont maintenant livrées de manière asynchrone.

Pardonnez-moi pour le contenu factice sans intérêt.

Fondamentalement, nous sommes tous ensemble! Cependant, quelques détails méritent encore l’attention:

  • Il y a des URL qui devraient ne pas être chargé de manière asynchrone, tel que le lien dans la #page qui pointe vers l'administrateur WordPress, wp-admin ou wp-login.php.
  • Liens avec un hachage de fin, par exemple #répondre, ne sautez pas aux sections désignées sur la page.
  • Notre chargement de page est extrêmement rapide. Mais cela ne se fait pas encore sans heurts puisque nous n’avons appliqué aucune animation pour transmettre la transition..

4. Liens Admin WordPress

Quelques liens sur la page pointant vers la zone d’administration de WordPress, tels que le modifier lien dans chaque message, le Connecté en tant qu'administrateur, et le Connectez - Out avant le formulaire de commentaire.

Lien «Modifier» dans TwentySixteen qui apparaît lorsque nous sommes connectés.

L'un des problèmes lorsque SmoothState.js demande à l'administrateur est que nous ne pourrons pas revenir à la page précédente en cliquant sur le navigateur. Retour bouton. Ce problème se produit car le script SmoothState.js n'est pas présent dans la zone d'administration pour demander et servir la page précédente.

Nous ne parvenons pas à revenir à la page précédente après avoir visité le tableau de bord WordPress.

Nous devrons empêcher SmoothState.js de demander toute URL pointant vers wp-admin ou wp-login. Pour ce faire, nous pouvons utiliser le liste noire paramètre, comme suit:

(function ($) $ (function () // Ready var settings = ancres: 'a' liste noire: '.wp-link'; $ ('#page') .smoothState (settings);); ) (jQuery); 

le liste noire paramètre dit à SmoothState.js d'ignorer les liens avec le sélecteur de classe spécifié; et étant donné l'extrait de code ci-dessus, il ignorera les liens avec wp-link classe. Ce nom de classe est actuellement inexistant, nous allons donc créer une nouvelle classe et l'ajouter dynamiquement aux liens nécessaires:

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

Cette fonction évalue chaque balise d'ancrage sur la page, puis ajoute wp-link classe si l'URL du lien comprend / wp-admin / ou /wp-login.php.

Nous exécutons cette fonction deux fois pour ajouter efficacement la classe à la page. Tout d'abord, lors du chargement initial de la page. La seconde est après que SmoothState.js ait servi la nouvelle page via le onAfter; une méthode qui s'exécutera à chaque fois que le nouveau contenu et l'animation ont été complètement livrés.

fonction 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 = ancres: 'a', liste noire: '.wp-link', onAfter: function () addBlacklistClass ();; $ ('#page') .smoothState (paramètres);); 

5. Gestion du hachage de lien

Ensuite, nous devons gérer les liens avec un hachage de fin. Dans un thème WordPress, nous en trouverons généralement un qui renvoie à la section commentaire d'un article ou d'une page..

Le 'Laisser un commentaire' pointe vers la section commentaire du message.

En l'état actuel des choses, vous constaterez que le lien ne nous mènera pas à la section commentaire car la page n'est pas réellement rechargée ou rafraîchi. Par conséquent, nous devons reproduire le comportement normal attendu.

(fonction ($) … $ (fonction () … 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); 

Comme vous pouvez le voir dans l'extrait de code ci-dessus, nous avons ajouté quelques lignes de codes sous le onAfter méthode. Le code récupère l'URL hacher, puis fait défiler jusqu'à la section désignée (si la section est présente sur la page) à l'aide de jQuery Animation.

Faites défiler en douceur jusqu'à la section Commentaire du message 

6. Application du mouvement de page

Nous devons rendre la transition de page plus vivante. Tout d'abord, nous allons ajouter les styles CSS pour animer la page, dans le "styles.css" de notre thème enfant, comme suit.

.site-content -webkit-transition: -webkit-transform .28s, opacité .28s; -ms-transition: -o-transformer .28s, opacité .28s; -o-transition: -o-transformer .28s, opacité .28s; transition: transformer .28s, opacité .28s;  .slide-out .site-content -webkit-transform: translate3d (0, 100px, 0); -ms-transform: translate3d (0, 100px, 0); -o-transformer: translate3d (0, 100px, 0); transformer: translate3d (0, 100px, 0); opacité: 0;  

le .contenu du site est le nom de la classe qui englobe le contenu principal de la publication ou de la page, tandis que .glisser est une classe supplémentaire que nous avons créée pour faire glisser le contenu.

(function ($) … $ (function () … var settings = … onStart: durée: 280, // ms rendu: function ($ conteneur) conteneur.addClass ('slide-out'); , onAfter: function ($ container) … $ container.removeClass ('slide-out');; $ ('#page') .smoothState (settings););) (jQuery);

Compte tenu du code ci-dessus, nous utilisons le onStart méthode pour ajouter la classe lorsque SmoothState.js commence à extraire du nouveau contenu. Puis à travers onAfter, nous supprimons la classe après la livraison du nouveau contenu.

Et c'est tout ce qu'il y a à faire! Cependant, il y a une chose à garder à l'esprit concernant la compatibilité avec certains plugins WordPress…

Et après?

Plus de 40 000 plugins WordPress sont disponibles, sans compter les plugins hébergés en dehors du référentiel officiel en compte, comme sur CodeCanyon par exemple. Il existe de nombreux plug-ins qui pourraient ne pas être compatibles (ou même casser) notre chargement asynchrone, en particulier ceux qui reposent sur des scripts..

La liste suivante est une estimation approximative de certaines de celles que vous devrez peut-être examiner lors de leur utilisation avec SmoothState.js:

  • WordPress.com Stat (un module Jetpack)
  • Carrousel (un module Jetpack)
  • Infinite Scroll (un module Jetpack)
  • Google Analytics pour WordPress
  • Disqus
  • Charge paresseuse

De plus, JavaScript est fortement utilisé dans le Customizer au sein de l’administrateur de WordPress. Alors, vous pouvez penser à déchargement SmoothState.js dans le Customizer, si quelque chose se brise.

Conclusion

Nous avons appris à intégrer SmoothState.js dans WordPress et à utiliser un thème enfant en tant que stratégie de développement. Et ce n'est qu'un début! Nous pourrions, par exemple, étendre ce que nous avons fait dans un plugin avec des options dans les paramètres où les utilisateurs normaux peuvent facilement personnaliser la sortie..

Inspiration

Si vous recherchez de l'inspiration, découvrez ces thèmes WordPress polyvalents sur Envato Market, qui utilisent des techniques de chargement de page AJAX similaires:

PontsaillantStockholm

Références supplémentaires

  • Liste des options SmoothState.js
  • Transitions de page agréables et fluides avec l'API History Web
  • AJAX pour les concepteurs front-end