Travailler avec le framework Angular.js est rapide et enrichissant. Combiné à WordPress, il permet de créer un très beau SPA (application d’une page) en un laps de temps réduit. Avec tous les contrôles et plugins CMS proposés par WordPress, c’est un raccourci intéressant.
Nous allons commencer à créer un nouveau thème en utilisant le _tk
thème passe-partout pour commencer. Ceci est une mise en œuvre de la _s
souligne le thème d'Automattic mais avec le Bootstrap de Twitter implémenté.
Prenez le thème de GitHub et placez les fichiers dans votre des thèmes
annuaire:
$ cd thèmes $ wget https://github.com/Themekraft/_tk/archive/master.zip contenu_wp / thèmes / $ unzip maître.zip Archive: master.zip 69acda231e2f8914374df81b89a7aa37d594fa creation: _tk-master / _instantané /404.php gonfler: _tk-master / archive.php gonfler: _tk-master / comments.php gonfler: _tk-master / content-page.php gonfler: _tk-master / content-single.php… ## Renommer le répertoire $ mv _tk-master / angular-bootstrap $ rm -f master.zip
Maintenant que nous avons le _tk
thème de démarrage, nous aurons besoin de la npm
paquets angulaire
et voie angulaire
depuis votre répertoire de thème (nous utilisons le nom bootstrap angulaire
).
$ cd wp-angular $ npm init # respectez les invites pour créer votre fichier package.json… "author": "", "license": "ISC" Est-ce correct? (oui) oui ## Installer les paquets $ $ npm installer angular angular-route --save
npm
dans le répertoire des thèmes avec npm init
afin de créer le package.json
, un fichier qui npm
utilise pour gérer des projets.--enregistrer
drapeau dans notre npm install angular angular-route --save
commande nous disons npm
ajouter les modules en tant que dépendances à notre projet.npm installer
dans le même répertoire que le package.json
afin d'obtenir les colis.Maintenant, vous aurez les paquets dans votre node_modules
répertoire dans votre thème. Jetez un coup d'oeil dans le répertoire et vous pourrez voir plusieurs fichiers js. Nous allons utiliser angular.min.js
Pour le developpement
Inclure angular.min.js
à l'intérieur de WordPress, nous devons modifier la functions.php
fichier afin que nous puissions mettre en file d'attente les scripts dans WordPress.
Dans functions.php, trouvez le _tk_scripts ()
fonction et ajoutez ce qui suit au bas de la fonction:
// Charge angular wp_enqueue_script ('angularjs', get_template_directory_uri (). '/ Node_modules / angular / angular.min.js'); wp_enqueue_script ('angularjs-route', get_template_directory_uri (). '/ node_modules / angular-route / angular-route.min.js'); wp_enqueue_script ('scripts', get_stylesheet_directory_uri (). '/js/scripts.js', array ('angularjs', 'angularjs-route'));
Vous aurez également besoin de créer js / scripts.js
-pour l'instant il suffit de créer un fichier vierge.
Maintenant, actualisez votre thème dans un navigateur et dans les outils de développement, vous pourrez voir angular.min.js
inclus maintenant.
Angular.js a un excellent système pour mettre à jour seulement une partie de HTML. Pour profiter de cela et de la voie angulaire
module, nous devrons créer un répertoire dans le thème nommé partiels
.
$ mkdir partiels
À l'intérieur de partiels
répertoire, créer un fichier nommé main.html
à des fins de test, et ajoutez le code HTML que vous aimez à l'intérieur.
Pour qu'Angular puisse charger les partiels, nous devons fournir une URL complète. J'ai eu du mal à utiliser le get_stylesheet_directory_uri ()
méthode, mais essayez-le pour vous-même. Si cela ne fonctionne pas, utilisez votre URL complète.
Ajouter ce qui suit au _tk_scripts
fonction ci-dessous où vous avez ajouté le angularjs
et voie angulaire
lignes de la dernière étape:
// Avec get_stylesheet_directory_uri () wp_localize_script ('scripts', 'localized', array ('partials' => get_stylesheet_directory_uri (). '/ Wp-content / themes / angular-bootstrap / partials /'));
Si cela échoue (comme ce fut le cas pour moi au moment de la rédaction), écrivez dans l'URL, par exemple.
// Avec la valeur codée en dur wp_localize_script ('scripts', 'localized', array ('partials' => 'http://www.mydomaind.com/wp-content/themes/angular-bootstrap/partials/'));
Pour que Angular fonctionne avec WordPress, nous devons activer le plug-in WP-API REST. C'est simple, il ne s'agit que de l'installation d'un plugin.
Téléchargez et installez le plugin à partir de git et lancez le programme suivant dans votre plugins
dir:
git clone [email protected]: WP-API / WP-API.git json-rest-api
Puis activez le plugin dans votre wp-admin
panneau. Vous pourrez voir la sortie JSON à l'adresse your-wordpress.com/wp-json
une fois activé.
Les itinéraires constituent les pages spécifiques de votre blog. Nous pouvons en définir un pour notre main.html
partiel maintenant et configurez-le pour qu'il soit affiché sur la page d'index de notre WordPress.
Tout d’abord, assurez-vous que l’application Angular.js est définie via le ng-app
attribut, et dans header.php
faire ce qui suit:
ng-app = "wp">
Ici, nous appelons l'application wp
avec le ng-app
attribut. Nous avons également mis le base
balise afin que Angular puisse trouver le JSON que nous avons activé dans WP-API
.
Ajouter ce qui suit à js / scripts.js
:
angular.module ('wp', ['ngRoute']) .config (function ($ routeProvider, $ locationProvider) $ routeProvider .when ('/', templateUrl: localized.partials + 'main.html', contrôleur: 'Main')) .controller ('Main', fonction ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /'). Success (function (res) $ scope .posts = res;););
Maintenant à l'intérieur partiels / main.html
Ajoute ça:
Et enfin à l'intérieur index.php
, directement après get_header.php ()
, ajouter l'attribut angulaire ng-view
sur un div
étiquette.
Actualisez l'index de votre WordPress, et une liste à puces de vos articles de blog sera maintenant affichée sur la page d'accueil.
Ceci est dû à la ng-contrôleur
invoquant le Principale
contrôleur de scripts.js
et le ng-view
attribut spécifiant où Angular doit rendre.
Ajoutons maintenant la route pour l'affichage d'un blog WordPress via l'URLLug.
Ouvrir js / scripts.js
et ajustez le fichier pour qu'il se lise comme suit:
angular.module ('wp', ['ngRoute']) .config (function ($ routeProvider, $ locationProvider) $ routeProvider .when ('/', templateUrl: localized.partials + 'main.html', contrôleur: 'Main') .when ('/: slug', templateUrl: localized.partials + 'content.html', contrôleur: 'Content') .otherwise (redirectTo: '/');) .controller ('Main', fonction ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /'). Success (function (res) $ scope.posts = res;); ) .controller ('Contenu', ['$ scope', '$ http', '$ routeParams', fonction ($ scope, $ http, $ routeParams) $ http.get ('wp-json / posts /? filter [name] = '+ $ routeParams.slug) .success (fonction (res) $ scope.post = res [0];)));
En ajoutant le Contenu
contrôleur, nous pouvons spécifier le $ http.get
URI pour les publications JSON, et spécifiez le limace
comme paramètre de filtre.
Pour créer cela, nous utilisons le code suivant: $ http.get ('wp-json / posts /? filter [name] =' + $ routeParams.slug)
.
Remarque: pour obtenir le /:limace
route fonctionne, vous devez spécifier /%après le nom%/
comme votre structure permalien dans le wp-admin
.
Assurez-vous de régler le content.html
avec ce qui suit:
titre de l'article
Publier un contenu
Maintenant, si vous actualisez la page, vous pourrez accéder aux articles de votre blog via les liens de la liste à puces que vous avez créée à l'étape précédente..
Jusqu'ici, nous avons vu comment créer des itinéraires et commencer à travailler avec le wp-json
API. Avant de commencer à écrire une logique, nous avons besoin d’un endroit où aller, et c’est dans un angle angulaire. un service
(dans cet exemple, nous utilisons un Usine
un service).
Créer un nouveau fichier js / services.js
et ajoutez le code suivant pour récupérer des catégories et des publications:
function ThemeService ($ http) var ThemeService = catégories: [], posts: [], pageTitle: 'Derniers messages:', currentPage: 1, totalPages: 1, currentUser: ; // Définit le titre de la page dans lefonction de balise _setTitle (documentTitle, pageTitle) document.querySelector ('title'). innerHTML = documentTitle + '| AngularJS Demo Theme '; ThemeService.pageTitle = pageTitle; // Configuration de la fonction de pagination _setArchivePage (posts, page, en-têtes) ThemeService.posts = posts; ThemeService.currentPage = page; ThemeService.totalPages = en-têtes ('X-WP-TotalPages'); ThemeService.getAllCategories = function () // S'ils sont déjà définis, vous n'avez pas besoin de les récupérer à nouveau if (ThemeService.categories.length) return; // Récupère les termes de la catégorie depuis wp-json return $ http.get ('wp-json / taxonomies / catégorie / termes'). Success (function (res) ThemeService.categories = res;); ; ThemeService.getPosts = fonction (page) return $ http.get ('wp-json / posts /? Page =' + page + '& filter [posts_per_page] = 1'). Success (fonction (res, status, en-têtes) ThemeService.posts = res; page = parseInt (page); // Vérifie la validité d'une variable de page si (isNaN (page) || page> en-têtes ('X-WP-TotalPages')) _setTitle ('Page non trouvée', 'Page non trouvée'); else // Gestion de la pagination si (page> 1) _setTitle ('Articles sur la page' + page, 'Articles sur la page' + page + ':'); 1setTitle ( 'Accueil', 'Derniers messages:'); _setArchivePage (res, page, en-têtes);); ; return ThemeService; // Finalement, enregistrez le service app.factory ('ThemeService', ['$ http', ThemeService]);
Ceci est une configuration d'usine de base, où nous avons deux fonctions internes _setTitle
et _setArchivePage
. Ces méthodes s'appellent de getPosts
et getCatégories
pour mettre à jour le titre de la page en cours et définir un nombre entier interne pour savoir quel numéro de page nous sommes en train d'examiner.
Nous devrons commencer à utiliser le ngSanitize
module pour analyser les entrées à notre service. Installez ceci avec npm
en tant que tel dans votre répertoire de thème:
$ npm install angular-sanitize --save
le ThèmeService
est juste un objet JavaScript de base qui effectue une recherche de catégorie via $ http.get
, comme le getPosts
méthode. Nous allons maintenant informer notre contrôleur de ce service. Ouvrir scripts.js
et modifier le contrôleur pour être au courant ThèmeService
.
// Contrôleur principal app.controller ('Main', ['$ scope', '$ http', 'ThemeService', function ($ scope, $ http, ThemeService) // Récupère les catégories de ThemeService ThemeService.getAllCategories (); // Obtient la première page de publications de ThemeService ThemeService.getPosts (1); $ scope.data = ThemeService;]);
N'oubliez pas d'activer le angulaire-assainir
module à l'intérieur de votre scripts.js
également sur la première ligne avec:
var app = angular.module ('wp', ['ngRoute', 'ngSanitize']);
Enfin, vous devrez vous assurer que js / services.js
est mis en file d'attente dans WordPress ainsi que le angulaire-assainir
module. Faites-le en modifiant le functions.php
déposer et ajouter ce qui suit avant la wp_localize_script
appel:
wp_enqueue_script ('angularjs-sanitize', get_stylesheet_directory_uri (). '/node_modules/angular-sanitize/angular-sanitize.min.js'); wp_enqueue_script ('theme-service', get_stylesheet_directory_uri (). '/js/services.js');
Maintenant nous devrons mettre à jour le main.html
partiel pour afficher ces catégories fournies par ThemeService.
Les catégories
data.pageTitle
Vous pourrez maintenant voir vos articles et catégories affichés sur votre page d'accueil via ng-view
utilisant un usine
service pour Angular. L'avantage de ceci est que tous les composants auront les données à leur disposition. Donc, nous pouvons maintenant partager les catégories objet entre tous nos contrôleurs dans nos routes.
Maintenant que nous avons un service configuré pour notre thème, nous pouvons continuer à développer la couche de données et incorporer le style Bootstrap dans le code HTML renvoyé..
Les possibilités maintenant que Angular est configuré dans votre thème sont vraiment infinies, et en consultant le référentiel fourni, vous aurez un point de départ rapide pour créer des applications WordPress d'une seule page compatibles Angular et Bootstrap..