You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
WordPress Headless är en arkitektur för WordPress som separerar frontend från backend
Frontend kan vara en webbapplikation, mobilapplikation eller IoT-applikation
Backend är WordPress som fungerar som ett API
WordPress Headless är en form av decoupled CMS
(Isärkopplat CMS)
Skillnaden mellan vanliga WordPress och Headless
Vanliga WordPress har en frontend och backend som är kopplade till varandra
WordPress Headless har en frontend och backend som är separerade från varandra
Frontend och backend kommunicerar med varandra via ett API
Frontend kan vara en webbapplikation, mobilapplikation eller IoT-applikation
Hur fungerar WordPress Headless?
WordPress Headless fungerar genom att frontend kommunicerar med backend via ett API
Fördelar med WordPress Headless
Bättre prestanda och skalbarhet
Flexibilitet i teknik och design
Möjlighet till flera frontend-lösningar
Nackdelar med WordPress Headless
Ökad komplexitet för utvecklare
Potentiell inlärningskurva för teamet
Användningsområden för WordPress Headless
Mobilapplikationer
Internet of Things (IoT) integration
Webbapplikationer (React, Vue, Angular, etc.)
SEO och WordPress Headless
När ni använder WordPress Headless så är det viktigt att ni tänker på SEO
SEO-ansvaret ligger på de som bygger eventuell frontend webb
Kom igång med WordPress Headless
Testa WordPress REST API
Från och med WordPress version 4.7 finns ett inbyggt REST API. Se till att det är aktiverat på din webbplats genom att besöka {DIN_WORDPRESS_URL}/wp-json/.
Om du ser en JSON-utmatning är REST API aktiverat.
WordPress REST API endpoints
/{wp-json}/wp/v2/posts - Hämta alla inlägg
/{wp-json}/wp/v2/posts/{id} - Hämta ett inlägg
/{wp-json}/wp/v2/pages - Hämta alla sidor
/{wp-json}/wp/v2/pages/{id} - Hämta en sida
/{wp-json}/wp/v2/categories - Hämta alla kategorier
Skapa egen endpoint
Lägg till följande kod i functions.php i ditt WordPress-tema för att skapa egna endpoints
Denna koden skapar två endpoints
/{wp-json}/custom/menus - Hämtar alla menyer
/{wp-json}/custom/menus/{slug} - Hämtar en specifik meny
Lägg till följande kod i functions.php i ditt WordPress-tema för att skapa egna endpoints
Denna koden skapar callback-funktioner för att hämta menyer som används av våra endpoints
// Callback for getting all menusfunctionget_menus()
{
returnget_nav_menu_locations();
}
// Callback for getting a specific menufunctionget_menu($data)
{
$menu_items = wp_get_nav_menu_items($data['slug']);
return$menu_items;
}
Skapa din Headless Frontend
Kör npm create vue@latest i terminalen för att skapa en ny Vue-applikation.
Anropa /{wp-json}/custom/menus med Postman för att se vilka IDn dina menyer har.
Kom ihåg ett ID för att använda i nästa steg.
Uppdatera src/App.vue, src/router/index.js för att hämta och visa er meny.
Skapa en ny vy (src/views/PageView.vue) för att visa en sida från WordPress.
Installera dotenv (npm install dotenv) och skapa en .env-fil för att lagra URLn till er WordPress-installation.
.env
Skapa en .env-fil i root-mappen för din frontend-applikation.
Lägg till följande kod i .env-filen och ersätt URLn med URLn till din WordPress-installation.
URLn ska sluta med /wp-json.
Testa att besöka URLen i webbläsaren för att se att den fungerar.
Exempel
VITE_WP_JSON=http://localhost/wordpress/wp-json
src/App.vue
<scriptsetup>import{onMounted,ref}from'vue';import{RouterLink,RouterView}from'vue-router'// Function to fetch menu items from the APIasyncfunctionfetchMenuItems(){constresponse=awaitfetch(import.meta.env.VITE_WP_JSON+'/custom/menus/10');letdata=awaitresponse.json();// Filter only the menu items that are pagesmenuItems.value=data.filter(item=>item.object==='page');;}constmenuItems=ref([]);onMounted(fetchMenuItems);</script>
src/App.vue (forts.)
<template><header><divclass="wrapper"><navv-if="menuItems"><RouterLinkv-for="item in menuItems" :key="item.ID" :to="item.object_id">
{{ item.title }}
</RouterLink></nav></div></header><RouterView/></template>
src/router/index.js
import{createRouter,createWebHistory}from'vue-router'constrouter=createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: '/',name: 'home',// Home kan ni lämna tom eller uppdatera hur ni villcomponent: ()=>import('../views/HomeView.vue')},{path: '/:id',name: 'page-post',component: ()=>import('../views/PageView.vue')}]})exportdefaultrouter
src/views/PageView.vue
<scriptsetup>import{onMounted,ref}from'vue';import{onBeforeRouteUpdate,useRoute}from'vue-router';// Function to fetch menu items from the APIasyncfunctionfetchPost(id){constresponse=awaitfetch(import.meta.env.VITE_WP_JSON+'/wp/v2/pages/'+id);post.value=awaitresponse.json();}constroute=useRoute();constpost=ref(false);// Watch for route changesonBeforeRouteUpdate(async(to,from,next)=>{awaitfetchPost(to.params.id);next();});onMounted(async()=>{awaitfetchPost(route.params.id);});</script>