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.

  1. 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.

  2. 02

    Ajoutez le bridge

    Installez le package, puis chargez le bridge depuis le layout racine.

    Terminal
    npm install leiho
    src/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()}
  3. 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.

  4. 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.