In de afgelopen jaren heeft de ontwikkeling van een rust-API voor WordPress nieuwe deuren voor ontwikkelaars geopend. Ontwikkelaars die eerder beperkt waren tot het schrijven van een WordPress-aangedreven project in PHP hebben nu meer flexibiliteit en controle over hoe ze de technologiestack van hun website-to-be kunnen benaderen.
Dit betekent dat het mogelijk is om alle voordelen van het schitterende WordPress-bedieningspaneel te behouden, dat extreem flexibel is gemaakt door populair WordPress-plug-ins zoals geavanceerde aangepaste velden, en hebben een volledig op maat gemaakte frontend die alleen met WordPress communiceert wanneer het nodig heeft.
In deze WordPress-tutorial We zullen het verkennen van het WordPress Rust-API in een eenvoudige blog-app, die momenteel een lokaal JSON-bestand gebruikt als de gegevensbron en wordt gebouwd als een applicatie met één pagina (SPA) met behulp van het populaire JavaScript-framework Vue.js Dit omvat de implementatie van VUEX, die we gebruiken om de gegevens op te slaan die we vragen van een WordPress met behulp van een combinatie van zijn actie- en mutatiemethoden.
Eenmaal voltooid, had u een magere, eenvoudige spa moeten hebben gemaakt, die alle reactiviteit van vue.js heeft, terwijl de posten worden opgehaald van en beheerd door WordPress.
Voor meer geweldige API's om te verkennen, kijk eens naar onze gidsen naar het beste Javascript API's HTML API's en Google API's
Eerste dingen eerst, dat zou je moeten doen Download de bestanden van het project en open ze in uw favoriete editor.
In de console, CD in Website-sjabloon en voer de onderstaande opdracht uit om de Node-afhankelijkheden van het project te installeren (als u geen knooppunt hebt geïnstalleerd, doe dat eerst We werken puur in de SRC directory vanaf hier.
npm install
Volgende, gebruik de onderstaande opdracht, we installeren Vuex , een patroon en bibliotheek van een staatsbeheer en bibliotheek voor vue.js-applicaties. Dit zal fungeren als een centrale informatiewinkel voor alle VUE-componenten die afhankelijk zijn van de gegevens die we ontvangen van WordPress API. Voor ontwikkelaars die bekend zijn met reageren, is VUEX zwaar geïnspireerd op flux.
npm install vuex --save
Voer in de console de onderstaande opdracht uit om de ontwikkelingsserver te starten. Dit compileert het VUE.JS-project, omdat het momenteel staat en het toewijst aan een URL, zodat u er toegang toe hebt. Dit is meestal localhost: 8080
Een groot voordeel Dit brengt live herladen, dus zodra u wijzigingen aanbrengt in de app en opslaan, wordt de pagina in uw browser zichzelf bijgewerkt zonder de noodzaak om handmatig opnieuw te laden.
npm run dev
In SRC , maak een map genaamd winkel en erin riep een nieuw bestand index.js Dit is waar onze VUEX-winkel zal worden gedefinieerd. Maar voordat we daarbij komen, moeten we eerst controleren of onze vue.js-app op de hoogte is van het bestaan ervan. Om dit te doen, open main.js en importeer de winkel en neem het op als een afhankelijkheid, zoals in het onderstaande fragment.
Importeer Vue van 'VUE'
Importeer app van './app'
importeer router van './router'
Importeer winkel van './store'
Vue.config.productiontip = false
/ * Eslint-uitschakelen NO-NIEUWE * /
NIEUWE VUE ({
El: '#App',
router,
winkel,
Sjabloon: '& LT; APP / & GT;',
Componenten: {app}
})
Om ons te helpen de AJAX-aanvragen te vereenvoudigen, zal onze winkel aan WordPress API doen, we installeren Axios, wat een belofte-gebaseerde HTTP-client is. Open hiervoor een apart console-venster, navigeer naar de Website-sjabloon Directory en run NPM Installeer Axios - Opslaan
Laten we vervolgens beginnen met de scaffold de winkel door een nieuw leeg vuex-winkelobject te geven. Op dit moment doet het niets, maar er moet op zijn minst VUE op de hoogte zijn.
Axios van 'Axios' importeren
importeer vue van 'vue'
import vuex van 'vuex'
Vue.gebruik (vuex)
const opslag = nieuwe vuex.store ({
staat: {},
Acties: {},
Mutaties: {}
Standaardwinkel uitvoeren
In VUEX heeft het object van de State Application Info, die in dit geval de WordPress-postgegevens zijn, zullen we met behulp van de API. Maak binnen dit object een nieuw eigenschap met de naam Berichten en wijs het een waarde van null toe.
Staat: {
Berichten: null
}
In Vuex zijn acties de belangrijkste manier waarop asynchrone verzoeken worden afgehandeld. Dit zijn typisch methoden gedefinieerd in de winkel, die vervolgens kunnen worden verzonden zoals vereist door de app.
In het lege acties Object, laten we er een definiëren waar als onze berichten staat nog steeds null, Axios wordt gebruikt om een AJAX-verzoek uit te voeren naar de WordPress API en een lijst met berichten retourneert. Zodra we een positieve reactie hebben ontvangen, zullen we de belofte oplossen en de posten plegen met behulp van de storeposten mutatie.
GetPosts: functie (context) {
Nieuwe belofte retourneren ((besluit, weigeren) = & GT; {
if (context.state.posts) {
oplossen ()
anders {
Axios.get ('http://lukharrison.net/
WebDesigner / WP-JSON / WP / V2 / POSTS ')
.Ten ((respons) = & gt; {
context.commit ('Storeposts',
response.data)
oplossen ()
}). Vangst ((fout) = & gt; {
weigeren (fout);
}
Een ander concept dat wordt geïntroduceerd door VUEX is mutaties, die ook typisch zijn gedefinieerd in de winkel. Mutaties zijn de enige manier om de staat in een VUEX-winkel te veranderen, waardoor de staat gemakkelijk wordt gevolgd bij het debuggen.
In het lege mutaties object, laten we het definiëren storeposten Methode We verwezen in de vorige stap en zorg ervoor dat het de post-eigenschap in het staatsobject met eventuele gegevens opheft, ontvangt de mutatie als payload.
Storeposts (staat, reactie) {
State.Posts = reactie}
We hebben de actie en mutatiemethoden gemaakt die posten van WordPress API grijpen en zich aan VUEX-staat plegen, maar nu moeten we dit proces echt ergens activeren. In het hoogste niveau vue.js component App.vue , voeg hieronder het snippet toe.
gemaakt () is een levenscyclushaak die codeert zodra de VUE-component op lading is gemaakt, terwijl het gebruik van de wereldwijde store Met variabele stelt ons in staat om toegang te krijgen tot de inhoud van onze VUEX-winkel en de Getposts actie uit stap 7.
Gemaakt () {
dit. $ store.dispatch ('GetPosts')}
Als je in Chrome of Firefox werkt en de Vue.js Devtools Extension (Zo niet, dan raad ik aan dat je het doet, want het is erg handig), moet je nu in staat zijn om de geladen WordPress-posten in te zien Basisstaat onder de Vuex tabblad.
Terug naar de app, in /comments/posts/posts.vue , de sjabloon HTML moet naar deze gegevens wijzen, dus laten we een paar van de attribuutpaden aanpassen.
Schakel 'post.title' in op 'post.title.Rendered'
Switch 'Post.Preview' naar 'post.acf.preview'
Schakel 'post.previewimage' in op 'post.acf.header_image_small'
In de postencomponent is er een VUE.JS-richtlijn in gebruik genaamd v-voor Dit loopt door alle berichten en voor elk drukt een exemplaar van de postcomponent af en toont ze weer in een lijst.
We moeten het pad bijwerken dat is doorgegeven aan deze richtlijn omdat het nog steeds de lokale dummy-testgegevens gebruikt. Werk de V-for-richtlijn bij op het onderstaande fragment om te wijzen op onze opgeslagen berichten in de VUEX-winkel.
V-for = "Post hierin. $ Store.state.posts"
Een lijst met de WordPress-posten zou nu moeten worden weergegeven. Omdat we de lokale postgegevens niet langer gebruiken, laten we verwijderen SRC / Gegevens Verwijder vervolgens in de postscomponent de Posts: PostData.Data Onroerend goed in de componenten Lokale gegevenswinkel en vervolgens de import van de postdata.
Mogelijk merkt u dat voor elk bericht de auteur verschijnt als een getal. Dit komt omdat de WordPress API een auteur-ID retourneert in plaats van een naam. We moeten deze ID gebruiken om WordPress te vragen voor de volledige auteur-informatie. Laten we beginnen met het maken van een plek om dit in onze VUEX-winkel te bewaren, naast onze postinformatie, in winkel / index.js
Staat: {
Auteurs: null,
Posts: NULL}
Zoals met berichten, creëren we een actie in /store/index.js Om een AJAX-verzoek te activeren om WordPress API te vragen. Zodra een succesvolle reactie is ontvangen, zal de belofte dan oplossen en activeren storegelaars Mutatie, die we volgen.
Getauthors: functie (context) {
Axios.get ('http://lukharrison.net/
WebDesigner / WP-JSON / WP / V2 / gebruikers))
.Ten (functie (reactie) {
context.commit ('streelauthors',
response.data)
}
Maak in het object Mutations van de VUEX-winkel de storegelaars mutatie met behulp van het onderstaande fragment. Zoals met storeposten Vanaf stap 8 neemt dit de lading van de lading en stelt het in als de waarde van de eigenschap auteurs in de staat van onze winkel.
Storegelaars (staat, reactie) {
state.authors = reactie}
We moeten de auteurinformatie van WordPress krijgen zodra de app begint te laden. Laten we het component van het hoogste niveau wijzigen App.vue opnieuw en verzend de Getauthors actie in hetzelfde gemaakt () Levenscyclushaak als de Getposts actie.
Gemaakt () {
dit. $ store.dispatch ('GetAuthors')
dit. $ store.dispatch ('GetPosts')}
Nu vragen we WordPress voor auteurinformatie over lading, alles wat we moeten doen is een methode definiëren in onze postscomponent waarmee ons een auteur-ID kan passeren en een naam in ruil daarvoor krijgt. Kopieer het snippet hieronder in het methodenobject van de postencomponent, onder het bestaande Get SinglePost methode.
GETUSERNAME: FUNCTION (UserID) {
VAR gebruikersnaam = 'onbekend';
dit. $ store.state.
auteurs.filter (functie (gebruiker) {
if (user.id === userid) {
Gebruikersnaam = gebruikernaam
terugkeer gebruikersnaam;
}
Nu moeten we alleen maar bellen GetUserName Nog steeds in de postcomponent, in de sjabloon, vervangt u de verwijzing van de auteurattribuut naar post.author Dus het weerspiegelt het snippet hieronder. De naam van de auteur moet nu correct worden weergegeven voor elke post.
: auteur = "GetUserName (post.author)"
Omdat we de postgegevens asynchroon laden, is er een moment voordat het verzoek is voltooid waar de toepassing leeg is. Om dit tegen te gaan, implementeren we een laadstatus die actief is totdat de blog volledig is gevuld. Plak in de postencomponent het snippet eronder net na de opening & lt; script & gt; Tag om de pictogrammen te importeren die we gebruiken.
Pictogram importeren van '@ / componenten / pictogrammen / pictogrammen'
invoer laden van './../../
Assets / IMG / Loading.SVG '
Voeg vervolgens nog steeds binnen berichten toe een verwijzing naar het pictogram in de objecten voor componenten. Dit maakt de postcomponent op de hoogte van onze recent geïmporteerde pictogramcomponent.
Componenten: {
icoon,
Post}
We hoeven nu alleen de laadelementen toe te voegen aan de postsjabloon, dus het verschijnt op de pagina. Wikkel eerst de tweede div in het snippel rond de twee DIV's met de v-als Richtlijnen om ervoor te zorgen dat er geen berichten worden weergegeven totdat het laden is voltooid.
Voeg vervolgens de eerste div van het fragment erboven toe. Dit bevat het laadpictogram en een v-als Richtlijn, wat betekent dat het alleen zichtbaar zal zijn tot het punt waarop de app volledig is geladen. Eenmaal gedaan, moet het laden nu worden geïmplementeerd.
& lt; div v-if = "! Dit. $ Store.state.posts"
Klasse = "U-Aign-Center" & GT;
& lt; icon class = "C-icon-loading"
Gebruik = "Laden" & GT; & LT; / ICON & GT;
& LT; / DIV & GT;
& lt; div v-if = "dit. $ store.state.posts" & GT;
& lt; / div & gt;
Het enige wat te doen is, is om ervoor te zorgen dat afzonderlijke berichten correct zijn ingesteld, zodat ze de WordPress-postgegevens gebruiken in de VUEX-winkel. De eerste stap is om de attribuutpaden bij te werken in de berichtencomponentjabloon binnen de v-if = "this.type === 'single'" DIV, die de weergave van afzonderlijke berichten behandelt.
Schakel 'singlepost.title' naar 'singlepost.title.Rendered'
Switch 'SinglePost.author' naar 'GetUserName (SinglePost.autuister)'
Switch 'singlepost.fulllimage' naar 'singlepost.acf.header_image'
Schakel 'singlepost.content' naar 'singlepost. inhoud. Gerelateerd '
We moeten ook de componenten van de berichten opnieuw verfijnen Get SinglePost methode. Het moet een belofte retourneren die de Getposts actie. In de follow-up vervolgens Functie, we zullen doorzoeken de berichten van de VUEX Store voor een invoer met een slak die overeenkomt met dat in de URL is gepasseerd. Indien gevonden, kopiëren we de gegevens naar de lokale status van onze component en lossen de belofte op. Als het niet wordt gevonden, wordt de belofte afgewezen.
Get SinglePost: functie () {
Nieuwe belofte retourneren
((los, weigeren) = & gt; {
dit. $ store.dispatch ('GetPosts')
.THEN (() = & GT; {
Var Foundpost = false;
dit. $ store.state.posts.
filter ((post) = & gt; {
if (post.slug ===
dit. $ route.params.slug) {
ThisinglePost = post;
foundpost = waar;
box? oplossen (): weigeren ();
}
Vervolgens moeten we de gemaakt () Levenscyclus haak in de postcomponent. Als we een enkel bericht moeten weergeven, moet de haak de haak bellen Get SinglePost Methode van de vorige stap en als de belofte wordt afgewezen, verzendt u de gebruiker naar de pagina 404 pagina 'PAGE'. Dit is het account voor scenario's waar gebruikers een niet-bestaande postslak in de URL invoeren.
Gemaakt () {
if (this.type === 'single') {
This.GetSinglePost (). Dan (null, () = & gt; {
dit. $ router.push ({name: 'pagenotfound'})
}
De laatste stap is om het snippet hieronder aan de postcomponent in de v-if = "this.type === 'single'" Div in de sjabloon. Deze richtlijn betekent dat het bericht alleen wordt weergegeven wanneer de lokale postgegevens die beschikbaar zijn gesteld door de Get SinglePost methode is bevolkt. Dit is om te stoppen met VUE van het voortijdige weergave van de component en aldus fouten te veroorzaken.
V-IF = "SinglePost"
Nu met alles werken, in de console, annuleer de npm run dev Commando of open een nieuwe console en voer de onderstaande opdracht uit om een productie-reageerversie te genereren om naar uw eigen server te uploaden. Dit verschijnt in de dist Directory.
NPM-run Build
Dit artikel verscheen in uitgave 268 van Web Designer, het Creative Web Design Magazine - met deskundige tutorials, geavanceerde trends en gratis middelen. Abonneer u nu op Web Designer.
Lees verder:
Ondanks de evolutie van mens-computer-interactie blijven vormen nog steeds een van de belangrijkste soorten interactie voor gebru..
Affinity Designer is een populaire gereedschap voor het bewerken van de vector. Evenals Mac- en Windows-versies, Serif onlangs vr..
Klik op het pictogram in de rechterbovenhoek om de pictogrammen te vergroten Geïllustre..
Toen ik voor het eerst ontdekte, was ik verbluft door het idee om een draagbaar apparaat te hebben waarmee ik digitaal kan ..
Mis niet Vertex 2018 , ons debuutevenement voor de CG-gemeenschap. Verpakt met inspireren..
Geweldige kunstenaars zoals Rembrandt en Caravaggio injecteren hun kunstwerken met een beetje drama en intensiteit, waardoor stuk..
Als onderdeel van zijn Verborgen schatten van creativiteit Project, Adobe transformeerde de eeuwenoude penselen di..
Het maken van webbanners is niet de meest glamoureuze banen in de wereld, maar het is iets dat elke ontwerper op een bepaald moment in hun carrière moet doen, waarschijnlijk vele malen voorb..