SvelteKit · Svelte 5
Édition visuelle pour SvelteKit, sur WordPress.
Chargez les pages dans +page.server.ts, démarrez le bridge depuis le layout racine, appliquez field() sur vos éléments.
- 01
Autorisez l’éditeur à afficher votre site
Copiez ceci dans src/hooks.server.ts.
src/hooks.server.ts import type { Handle } from '@sveltejs/kit'; export const handle: Handle = async ({ event, resolve }) => { const response = await resolve(event); response.headers.set('Content-Security-Policy', "frame-ancestors 'self' https://cms.example.com"); return response; };Les pages prérendues sont servies comme fichiers statiques : définissez le même en-tête chez votre hébergeur.
- 02
Ajoutez le bridge
Installez le package, puis chargez le bridge depuis le layout racine.
Terminal npm install leihosrc/routes/+layout.svelte <script> import { onMount } from 'svelte'; let { children } = $props(); onMount(() => { if (window.self === window.top) return; import('leiho').then(({ initLeihoBridge }) => { // Already on screen: don't hide the page. initLeihoBridge({ wpOrigin: 'https://cms.example.com', cloakTimeout: 0 }); }); }); </script> {@render children()} - 03
Lisez le contenu
Chargez chaque page dans +page.server.ts.
src/routes/[...path]/+page.server.ts import { error } from '@sveltejs/kit'; import { loadLeihoContent, indexLeihoContent } from 'leiho/content'; export async function load({ url }) { const { data } = await loadLeihoContent({ url: 'https://cms.example.com/wp-json/leiho/v1/export' }); const page = indexLeihoContent(data).byPath(url.pathname); if (!page) error(404, 'Not found'); return { page }; }Hébergement serverless avec un disque en lecture seule ? Passez snapshot: false à loadLeihoContent.
- 04
Marquez ce que les éditeurs peuvent modifier
Appliquez field() sur chaque élément que les éditeurs doivent pouvoir modifier. Affichez toujours l’élément, même quand sa valeur est vide.
Svelte <script> import { field, entry } from 'leiho'; // field() writes data-wp-post + data-wp-field, entry() names a section. // Flexible content rows: block(page, 'sections', i, 'Label'). let { page } = $props(); </script> <section {...entry(page, 'Hero')}> <h1 {...field(page, 'hero_title')}>{page.fields.hero_title}</h1> <img {...field(page, 'hero_image')} src={page.fields.hero_image?.url} alt={page.fields.hero_image?.alt} /> {#each page.fields.cards ?? [] as card, i} <article {...field(page, `cards.${i}.title`)}>{card.title}</article> {/each} </section>
Remplacez https://cms.example.com par l’adresse de votre WordPress. Dans wp-admin, Leiho → Démarrer affiche ces étapes avec votre adresse, vérifie chacune et peut confier toute l’installation à votre agent de code en une seule consigne.
Modifiez le vrai site.
Gratuit et open source. Essayez-le sur un vrai WordPress, dans votre navigateur.