Como usar Blueprints
Você pode usar Blueprints de uma das seguintes maneiras:
- Passando-os como um fragmento de URL para o Playground.
- Carregando-os a partir de uma URL usando o parâmetro
blueprint-url. - Usando pacotes de Blueprint (arquivos ZIP ou diretórios).
- Usando a API JavaScript.
Fragmento de URL
A maneira mais fácil de começar a usar Blueprints é colar um deles no
"fragmento" da URL no site do WordPress Playground, por exemplo
https://playground.wordpress.net/#{"preferredVersions....
Por exemplo, para criar um Playground com versões específicas do WordPress e do PHP, use o seguinte Blueprint:
{
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"preferredVersions": {
"php": "8.3",
"wp": "6.5"
}
}
E então acesse
https://playground.wordpress.net/#{"preferredVersions":{"php":"8.3","wp":"6.5"}}.
Em JavaScript, você pode obter uma versão compacta de qualquer JSON de Blueprint
com JSON.stringify e JSON.parse
Exemplo:
const blueprintJson = `{
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"preferredVersions": {
"php": "8.3",
"wp": "6.5"
}
}`;
const minifiedBlueprintJson = JSON.stringify(JSON.parse(blueprintJson)); // {"preferredVersions":{"php":"8.3","wp":"6.5"}}
const encodedBlueprint = encodeURIComponent(minifiedBlueprintJson);
const playgroundUrl = `https://playground.wordpress.net/#${encodedBlueprint}`;
Você não precisará colar links para acompanhar. Usaremos exemplos de código com um botão "Try it out", que executará automaticamente os exemplos para você:
Fragmentos de Blueprint codificados
Ao criar links do Playground a partir de JavaScript ou ferramentas de automação,
codifique o JSON minificado uma vez com encodeURIComponent() e adicione-o
depois de #:
const blueprint = {
$schema: 'https://playground.wordpress.net/blueprint-schema.json',
preferredVersions: {
php: '8.3',
wp: '6.5',
},
};
const playgroundUrl = `https://playground.wordpress.net/#${encodeURIComponent(JSON.stringify(blueprint))}`;
O Playground também aceita Blueprints codificados em Base64. Base64 é útil
quando uma plataforma modifica fragmentos JSON ou quando você quer um link
compacto e fácil de copiar. Por exemplo, este é o Blueprint acima em formato
Base64: eyIkc2NoZW1hIjogImh0dHBzOi8vcGxheWdyb3VuZC53b3JkcHJlc3MubmV0L2JsdWVwcmludC1zY2hlbWEuanNvbiIsInByZWZlcnJlZFZlcnNpb25zIjogeyJwaHAiOiAiNy40Iiwid3AiOiAiNi41In19.
Para executá-lo, acesse https://playground.wordpress.net/#eyIkc2NoZW1hIjogImh0dHBzOi8vcGxheWdyb3VuZC53b3JkcHJlc3MubmV0L2JsdWVwcmludC1zY2hlbWEuanNvbiIsInByZWZlcnJlZFZlcnNpb25zIjogeyJwaHAiOiAiNy40Iiwid3AiOiAiNi41In19
URIError: URI malformed
Se um link do Playground falhar com URIError: URI malformed, o fragmento de
Blueprint codificado geralmente está malformado. Causas comuns incluem um escape
% inválido, um fragmento codificado duas vezes ou JSON colado na URL sem
codificação.
Reconstrua o link a partir do objeto Blueprint original e codifique-o uma vez:
const playgroundUrl = `https://playground.wordpress.net/#${encodeURIComponent(JSON.stringify(blueprint))}`;
Se outra ferramenta alterar fragmentos de URL, use um Blueprint codificado em Base64.
Em JavaScript, você pode obter qualquer JSON de Blueprint no
formato Base64
com a função global btoa().
Exemplo:
const blueprintJson = `{
"$schema": "https://playground.wordpress.net/blueprint-schema.json",
"preferredVersions": {
"php": "8.3",
"wp": "6.5"
}
}`;
const minifiedBlueprintJson = btoa(blueprintJson); // eyIkc2NoZW1hIjogImh0dHBzOi8vcGxheWdyb3VuZC53b3JkcHJlc3MubmV0L2JsdWVwcmludC1zY2hlbWEuanNvbiIsInByZWZlcnJlZFZlcnNpb25zIjogeyJwaHAiOiAiNy40Iiwid3AiOiAiNi41In19
Carregar Blueprint de uma URL
Quando o Blueprint ficar grande demais, você pode carregá-lo pelo parâmetro de
consulta ?blueprint-url na URL, assim:
Observe que o Blueprint deve estar publicamente acessível e ser servido com o
cabeçalho Access-Control-Allow-Origin correto:
Access-Control-Allow-Origin: *
Quando uma URL de Blueprint falhar com BlueprintFetchError, verifique estes
detalhes:
- A URL deve retornar um arquivo JSON ou um pacote ZIP de Blueprint, não uma página HTML.
- URLs do GitHub devem usar
raw.githubusercontent.com, nãogithub.com/.../blob/.... - URLs do GitLab devem usar a URL de arquivo bruto, não uma página
/-/blob/. - O arquivo deve estar acessível sem login, cookies, VPN ou sessão temporária do navegador.
- Releases em rascunho, artefatos de CI expirados e URLs temporárias de túnel podem parar de funcionar mesmo que o Blueprint fosse válido antes.
- Se você hospedar o arquivo, configure CORS para que
https://playground.wordpress.netpossa buscá-lo.
Pacotes de Blueprint
O parâmetro ?blueprint-url agora também aceita pacotes de Blueprint no formato
ZIP. Um pacote de Blueprint é um arquivo ZIP que contém um arquivo
blueprint.json no nível raiz, junto com quaisquer recursos adicionais
referenciados pelo Blueprint.
Por exemplo, você pode carregar um pacote de Blueprint assim:
https://playground.wordpress.net/?blueprint-url=https://example.com/my-blueprint-bundle.zip
Ao usar um pacote de Blueprint, você pode referenciar recursos empacotados com
o tipo de recurso bundled:
{
"landingPage": "/my-file.txt",
"steps": [
{
"step": "writeFile",
"path": "/wordpress/my-file.txt",
"data": {
"resource": "bundled",
"path": "/bundled-text-file.txt"
}
}
]
}
Para saber mais sobre pacotes de Blueprint, consulte a documentação de Pacotes de Blueprint.
API JavaScript
Você também pode usar Blueprints com a API JavaScript usando a função
startPlaygroundWeb() do pacote @wp-playground/client. Veja um exemplo
pequeno e independente que você pode executar no JSFiddle ou no CodePen:
<iframe id="wp-playground" style="width: 1200px; height: 800px"></iframe>
<script type="module">
import { startPlaygroundWeb } from 'https://playground.wordpress.net/client/index.js';
const client = await startPlaygroundWeb({
iframe: document.getElementById('wp-playground'),
remoteUrl: `https://playground.wordpress.net/remote.html`,
blueprint: {
landingPage: '/wp-admin/',
preferredVersions: {
php: '8.3',
wp: 'latest',
},
steps: [
{
step: 'login',
username: 'admin',
password: 'password',
},
{
step: 'installPlugin',
pluginData: {
resource: 'wordpress.org/plugins',
slug: 'friends',
},
},
],
},
});
const response = await client.run({
// wp-load.php is only required if you want to interact with WordPress.
code: '<?php require_once "/wordpress/wp-load.php"; $posts = get_posts(); echo "Post Title: " . $posts[0]->post_title;',
});
console.log(response.text);
</script>