From b91b43582f92e4ca9476fd1082b99aaff45c677f Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Thu, 11 Jul 2024 16:45:31 +0100 Subject: [PATCH 01/32] documentation structure overhaul --- .../site/docs/01-start-here/_category_.json | 3 -- .../docs/09-blueprints-api/_category_.json | 3 -- .../docs/site/docs/12-limitations/01-index.md | 41 ---------------- .../docs/site/docs/_fragments/_api_list.mdx | 6 +-- .../_playground_wp_net_may_stop_working.md | 2 +- .../docs/_fragments/_this_is_query_api.md | 2 +- .../01-index.md | 0 .../02-using-blueprints.md | 0 .../03-data-format.md | 0 .../04-resources.md | 0 .../05-steps-shorthands.md | 0 .../05-steps.md | 0 .../07-json-api-and-function-api.md | 0 .../08-examples.md | 0 .../09-troubleshoot-and-debug-blueprints.md | 0 ...re-blueprints-what-you-can-do-with-them.md | 0 .../02-how-to-load-run-blueprints.md | 0 .../03-build-your-first-blueprint.md | 0 .../04-troubleshoot-debug-blueprints.md | 0 .../assets/installed-adventurer-theme.png | Bin .../assets/installed-custom-plugin.png | Bin .../assets/schema-autocompletion.png | Bin .../blueprint-101/index.md | 0 .../03-build-an-app/01-index.md | 6 +-- .../05-local-development/01-wp-now.md | 2 +- .../02-vscode-extension.md | 0 .../05-local-development/03-php-wasm-node.md | 0 .../05-local-development/_category_.json | 0 .../06-playground-apis/01-index.md | 4 +- .../06-playground-apis/02-api-concepts.md | 10 ++-- .../06-playground-apis/_category_.json | 0 .../20-query-api}/01-index.md | 0 .../22-javascript-api}/01-index.md | 0 .../02-index-html-vs-remote-html.md | 4 +- .../03-playground-api-client.md | 0 .../04-blueprint-json-in-api-client.md | 4 +- .../05-blueprint-functions-in-api-client.md | 2 +- .../22-javascript-api}/06-mount-data.md | 0 .../22-javascript-api}/_category_.json | 0 .../23-architecture}/01-index.md | 0 .../23-architecture}/02-wasm-php-overview.md | 0 .../23-architecture}/03-wasm-php-compiling.md | 0 .../04-wasm-php-javascript-module.md | 0 .../05-wasm-php-filesystem.md | 0 .../06-wasm-php-data-dependencies.md | 0 .../23-architecture}/07-wasm-asyncify.md | 2 +- .../23-architecture}/08-browser-concepts.md | 0 .../09-browser-tab-orchestrates-execution.md | 0 .../10-browser-iframe-rendering.md | 0 .../11-browser-php-worker-threads.md | 0 .../12-browser-service-workers.md | 0 .../23-architecture}/13-browser-scopes.md | 0 .../14-browser-cross-process-communication.md | 0 .../23-architecture}/15-wordpress.md | 0 .../23-architecture}/16-wordpress-database.md | 0 .../23-architecture}/17-browser-wordpress.md | 0 .../18-host-your-own-playground.md | 0 .../23-architecture}/_category_.json | 0 .../developers/24-limitations/01-index.md | 41 ++++++++++++++++ .../01-index.md => main/00-intro.md} | 25 +++++----- .../01-quick-start-guide.md} | 8 ++-- .../02-about-playground.md} | 4 +- .../docs/site/docs/main/10-build/01-index.md | 7 +++ .../docs/site/docs/main/11-test/01-index.md | 7 +++ .../docs/site/docs/main/12-launch/01-index.md | 7 +++ .../25-contributing}/01-index.md | 0 .../25-contributing}/02-code.md | 2 +- .../25-contributing}/03-coding-standards.md | 0 .../25-contributing}/09-contributor-day.md | 2 +- .../25-contributing}/20-documentation.md | 0 .../25-contributing}/_category_.json | 0 .../{15-resources.md => main/26-resources.md} | 0 .../{17-changelog.md => main/27-changelog.md} | 0 packages/docs/site/docusaurus.config.js | 14 +++++- packages/docs/site/sidebars.js | 44 +++++++++++------- 75 files changed, 146 insertions(+), 106 deletions(-) delete mode 100644 packages/docs/site/docs/01-start-here/_category_.json delete mode 100644 packages/docs/site/docs/09-blueprints-api/_category_.json delete mode 100644 packages/docs/site/docs/12-limitations/01-index.md rename packages/docs/site/docs/{09-blueprints-api => blueprints}/01-index.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/02-using-blueprints.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/03-data-format.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/04-resources.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/05-steps-shorthands.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/05-steps.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/07-json-api-and-function-api.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/08-examples.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/09-troubleshoot-and-debug-blueprints.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/02-how-to-load-run-blueprints.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/03-build-your-first-blueprint.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/04-troubleshoot-debug-blueprints.md (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/assets/installed-adventurer-theme.png (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/assets/installed-custom-plugin.png (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/assets/schema-autocompletion.png (100%) rename packages/docs/site/docs/{09-blueprints-api => blueprints}/blueprint-101/index.md (100%) rename packages/docs/site/docs/{ => developers}/03-build-an-app/01-index.md (92%) rename packages/docs/site/docs/{ => developers}/05-local-development/01-wp-now.md (87%) rename packages/docs/site/docs/{ => developers}/05-local-development/02-vscode-extension.md (100%) rename packages/docs/site/docs/{ => developers}/05-local-development/03-php-wasm-node.md (100%) rename packages/docs/site/docs/{ => developers}/05-local-development/_category_.json (100%) rename packages/docs/site/docs/{ => developers}/06-playground-apis/01-index.md (94%) rename packages/docs/site/docs/{ => developers}/06-playground-apis/02-api-concepts.md (76%) rename packages/docs/site/docs/{ => developers}/06-playground-apis/_category_.json (100%) rename packages/docs/site/docs/{08-query-api => developers/20-query-api}/01-index.md (100%) rename packages/docs/site/docs/{10-javascript-api => developers/22-javascript-api}/01-index.md (100%) rename packages/docs/site/docs/{10-javascript-api => developers/22-javascript-api}/02-index-html-vs-remote-html.md (95%) rename packages/docs/site/docs/{10-javascript-api => developers/22-javascript-api}/03-playground-api-client.md (100%) rename packages/docs/site/docs/{10-javascript-api => developers/22-javascript-api}/04-blueprint-json-in-api-client.md (83%) rename packages/docs/site/docs/{10-javascript-api => developers/22-javascript-api}/05-blueprint-functions-in-api-client.md (94%) rename packages/docs/site/docs/{10-javascript-api => developers/22-javascript-api}/06-mount-data.md (100%) rename packages/docs/site/docs/{10-javascript-api => developers/22-javascript-api}/_category_.json (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/01-index.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/02-wasm-php-overview.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/03-wasm-php-compiling.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/04-wasm-php-javascript-module.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/05-wasm-php-filesystem.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/06-wasm-php-data-dependencies.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/07-wasm-asyncify.md (97%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/08-browser-concepts.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/09-browser-tab-orchestrates-execution.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/10-browser-iframe-rendering.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/11-browser-php-worker-threads.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/12-browser-service-workers.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/13-browser-scopes.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/14-browser-cross-process-communication.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/15-wordpress.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/16-wordpress-database.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/17-browser-wordpress.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/18-host-your-own-playground.md (100%) rename packages/docs/site/docs/{11-architecture => developers/23-architecture}/_category_.json (100%) create mode 100644 packages/docs/site/docs/developers/24-limitations/01-index.md rename packages/docs/site/docs/{01-start-here/01-index.md => main/00-intro.md} (67%) rename packages/docs/site/docs/{02-start-using/01-index.md => main/01-quick-start-guide.md} (94%) rename packages/docs/site/docs/{01-start-here/02-overview.md => main/02-about-playground.md} (99%) create mode 100644 packages/docs/site/docs/main/10-build/01-index.md create mode 100644 packages/docs/site/docs/main/11-test/01-index.md create mode 100644 packages/docs/site/docs/main/12-launch/01-index.md rename packages/docs/site/docs/{13-contributing => main/25-contributing}/01-index.md (100%) rename packages/docs/site/docs/{13-contributing => main/25-contributing}/02-code.md (98%) rename packages/docs/site/docs/{13-contributing => main/25-contributing}/03-coding-standards.md (100%) rename packages/docs/site/docs/{13-contributing => main/25-contributing}/09-contributor-day.md (95%) rename packages/docs/site/docs/{13-contributing => main/25-contributing}/20-documentation.md (100%) rename packages/docs/site/docs/{13-contributing => main/25-contributing}/_category_.json (100%) rename packages/docs/site/docs/{15-resources.md => main/26-resources.md} (100%) rename packages/docs/site/docs/{17-changelog.md => main/27-changelog.md} (100%) diff --git a/packages/docs/site/docs/01-start-here/_category_.json b/packages/docs/site/docs/01-start-here/_category_.json deleted file mode 100644 index 06f0ff4f4d..0000000000 --- a/packages/docs/site/docs/01-start-here/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Start here" -} diff --git a/packages/docs/site/docs/09-blueprints-api/_category_.json b/packages/docs/site/docs/09-blueprints-api/_category_.json deleted file mode 100644 index d6ac2fcefb..0000000000 --- a/packages/docs/site/docs/09-blueprints-api/_category_.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "label": "Blueprints API" -} diff --git a/packages/docs/site/docs/12-limitations/01-index.md b/packages/docs/site/docs/12-limitations/01-index.md deleted file mode 100644 index d17d7fb74a..0000000000 --- a/packages/docs/site/docs/12-limitations/01-index.md +++ /dev/null @@ -1,41 +0,0 @@ ---- -slug: /limitations ---- - -# Limitations - -WordPress Playground is under active development and has some limitations you should keep in mind when running it and developing with it. - -You can track the status of these issues on the [Playground Project board](https://github.com/orgs/WordPress/projects/180). - -## In the browser - -### Access the Plugins, Themes, Blocks, or Patterns directories - -Playground [disables network connections](../09-blueprints-api/03-data-format.md#features) by default, blocking access to wp.org assets (themes, plugins, blocks, or patterns) in `wp-admin`. You can still upload zipped plugin and theme files from your device or enable the option via the [Query API](../08-query-api/01-index.md#available-options) or [Blueprints API](../09-blueprints-api/09-troubleshoot-and-debug-blueprints.md#review-common-gotchas). - -### Temporary by design - -As Playground [streams rather than serves](../01-start-here/02-overview.md#streamed-not-served) WordPress, all database changes and uploads will be gone when you refresh the page. To avoid losing your work, either [export your work](../02-start-using/01-index.md#save-your-site) before or enable storage in the browser/device via the [Query API](../08-query-api/01-index.md#available-options) or the UI. - -## When developing with Playground - -### Iframe quirks - -Playground renders WordPress in an `iframe` so clicking links with `target="_top"` will reload the page you’re working on. -Also, JavaScript popups originating in the `iframe` may not always display. - -### Run WordPress PHP functions - -Playground supports running PHP code in Blueprints using the [`runPHP` step](../09-blueprints-api/05-steps.md#RunPHPStep). To run WordPress-specific PHP functions, you’d need to first require [wp-load.php](https://github.com/WordPress/WordPress/blob/master/wp-load.php): - -```json -{ - "step": "runPHP", - "code": "" -} -``` - -### Using WP-CLI - -You can execute `wp-cli` commands via the Blueprints [`wp-cli`](../09-blueprints-api/05-steps.md#WPCLIStep) step. However, since Playground runs in the browser, it doesn't support the [full array](https://developer.wordpress.org/cli/commands/) of available commands. While there is no definite list of supported commands, experimenting in [the online demo](https://playground.wordpress.net/demos/wp-cli.html) will help you assess what's possible. diff --git a/packages/docs/site/docs/_fragments/_api_list.mdx b/packages/docs/site/docs/_fragments/_api_list.mdx index 861760062c..5363123a17 100644 --- a/packages/docs/site/docs/_fragments/_api_list.mdx +++ b/packages/docs/site/docs/_fragments/_api_list.mdx @@ -1,3 +1,3 @@ -- [Query API](../08-query-api/01-index.md) enable basic operations using only query parameters -- [Blueprints API](../09-blueprints-api/01-index.md) give you a great degree of control with a simple JSON file -- [JavaScript API](../10-javascript-api/01-index.md) give you full control via a JavaScript client from an npm package +- [Query API](../developers/20-query-api/01-index.md) enable basic operations using only query parameters +- [Blueprints API](../blueprints/01-index.md) give you a great degree of control with a simple JSON file +- [JavaScript API](../developers/22-javascript-api/01-index.md) give you full control via a JavaScript client from an npm package diff --git a/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md b/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md index 5401572d32..f00086d40d 100644 --- a/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md +++ b/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md @@ -2,4 +2,4 @@ The site at https://playground.wordpress.net is there to support the community, but there are no guarantees it will continue to work if the traffic grows significantly. -If you need certain availability, you should [host your own WordPress Playground](../11-architecture/18-host-your-own-playground.md). +If you need certain availability, you should [host your own WordPress Playground](../developers/23-architecture/18-host-your-own-playground.md). diff --git a/packages/docs/site/docs/_fragments/_this_is_query_api.md b/packages/docs/site/docs/_fragments/_this_is_query_api.md index a2ca7d3e14..5a6df89098 100644 --- a/packages/docs/site/docs/_fragments/_this_is_query_api.md +++ b/packages/docs/site/docs/_fragments/_this_is_query_api.md @@ -1 +1 @@ -This is called [Query API](../08-query-api/01-index.md) and you can learn more about it [here](../08-query-api/01-index.md). +This is called [Query API](../developers/20-query-api/01-index.md) and you can learn more about it [here](../developers/20-query-api/01-index.md). diff --git a/packages/docs/site/docs/09-blueprints-api/01-index.md b/packages/docs/site/docs/blueprints/01-index.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/01-index.md rename to packages/docs/site/docs/blueprints/01-index.md diff --git a/packages/docs/site/docs/09-blueprints-api/02-using-blueprints.md b/packages/docs/site/docs/blueprints/02-using-blueprints.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/02-using-blueprints.md rename to packages/docs/site/docs/blueprints/02-using-blueprints.md diff --git a/packages/docs/site/docs/09-blueprints-api/03-data-format.md b/packages/docs/site/docs/blueprints/03-data-format.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/03-data-format.md rename to packages/docs/site/docs/blueprints/03-data-format.md diff --git a/packages/docs/site/docs/09-blueprints-api/04-resources.md b/packages/docs/site/docs/blueprints/04-resources.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/04-resources.md rename to packages/docs/site/docs/blueprints/04-resources.md diff --git a/packages/docs/site/docs/09-blueprints-api/05-steps-shorthands.md b/packages/docs/site/docs/blueprints/05-steps-shorthands.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/05-steps-shorthands.md rename to packages/docs/site/docs/blueprints/05-steps-shorthands.md diff --git a/packages/docs/site/docs/09-blueprints-api/05-steps.md b/packages/docs/site/docs/blueprints/05-steps.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/05-steps.md rename to packages/docs/site/docs/blueprints/05-steps.md diff --git a/packages/docs/site/docs/09-blueprints-api/07-json-api-and-function-api.md b/packages/docs/site/docs/blueprints/07-json-api-and-function-api.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/07-json-api-and-function-api.md rename to packages/docs/site/docs/blueprints/07-json-api-and-function-api.md diff --git a/packages/docs/site/docs/09-blueprints-api/08-examples.md b/packages/docs/site/docs/blueprints/08-examples.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/08-examples.md rename to packages/docs/site/docs/blueprints/08-examples.md diff --git a/packages/docs/site/docs/09-blueprints-api/09-troubleshoot-and-debug-blueprints.md b/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/09-troubleshoot-and-debug-blueprints.md rename to packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md b/packages/docs/site/docs/blueprints/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md rename to packages/docs/site/docs/blueprints/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/02-how-to-load-run-blueprints.md b/packages/docs/site/docs/blueprints/blueprint-101/02-how-to-load-run-blueprints.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/02-how-to-load-run-blueprints.md rename to packages/docs/site/docs/blueprints/blueprint-101/02-how-to-load-run-blueprints.md diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/03-build-your-first-blueprint.md b/packages/docs/site/docs/blueprints/blueprint-101/03-build-your-first-blueprint.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/03-build-your-first-blueprint.md rename to packages/docs/site/docs/blueprints/blueprint-101/03-build-your-first-blueprint.md diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/04-troubleshoot-debug-blueprints.md b/packages/docs/site/docs/blueprints/blueprint-101/04-troubleshoot-debug-blueprints.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/04-troubleshoot-debug-blueprints.md rename to packages/docs/site/docs/blueprints/blueprint-101/04-troubleshoot-debug-blueprints.md diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/assets/installed-adventurer-theme.png b/packages/docs/site/docs/blueprints/blueprint-101/assets/installed-adventurer-theme.png similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/assets/installed-adventurer-theme.png rename to packages/docs/site/docs/blueprints/blueprint-101/assets/installed-adventurer-theme.png diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/assets/installed-custom-plugin.png b/packages/docs/site/docs/blueprints/blueprint-101/assets/installed-custom-plugin.png similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/assets/installed-custom-plugin.png rename to packages/docs/site/docs/blueprints/blueprint-101/assets/installed-custom-plugin.png diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/assets/schema-autocompletion.png b/packages/docs/site/docs/blueprints/blueprint-101/assets/schema-autocompletion.png similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/assets/schema-autocompletion.png rename to packages/docs/site/docs/blueprints/blueprint-101/assets/schema-autocompletion.png diff --git a/packages/docs/site/docs/09-blueprints-api/blueprint-101/index.md b/packages/docs/site/docs/blueprints/blueprint-101/index.md similarity index 100% rename from packages/docs/site/docs/09-blueprints-api/blueprint-101/index.md rename to packages/docs/site/docs/blueprints/blueprint-101/index.md diff --git a/packages/docs/site/docs/03-build-an-app/01-index.md b/packages/docs/site/docs/developers/03-build-an-app/01-index.md similarity index 92% rename from packages/docs/site/docs/03-build-an-app/01-index.md rename to packages/docs/site/docs/developers/03-build-an-app/01-index.md index 6b236d2d1d..5ccc036836 100644 --- a/packages/docs/site/docs/03-build-an-app/01-index.md +++ b/packages/docs/site/docs/developers/03-build-an-app/01-index.md @@ -51,7 +51,7 @@ You can install plugins and themes from the WordPress directory with only URL pa What if your plugin is not in the WordPress directory? -You can still showcase it on Playground by using [JSON Blueprints](../09-blueprints-api/01-index.md). For example, this Blueprint would download and install a plugin and a theme from your website and also import some starter content: +You can still showcase it on Playground by using [JSON Blueprints](../../blueprints/01-index.md). For example, this Blueprint would download and install a plugin and a theme from your website and also import some starter content: ```json { @@ -81,7 +81,7 @@ You can still showcase it on Playground by using [JSON Blueprints](../09-bluepri } ``` -See [getting started with Blueprints](../09-blueprints-api/01-index.md) to learn more. +See [getting started with Blueprints](../../blueprints/01-index.md) to learn more. ## Preview pull requests from your repository @@ -93,7 +93,7 @@ You can use Playground as a Pull Request previewer if: - Your CI pipeline bundles your plugin or theme - You can expose the zip file generated by your CI pipeline publicly -Those zip bundles aren't any different from regular WordPress Plugins, which means you can install them in Playground using the [JSON Blueprints](../09-blueprints-api/01-index.md) API. Once you exposed an endpoint like https://your-site.com/pull-request-1234.zip, the following Blueprint will do the rest: +Those zip bundles aren't any different from regular WordPress Plugins, which means you can install them in Playground using the [JSON Blueprints](../../blueprints/01-index.md) API. Once you exposed an endpoint like https://your-site.com/pull-request-1234.zip, the following Blueprint will do the rest: ```json { diff --git a/packages/docs/site/docs/05-local-development/01-wp-now.md b/packages/docs/site/docs/developers/05-local-development/01-wp-now.md similarity index 87% rename from packages/docs/site/docs/05-local-development/01-wp-now.md rename to packages/docs/site/docs/developers/05-local-development/01-wp-now.md index 79416bb646..0a47801610 100644 --- a/packages/docs/site/docs/05-local-development/01-wp-now.md +++ b/packages/docs/site/docs/developers/05-local-development/01-wp-now.md @@ -4,7 +4,7 @@ slug: wp-now # wp-now NPM package -[`@wp-now/wp-now`](https://www.npmjs.com/package/@wp-now/wp-now) is a CLI tool to spin up a WordPress site with a single command. Similarly to the [VS Code extension](/05-local-development/02-vscode-extension.md), it uses a portable WebAssembly version of PHP and SQLite. No Docker, MySQL, or Apache are required. +[`@wp-now/wp-now`](https://www.npmjs.com/package/@wp-now/wp-now) is a CLI tool to spin up a WordPress site with a single command. Similarly to the [VS Code extension](02-vscode-extension.md), it uses a portable WebAssembly version of PHP and SQLite. No Docker, MySQL, or Apache are required. ## Launch wp-now in a plugin or theme directory diff --git a/packages/docs/site/docs/05-local-development/02-vscode-extension.md b/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md similarity index 100% rename from packages/docs/site/docs/05-local-development/02-vscode-extension.md rename to packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md diff --git a/packages/docs/site/docs/05-local-development/03-php-wasm-node.md b/packages/docs/site/docs/developers/05-local-development/03-php-wasm-node.md similarity index 100% rename from packages/docs/site/docs/05-local-development/03-php-wasm-node.md rename to packages/docs/site/docs/developers/05-local-development/03-php-wasm-node.md diff --git a/packages/docs/site/docs/05-local-development/_category_.json b/packages/docs/site/docs/developers/05-local-development/_category_.json similarity index 100% rename from packages/docs/site/docs/05-local-development/_category_.json rename to packages/docs/site/docs/developers/05-local-development/_category_.json diff --git a/packages/docs/site/docs/06-playground-apis/01-index.md b/packages/docs/site/docs/developers/06-playground-apis/01-index.md similarity index 94% rename from packages/docs/site/docs/06-playground-apis/01-index.md rename to packages/docs/site/docs/developers/06-playground-apis/01-index.md index 8f704fa2c6..05cc7eca1a 100644 --- a/packages/docs/site/docs/06-playground-apis/01-index.md +++ b/packages/docs/site/docs/developers/06-playground-apis/01-index.md @@ -87,7 +87,7 @@ wp_insert_post(array( ] }} /> -Learn more about [JSON Blueprints](../09-blueprints-api/01-index.md). +Learn more about [JSON Blueprints](../../blueprints/01-index.md). ## JavaScript API @@ -97,4 +97,4 @@ import JSApiShortExample from '@site/docs/\_fragments/\_js_api_short_example.mdx -Learn more about the [JavaScript API](../10-javascript-api/01-index.md). +Learn more about the [JavaScript API](../22-javascript-api/01-index.md). diff --git a/packages/docs/site/docs/06-playground-apis/02-api-concepts.md b/packages/docs/site/docs/developers/06-playground-apis/02-api-concepts.md similarity index 76% rename from packages/docs/site/docs/06-playground-apis/02-api-concepts.md rename to packages/docs/site/docs/developers/06-playground-apis/02-api-concepts.md index 95e8b0e754..1da9db29ef 100644 --- a/packages/docs/site/docs/06-playground-apis/02-api-concepts.md +++ b/packages/docs/site/docs/developers/06-playground-apis/02-api-concepts.md @@ -10,7 +10,7 @@ WordPress Playground in the browser is all about links and iframes. Regardless o You can customize WordPress Playground by modifying the https://playground.wordpress.net/ link. You can, for example, create a post, request a specific plugin, or run any PHP code. -To prepare such a link, use either the [Query API](../08-query-api/01-index.md) (easy) or the [JSON Blueprints API](../09-blueprints-api/01-index.md) (medium). +To prepare such a link, use either the [Query API](../20-query-api/01-index.md) (easy) or the [JSON Blueprints API](../../blueprints/01-index.md) (medium). Once it's ready, simply post it on your site. It makes a great "Try it yourself" button in a tutorial, for example. @@ -24,8 +24,8 @@ WordPress Playground can be embedded in your app using an ` ``` +:::info +Check the [Query API](../20-query-api/01-index.md) section for more info. +::: + ## Blueprints If you need more control over your Playground, you can use JSON Blueprints. For example, here's how to create a post and install a plugin: @@ -37,30 +41,24 @@ import BlueprintExample from '@site/src/components/Blueprints/BlueprintExample.m 'Post title', -'post_content' => 'Post content', -'post_status' => 'publish', -'post_author' => 1 -)); -\` -} -] -}` } - blueprint={{ + "steps": [ + { + "step": "login" + }, + { + "step": "installPlugin", + "pluginZipFile": { + "resource": "wordpress.org/plugins", + "slug": "friends" + } + }, + { + "step": "runPHP", + "code": " 'Post title', 'post_content' => 'Post content', 'post_status' => 'publish', 'post_author' => 1)); ?>" + } + ] +}` } +blueprint={{ "steps": [ { "step": "login" @@ -87,7 +85,11 @@ wp_insert_post(array( ] }} /> -Learn more about [JSON Blueprints](../../blueprints/01-index.md). +

+ +:::info +Learn more about JSON Blueprints at the [Blueprints Docs Hub](/wordpress-playground/blueprints). +::: ## JavaScript API @@ -97,4 +99,6 @@ import JSApiShortExample from '@site/docs/\_fragments/\_js_api_short_example.mdx -Learn more about the [JavaScript API](../22-javascript-api/01-index.md). +:::info +Check the [JavaScript API](../22-javascript-api/01-index.md) section for more info. +::: diff --git a/packages/docs/site/docs/developers/intro-devs.md b/packages/docs/site/docs/developers/intro-devs.md index 53f4818139..58a76f4aad 100644 --- a/packages/docs/site/docs/developers/intro-devs.md +++ b/packages/docs/site/docs/developers/intro-devs.md @@ -1,10 +1,10 @@ --- -title: Introduction +title: WordPress Playground Developers Docs slug: /developers/ id: intro --- -# WordPress Playground Developers Docs +# Developers Docs Hi! Welcome to WordPress Playground Developer documentation. @@ -19,10 +19,10 @@ Hi! Welcome to WordPress Playground Developer documentation. This docs hub is focused on Developers info and is divided into the following major sections: -- [Build your first app](#) XXX -- [Local Development](#) -- [Playground APIs](#) -- [Query API](#) -- [Javascript API](#) -- [Architecture](#) -- [Limitations](#) +- [Build your first app](./03-build-an-app/01-index.md) XXX +- [Local Development](./05-local-development/intro.md) +- [Playground APIs](./06-playground-apis/01-index.md) +- [Query API](./20-query-api/01-index.md) +- [Javascript API](./22-javascript-api/01-index.md) +- [Architecture](./23-architecture/01-index.md) +- [Limitations](./24-limitations/01-index.md) diff --git a/packages/docs/site/sidebars.js b/packages/docs/site/sidebars.js index b3112ece08..88d2eaccb7 100644 --- a/packages/docs/site/sidebars.js +++ b/packages/docs/site/sidebars.js @@ -20,7 +20,6 @@ const sidebars = { type: 'doc', id: 'main/introduction', }, - // items: [{ type: 'autogenerated', dirName: 'main' }], items: [ 'main/quick-start-guide', 'main/web-instance', @@ -76,17 +75,6 @@ const sidebars = { type: 'doc', id: 'blueprints/introduction', }, - - // - blueprints/data-format - // - blueprints/examples - // - blueprints/index - // - blueprints/introduction - // - blueprints/json-api-and-function-api - // - blueprints/resources - // - blueprints/steps - // - blueprints/steps-shorthands - // - blueprints/troubleshoot-and-debug-blueprints - // - blueprints/using-blueprints items: [ 'blueprints/index', { @@ -173,51 +161,35 @@ const sidebars = { 'developers/javascript-api/mount-data', ], }, - // { type: 'autogenerated', dirName: 'developers' }, + { + type: 'category', + label: 'Architecture', + link: { + type: 'doc', + id: 'developers/architecture/index', + }, + items: [ + 'developers/architecture/wasm-php-overview', + 'developers/architecture/wasm-php-compiling', + 'developers/architecture/wasm-php-javascript-module', + 'developers/architecture/wasm-php-filesystem', + 'developers/architecture/wasm-php-data-dependencies', + 'developers/architecture/wasm-asyncify', + 'developers/architecture/browser-concepts', + 'developers/architecture/browser-tab-orchestrates-execution', + 'developers/architecture/browser-iframe-rendering', + 'developers/architecture/browser-php-worker-threads', + 'developers/architecture/browser-service-workers', + 'developers/architecture/browser-scopes', + 'developers/architecture/browser-cross-process-communication', + 'developers/architecture/wordpress', + 'developers/architecture/wordpress-database', + 'developers/architecture/browser-wordpress', + 'developers/architecture/host-your-own-playground', + ], + }, + 'developers/limitations/index', ], - // items: [ - // 'developers/introduction', - // 'main/quick-start-guide', - // 'main/web-instance', - // { - // type: 'category', - // label: 'About Playground', - // link: { - // type: 'doc', - // id: 'main/about/index', - // }, - // items: [ - // 'main/about/build', - // 'main/about/test', - // 'main/about/launch', - // ], - // }, - // { - // type: 'category', - // label: '📖 Guides', - // link: { - // type: 'doc', - // id: 'main/guides/index', - // }, - // items: [ - // 'main/guides/for-theme-developers', - // 'main/guides/for-plugin-developers', - // ], - // }, - // { - // type: 'category', - // label: 'Contributing', - // items: [ - // 'main/contributing/index', - // 'main/contributing/code', - // 'main/contributing/coding-standards', - // 'main/contributing/contributor-day', - // 'main/contributing/documentation', - // ], - // }, - // 'main/resources', - // 'main/changelog', - // ], }, ], }; From 2b50080ffb84410d6f8d6d4c9907ad69c1573ecb Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Fri, 2 Aug 2024 09:01:22 +0100 Subject: [PATCH 18/32] only local references in links, web instance name fine tuning, improved debug content and moved _assets folder --- .../docs/site/docs/blueprints/01-index.md | 2 +- .../docs/site/docs/blueprints/08-examples.md | 2 +- .../09-troubleshoot-and-debug-blueprints.md | 12 +++++++- .../installed-adventurer-theme.png | Bin .../installed-custom-plugin.png | Bin .../docs/blueprints/_assets/log-errors.png | Bin 0 -> 122777 bytes .../schema-autocompletion.png | Bin ...re-blueprints-what-you-can-do-with-them.md | 5 ++-- .../02-how-to-load-run-blueprints.md | 1 - .../03-build-your-first-blueprint.md | 27 +++++++++--------- .../docs/blueprints/blueprint-101/index.md | 2 +- packages/docs/site/docs/blueprints/intro.md | 2 +- packages/docs/site/docs/main/about/build.md | 2 +- packages/docs/site/docs/main/about/index.md | 8 +++--- .../docs/main/contributing/documentation.md | 2 +- packages/docs/site/docs/main/intro.md | 2 +- packages/docs/site/docs/main/web-instance.md | 8 +++--- 17 files changed, 41 insertions(+), 34 deletions(-) rename packages/docs/site/docs/blueprints/{blueprint-101/assets => _assets}/installed-adventurer-theme.png (100%) rename packages/docs/site/docs/blueprints/{blueprint-101/assets => _assets}/installed-custom-plugin.png (100%) create mode 100644 packages/docs/site/docs/blueprints/_assets/log-errors.png rename packages/docs/site/docs/blueprints/{blueprint-101/assets => _assets}/schema-autocompletion.png (100%) diff --git a/packages/docs/site/docs/blueprints/01-index.md b/packages/docs/site/docs/blueprints/01-index.md index d8ad3e6bd0..3780460c3e 100644 --- a/packages/docs/site/docs/blueprints/01-index.md +++ b/packages/docs/site/docs/blueprints/01-index.md @@ -29,7 +29,7 @@ There are three ways to use Blueprints: - [Paste a Blueprint into the URL "fragment" on WordPress Playground website](./02-using-blueprints.md#url-fragment). - [Use them with the JavaScript API](./02-using-blueprints.md#javascript-api). -- [Reference a blueprint JSON file via QueryParam blueprint-url](https://wordpress.github.io/wordpress-playground/query-api) +- [Reference a blueprint JSON file via QueryParam blueprint-url](../developers/20-query-api/01-index.md) ## What problems are solved by Blueprints? diff --git a/packages/docs/site/docs/blueprints/08-examples.md b/packages/docs/site/docs/blueprints/08-examples.md index 30d356634c..ac93913697 100644 --- a/packages/docs/site/docs/blueprints/08-examples.md +++ b/packages/docs/site/docs/blueprints/08-examples.md @@ -8,7 +8,7 @@ import BlueprintExample from '@site/src/components/Blueprints/BlueprintExample.m # Blueprints Examples :::tip -Check the [Blueprints Gallery](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md) to explore real-world code examples of using WordPress Playground to launch a WordPress site with a variety of initial setups. +Check the [Blueprints Gallery](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md) to explore real-world code examples of using WordPress Playground to launch a WordPress site with a variety of setups. ::: Let's see some cool things you can do with Blueprints. diff --git a/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md b/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md index 177a8ff5e1..ee23dd46b7 100644 --- a/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md +++ b/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md @@ -49,7 +49,7 @@ If your Blueprint isn’t running as expected, open the browser developer tools To open the developer tools in Chrome, Firefox, Safari\*, and Edge: press `Ctrl + Shift + I` on Windows/Linux or `Cmd + Option + I` on macOS. -:::caution Warning +:::caution If you haven't yet, enable the Develop menu: go to **Safari > Settings... > Advanced** and check **Show features for web developers**. @@ -57,6 +57,16 @@ If you haven't yet, enable the Develop menu: go to **Safari > Settings... > Adva The developer tools window allows you to inspect network requests, view console logs, debug JavaScript, and examine the DOM and CSS styles applied to your webpage. This is crucial for diagnosing and fixing issues with Blueprints. +## Log your own error messages + +You can `error_log` your own error messages through [`runPHP` step](./steps#RunPHPStep) (see [blueprint example](https://github.com/wordpress/blueprints/blob/trunk/blueprints/reset-data-and-import-content/blueprint.json) and [live demo](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/wordpress/blueprints/trunk/blueprints/reset-data-and-import-content/blueprint.json)) and check them from the ["View Logs" option](../main/web-instance.md#playground-options-menu) or from the browser's console. + +![Log errors snapshot](./_assets/log-errors.png) + +:::info +When you download your Playground instance as a `zip` through the ["Download as zip" option](../main/web-instance.md#playground-options-menu) you'll also download the `debug.log` file containing all the logs from your Playground instance. +::: + ## Ask for help The community is here to help! If you have questions or comments, [open a new issue](https://github.com/adamziel/blueprints/issues) in this repository. Remember to include the following details: diff --git a/packages/docs/site/docs/blueprints/blueprint-101/assets/installed-adventurer-theme.png b/packages/docs/site/docs/blueprints/_assets/installed-adventurer-theme.png similarity index 100% rename from packages/docs/site/docs/blueprints/blueprint-101/assets/installed-adventurer-theme.png rename to packages/docs/site/docs/blueprints/_assets/installed-adventurer-theme.png diff --git a/packages/docs/site/docs/blueprints/blueprint-101/assets/installed-custom-plugin.png b/packages/docs/site/docs/blueprints/_assets/installed-custom-plugin.png similarity index 100% rename from packages/docs/site/docs/blueprints/blueprint-101/assets/installed-custom-plugin.png rename to packages/docs/site/docs/blueprints/_assets/installed-custom-plugin.png diff --git a/packages/docs/site/docs/blueprints/_assets/log-errors.png b/packages/docs/site/docs/blueprints/_assets/log-errors.png new file mode 100644 index 0000000000000000000000000000000000000000..4e97a434b91e8b9f38ee16022de01519eedb0c96 GIT binary patch literal 122777 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/` becomes `https://wordpress. Learn more about the supported resources in the [Blueprint Resources API Reference](../resources/). ::: -### 4. Install the _Hello Dolly_ plugin +## 4. Install the _Hello Dolly_ plugin A classic WordPress plugin that displays random lyrics from the song "Hello, Dolly!" in the admin dashboard. Let's install it using the [`installPlugin` step](../steps#InstallPluginStep): @@ -167,7 +166,7 @@ The Hello Dolly plugin is now installed and activated. Like the `themeZipFile`, the `pluginZipFile` defines a reference to an external file required for the step. The example uses the `wordpress.org/plugins` resource to install the plugin with the matching `slug` from the WordPress plugin directory. -### 5. Install a custom plugin +## 5. Install a custom plugin Let's install a custom WordPress plugin that adds a message to the admin dashboard: @@ -187,7 +186,7 @@ function my_custom_plugin() { add_action('admin_notices', 'my_custom_plugin'); ``` -You can use the [installPlugin](https://wordpress.github.io/wordpress-playground/blueprints-api/steps#InstallPluginStep), but that requires creating a ZIP file. Let's start with something different to see if the plugin works: +You can use the [installPlugin](../steps#InstallPluginStep), but that requires creating a ZIP file. Let's start with something different to see if the plugin works: 1. Create a `wp-content/plugins/hello-from-the-dashboard` directory using the [`mkdir` step](../steps#MkdirStep). 2. Write a `plugin.php` file using the [`writeFile` step](../steps#WriteFileStep). @@ -273,11 +272,11 @@ Here's the complete Blueprint: That's what it looks like when you navigate to the dashboard: -![Site with the custom plugin](./assets/installed-custom-plugin.png) +![Site with the custom plugin](../_assets/installed-custom-plugin.png) ### Create a plugin and zip it -Encoding PHP files as `JSON` can be useful for quick testing, but it's inconvenient and difficult to read. Instead, create a file with the plugin code, compress it, and use the `ZIP` file as the `resource` in the [`installPlugin` step](https://wordpress.github.io/wordpress-playground/blueprints-api/steps#InstallPluginStep) to install it (the path in the `URL` should match the one in your GitHub repository): +Encoding PHP files as `JSON` can be useful for quick testing, but it's inconvenient and difficult to read. Instead, create a file with the plugin code, compress it, and use the `ZIP` file as the `resource` in the [`installPlugin` step](../steps#InstallPluginStep) to install it (the path in the `URL` should match the one in your GitHub repository): ```json { @@ -336,7 +335,7 @@ You can shorten that Blueprint even more using the shorthand syntax: [   Run Blueprint   ](https://playground.wordpress.net/#eyIkc2NoZW1hIjoiaHR0cHM6Ly9wbGF5Z3JvdW5kLndvcmRwcmVzcy5uZXQvYmx1ZXByaW50LXNjaGVtYS5qc29uIiwibG9naW4iOnRydWUsInNpdGVPcHRpb25zIjp7ImJsb2duYW1lIjoiTXkgZmlyc3QgQmx1ZXByaW50In0sInBsdWdpbnMiOlsiaGVsbG8tZG9sbHkiLCJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vYWRhbXppZWwvYmx1ZXByaW50cy90cnVuay9kb2NzL2hlbGxvLW9uLXRoZS1kYXNoYm9hcmQuemlwIl0sInN0ZXBzIjpbeyJzdGVwIjoiaW5zdGFsbFRoZW1lIiwidGhlbWVaaXBGaWxlIjp7InJlc291cmNlIjoid29yZHByZXNzLm9yZy90aGVtZXMiLCJzbHVnIjoiYWR2ZW50dXJlciJ9fV19) -### 6. Change the site content +## 6. Change the site content Finally, let's delete the default content of the site and import a new one from a WordPress export file (WXR). @@ -360,7 +359,7 @@ foreach ($posts as $post) { } ``` -To run that code during the site setup, use the [`runPHP` step](https://wordpress.github.io/wordpress-playground/blueprints-api/steps#RunPHPStep): +To run that code during the site setup, use the [`runPHP` step](../steps#RunPHPStep): ```json { diff --git a/packages/docs/site/docs/blueprints/blueprint-101/index.md b/packages/docs/site/docs/blueprints/blueprint-101/index.md index 7b252c41ba..5b65f41041 100644 --- a/packages/docs/site/docs/blueprints/blueprint-101/index.md +++ b/packages/docs/site/docs/blueprints/blueprint-101/index.md @@ -13,5 +13,5 @@ Welcome to a Blueprints crash course, where you'll find everything you need to k 3. [Build your first Blueprint](./03-build-your-first-blueprint.md) :::tip -If you encounter any issues while following this tutorial, refer to the [Troubleshoot and debug Blueprints](../09-troubleshoot-and-debug-blueprints.md) section for helpful tips and tools to resolve them. +If you encounter any issues while following this tutorial, refer to the [Troubleshoot and debug Blueprints](../09-troubleshoot-and-debug-blueprints.md) section for tips and tools to help you solve them. ::: diff --git a/packages/docs/site/docs/blueprints/intro.md b/packages/docs/site/docs/blueprints/intro.md index 3bdb8dcf99..f25f2175af 100644 --- a/packages/docs/site/docs/blueprints/intro.md +++ b/packages/docs/site/docs/blueprints/intro.md @@ -9,7 +9,7 @@ import BlueprintExample from '@site/src/components/Blueprints/BlueprintExample.m # Blueprints Docs :::tip -Check the [Blueprints Gallery](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md) to explore real-world code examples of using WordPress Playground to launch a WordPress site with a variety of initial setups. +Check the [Blueprints Gallery](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md) to explore real-world code examples of using WordPress Playground to launch a WordPress site with a variety of setups. ::: Hi! Welcome to WordPress Playground Blueprints documentation. diff --git a/packages/docs/site/docs/main/about/build.md b/packages/docs/site/docs/main/about/build.md index 488c2e0457..ad48450416 100644 --- a/packages/docs/site/docs/main/about/build.md +++ b/packages/docs/site/docs/main/about/build.md @@ -11,4 +11,4 @@ Create and learn WordPress quickly—even on mobile with no signal. Use Playgrou - Install WordPress [in a single click](#). - [Build a block theme](https://youtu.be/gKrij8V3nK0?si=Jz7Dhe3RvxUMl9Cn&t=2488) in your browser and save it to GitHub. -- Integrate with [Open AI](https://make.wordpress.org/polyglots/2023/05/08/translate-live-updates-to-the-translation-playground/) and [CLI apps](https://wordpress.github.io/wordpress-playground/local-development/php-wasm-node) to create new tools. +- Integrate with [Open AI](https://make.wordpress.org/polyglots/2023/05/08/translate-live-updates-to-the-translation-playground/) and [CLI apps](../../developers/05-local-development/03-php-wasm-node.md) to create new tools. diff --git a/packages/docs/site/docs/main/about/index.md b/packages/docs/site/docs/main/about/index.md index ebc359da17..61d81622b1 100644 --- a/packages/docs/site/docs/main/about/index.md +++ b/packages/docs/site/docs/main/about/index.md @@ -44,15 +44,15 @@ When you first start using WordPress Playground, you'll be provided with a separ ### Streamed, not served. -The WordPress you see when you open Playground in your browser is a WordPress that should function like any WordPress, with [a few limitations](https://wordpress.github.io/wordpress-playground/limitations) and the important exception that it's not a permanent server with an internet address which will limit connections to some third-party services (automation, sharing, analysis, email, backups, etc.) in a persistent way. +The WordPress you see when you open Playground in your browser is a WordPress that should function like any WordPress, with [a few limitations](../../developers/24-limitations/01-index.md) and the important exception that it's not a permanent server with an internet address which will limit connections to some third-party services (automation, sharing, analysis, email, backups, etc.) in a persistent way. -The loading screen and progress bar you see on Playground includes both the streaming of those foundational technologies to your browser and configuration steps [(examples)](https://wordpress.github.io/wordpress-playground/blueprints-api/examples) from [WordPress Blueprints](https://github.com/WordPress/blueprints-library), so that a full server, WordPress software, Theme & Plugin solutions and configuration instructions can be streamed over-the-wire. +The loading screen and progress bar you see on Playground includes both the streaming of those foundational technologies to your browser and configuration steps [(examples)](../../blueprints/08-examples.md) from [WordPress Blueprints](https://github.com/WordPress/blueprints-library), so that a full server, WordPress software, Theme & Plugin solutions and configuration instructions can be streamed over-the-wire. -While many WordPress solutions may require internet connectivity to interact with social networks, live feeds, and other internet services, those connections [could be limited in Playground](https://wordpress.github.io/wordpress-playground/architecture/wasm-php-overview/#networking-support-varies-between-platforms). However, by enabling network connectivity in the Customize Playground settings modal [(example URL w/ query parameter)](https://playground.wordpress.net/?networking=yes), you can mostly wire up internet connectivity to WordPress in Playground. +While many WordPress solutions may require internet connectivity to interact with social networks, live feeds, and other internet services, those connections [could be limited in Playground](../../developers/23-architecture/02-wasm-php-overview.md#networking-support-varies-between-platforms). However, by enabling network connectivity in the Customize Playground settings modal [(example URL w/ query parameter)](https://playground.wordpress.net/?networking=yes), you can mostly wire up internet connectivity to WordPress in Playground. ## What makes Playground different from running WordPress on a web server or local desktop app? -Web applications like WordPress have long relied on server technologies [to run logic](https://wordpress.github.io/wordpress-playground/architecture/wasm-php-overview) and [store data](https://wordpress.github.io/wordpress-playground/architecture/wordpress#sqlite). +Web applications like WordPress have long relied on server technologies [to run logic](../../developers/23-architecture/02-wasm-php-overview.md) and [store data](../../developers/23-architecture/15-wordpress.md#sqlite). Using those technologies has meant either running a web server connected to the internet or using those technologies in a desktop service or app (sometimes called a "WordPress local environment") that either leans on a virtual server with the technologies installed or the underlying technologies on the current device. diff --git a/packages/docs/site/docs/main/contributing/documentation.md b/packages/docs/site/docs/main/contributing/documentation.md index 509ed7089a..4578f1f99f 100644 --- a/packages/docs/site/docs/main/contributing/documentation.md +++ b/packages/docs/site/docs/main/contributing/documentation.md @@ -1,6 +1,6 @@ # Documentation contributions -[WordPress Playground's documentation site](https://wordpress.github.io/wordpress-playground) is maintained by volunteers like you, who'd love your help. +[WordPress Playground's documentation site](../intro.md) is maintained by volunteers like you, who'd love your help. All [documentation-related topics](https://github.com/WordPress/wordpress-playground/labels/%5BType%5D%20Documentation) are labeled `documentation`. Browse the list of open issues to find one you'd like to work on. Alternatively, if you believe something is missing from the current documentation, open an issue to discuss your suggestion. diff --git a/packages/docs/site/docs/main/intro.md b/packages/docs/site/docs/main/intro.md index 3ab6a6f01a..e7229744d2 100644 --- a/packages/docs/site/docs/main/intro.md +++ b/packages/docs/site/docs/main/intro.md @@ -29,7 +29,7 @@ This docs hub is focused on starting with WordPress Playground and is divided in - **[Quick Start Guide](./quick-start-guide.md)**: For those just starting out with WordPress Playground, this is where you can get up and running with WordPress Playground quickly to [start a new WordPress site](/wordpress-playground/quick-start-guide#start-a-new-wordpress-site) and [try a block/theme/plugin](/wordpress-playground/quick-start-guide#try-a-block-a-theme-or-a-plugin) or [test a specific WordPress/PHP version](/wordpress-playground/quick-start-guide#use-a-specific-wordpress-or-php-version). -- **[Playground Website](./web-instance)**: Learn morea bout the Playground instance you get at https://playground.wordpress.net/ +- **[Playground web instance](./web-instance)**: Learn morea bout the Playground instance you get at https://playground.wordpress.net/ - **[About Playground](./about/index.md)**: To learn about WordPress Playground, how safe it is, what you can do with and some of its current limitations, visit this section. diff --git a/packages/docs/site/docs/main/web-instance.md b/packages/docs/site/docs/main/web-instance.md index ffa6182fb8..c9215fcd5f 100644 --- a/packages/docs/site/docs/main/web-instance.md +++ b/packages/docs/site/docs/main/web-instance.md @@ -1,9 +1,9 @@ --- -title: Playground Website +title: Playground web instance slug: /web-instance --- -# WordPress Playground Website +# WordPress Playground web instance [https://playground.wordpress.net/](https://playground.wordpress.net/) is a versatile tool that allows developers to run WordPress in a browser without needing a server. This environment is particularly useful for testing plugins, themes, and other WordPress features quickly and efficiently. @@ -53,8 +53,8 @@ This menu contains links to some Playground resources and tools: - **View Logs**: This option will take you to modal that will show any error logs for Playground, WordPress and PHP. -- **Edit the blueprint**: This option will open the current blueprint used for the Playground instance in the [Blueprints Builder tool](../blueprints/09-troubleshoot-and-debug-blueprints.md#blueprints-builder). From this tool you'll be able to edit the blueprint online and run a new Playground instance with your edited version of the blueprint. +- **Edit the blueprint**: This option will open the current blueprint used for the Playground instance in the [Blueprints Builder tool](https://playground.wordpress.net/builder/builder.html). From this tool you'll be able to edit the blueprint online and run a new Playground instance with your edited version of the blueprint. -![snapshot of Builder mode of WordPress Playground](./_assets/builder-mode.png) +[![snapshot of Builder mode of WordPress Playground](./_assets/builder-mode.png)](https://playground.wordpress.net/builder/builder.html) From a33de153c223e7dad69600ab80a799d6f2dda662 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Fri, 2 Aug 2024 12:37:09 +0100 Subject: [PATCH 19/32] Developers hub audited and updated --- .../docs/site/docs/_fragments/_api_list.mdx | 2 +- .../_playground_wp_net_may_stop_working.md | 2 +- .../09-troubleshoot-and-debug-blueprints.md | 3 +- .../developers/03-build-an-app/01-index.md | 4 +- .../05-local-development/01-wp-now.md | 21 +++++-- .../02-vscode-extension.md | 11 ++++ .../developers/05-local-development/intro.md | 55 ++++-------------- .../developers/06-playground-apis/01-index.md | 4 +- .../docs/site/docs/developers/intro-devs.md | 16 ++--- packages/docs/site/docs/main/web-instance.md | 9 ++- packages/docs/site/sidebars.js | 58 ++++++++++--------- 11 files changed, 93 insertions(+), 92 deletions(-) diff --git a/packages/docs/site/docs/_fragments/_api_list.mdx b/packages/docs/site/docs/_fragments/_api_list.mdx index 5363123a17..ac01cc6ec4 100644 --- a/packages/docs/site/docs/_fragments/_api_list.mdx +++ b/packages/docs/site/docs/_fragments/_api_list.mdx @@ -1,3 +1,3 @@ - [Query API](../developers/20-query-api/01-index.md) enable basic operations using only query parameters -- [Blueprints API](../blueprints/01-index.md) give you a great degree of control with a simple JSON file +- [Blueprints API](../blueprints/intro.md) give you a great degree of control with a simple JSON file - [JavaScript API](../developers/22-javascript-api/01-index.md) give you full control via a JavaScript client from an npm package diff --git a/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md b/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md index f00086d40d..84e6f0bd4b 100644 --- a/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md +++ b/packages/docs/site/docs/_fragments/_playground_wp_net_may_stop_working.md @@ -1,4 +1,4 @@ -:::danger Careful with the demo site +:::caution Careful with the demo site The site at https://playground.wordpress.net is there to support the community, but there are no guarantees it will continue to work if the traffic grows significantly. diff --git a/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md b/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md index ee23dd46b7..009b18e01b 100644 --- a/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md +++ b/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md @@ -1,6 +1,5 @@ --- -sidebar_position: 9 -title: Troubleshoot and debug Blueprints +title: Troubleshoot and debug --- # Troubleshoot and debug Blueprints diff --git a/packages/docs/site/docs/developers/03-build-an-app/01-index.md b/packages/docs/site/docs/developers/03-build-an-app/01-index.md index 821f9cc187..1b98d1d127 100644 --- a/packages/docs/site/docs/developers/03-build-an-app/01-index.md +++ b/packages/docs/site/docs/developers/03-build-an-app/01-index.md @@ -1,9 +1,9 @@ --- -title: Build your first app +title: Quick Start Guide for Developers slug: /developers/build-your-first-app --- -# Build an app with WordPress Playground in 5 minutes +# Quick Start Guide for Developers WordPress Playground was created as a programmable tool. Below you'll find a few examples of what you can do with it. Each discussed API is described in detail in the [APIs section](../06-playground-apis/01-index.md): diff --git a/packages/docs/site/docs/developers/05-local-development/01-wp-now.md b/packages/docs/site/docs/developers/05-local-development/01-wp-now.md index 0a47801610..d67333ae3a 100644 --- a/packages/docs/site/docs/developers/05-local-development/01-wp-now.md +++ b/packages/docs/site/docs/developers/05-local-development/01-wp-now.md @@ -1,11 +1,26 @@ --- +title: wp-now slug: wp-now --- # wp-now NPM package +[wp-now](https://www.npmjs.com/package/@wp-now/wp-now) is a command-line tool designed to simplify the process of running WordPress locally. It provides a quick and easy way to set up a local WordPress environment with minimal configuration. + +Key Features: + +- **Command-line Interface**: Easy to use for developers comfortable with CLI. +- **Quick Setup**: Set up a local WordPress environment in seconds. +- **Customizable**: Allows for configuration to suit specific development needs. + [`@wp-now/wp-now`](https://www.npmjs.com/package/@wp-now/wp-now) is a CLI tool to spin up a WordPress site with a single command. Similarly to the [VS Code extension](02-vscode-extension.md), it uses a portable WebAssembly version of PHP and SQLite. No Docker, MySQL, or Apache are required. +:::info **Documentation** + +`wp-now` is maintained in a different GitHub repository, [Playground Tools](https://github.com/WordPress/playground-tools/). You can find the latest documentation in the [dedicated README file](https://github.com/WordPress/playground-tools/blob/trunk/packages/wp-now/README.md). + +::: + ## Launch wp-now in a plugin or theme directory Navigate to your plugin or theme directory and start `wp-now` with the following commands: @@ -24,12 +39,6 @@ cd my-wordpress-folder/wp-content npx @wp-now/wp-now start --wp=6.4 --php=8.0 --blueprint=path/to/blueprint.json ``` -:::info **Documentation** - -`wp-now` is maintained in a different GitHub repository, [Playground Tools](https://github.com/WordPress/playground-tools/). You can find the latest documentation in the [dedicated README file](https://github.com/WordPress/playground-tools/blob/trunk/packages/wp-now/README.md). - -::: - ## Install wp-now globally Alternatively, you can install `@wp-now/wp-now` globally to load it from any directory: diff --git a/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md b/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md index 6de86fa23d..d2ee0f5002 100644 --- a/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md +++ b/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md @@ -2,12 +2,23 @@ Start a zero-setup development environment using the [VS Code extension](https://marketplace.visualstudio.com/items?itemName=WordPressPlayground.wordpress-playground), and develop your plugin or theme locally without installing Apache or MySQL. +Key Features: + +- **Integrated Development**: Develop WordPress sites directly within VS Code. +- **Ease of Use**: Simplifies the development workflow with integrated tools. + :::info **Documentation** The VS Code extension is maintained in a different GitHub repository, [Playground Tools](https://github.com/WordPress/playground-tools/). You can find the latest documentation in the [dedicated README file](https://github.com/WordPress/playground-tools/blob/trunk/packages/vscode-extension/README.md). ::: +## Installation and Usage: + +1. **Install the Extension**: Search for “WordPress Playground” in the VS Code extensions marketplace and install it. +2. **Setup**: Follow the setup instructions provided in the extension to configure your development environment. +3. **Develop and Debug**: Use the integrated tools to develop and debug your WordPress site. + The extension ships with a portable WebAssembly version of PHP and sets up WordPress to use SQLite. Once installed, all you have to do is click the **Start WordPress Server** button in VS Code: import Image from '@theme/IdealImage'; diff --git a/packages/docs/site/docs/developers/05-local-development/intro.md b/packages/docs/site/docs/developers/05-local-development/intro.md index c6d068b2ce..61a81fb45d 100644 --- a/packages/docs/site/docs/developers/05-local-development/intro.md +++ b/packages/docs/site/docs/developers/05-local-development/intro.md @@ -1,50 +1,19 @@ -## Development Environments +--- +title: Local Development +slug: developers/local-development +id: intro-local-development +--- -Playground powers offers several development environments designed to streamline the process of setting up and managing WordPress sites. Each of these environments provides unique features to enhance the development experience, particularly focusing on ease of installation and use. +## Local Development Environments with WordPress Playground -### WordPress Playground Website +Playground powers offers several development environments designed to streamline the process of setting up and managing WordPress sites. -[https://playground.wordpress.net/](https://playground.wordpress.net/) is a versatile tool that allows developers to run WordPress in a browser without needing a server. This environment is particularly useful for testing plugins, themes, and other WordPress features quickly and efficiently. +The easiest way to set up a WordPress site is to open a [public Playground web instance](../../main/web-instance.md) from https://playground.wordpress.net/ (you could also [host your own WordPress Playground](../23-architecture/18-host-your-own-playground.md)). -#### Key Features: +But Playground also provides additional tools to establish a WordPress environment designed to enhance the development experience by prioritizing ease of installation and usability: -- **Browser-based**: No need for a local server setup. -- **Instant Setup**: Run WordPress with a single click. -- **Testing Environment**: Ideal for testing plugins and themes. +- [`wp-now`](./01-wp-now.md) - CLI tool to spin up a WordPress site with a single command -### wp-now +- [Visual Studio Code Extension](./02-vscode-extension.md) - Integrates WordPress development directly into Visual Studio Code to get a seamless development experience within the popular code editor. -[wp-now](https://www.npmjs.com/package/@wp-now/wp-now) is a command-line tool designed to simplify the process of running WordPress locally. It provides a quick and easy way to set up a local WordPress environment with minimal configuration. - -#### Key Features: - -- **Command-line Interface**: Easy to use for developers comfortable with CLI. -- **Quick Setup**: Set up a local WordPress environment in seconds. -- **Customizable**: Allows for configuration to suit specific development needs. - -#### Installation and Usage: - -1. **Install wp-now**: Use npm to install wp-now globally. - - npm install -g @wp-now/wp-now - -2. **Run WordPress**: Navigate to your project directory and run: - - wp-now - -3. **Access Local Site**: Open the provided local URL in your browser to start using WordPress. - -### VS Code Extension - -The [WordPress Playground VS Code extension](https://marketplace.visualstudio.com/items?itemName=WordPressPlayground.wordpress-playground) integrates WordPress development directly into Visual Studio Code, providing a seamless development experience within the popular code editor. - -#### Key Features: - -- **Integrated Development**: Develop WordPress sites directly within VS Code. -- **Ease of Use**: Simplifies the development workflow with integrated tools. - -#### Installation and Usage: - -1. **Install the Extension**: Search for “WordPress Playground” in the VS Code extensions marketplace and install it. -2. **Setup**: Follow the setup instructions provided in the extension to configure your development environment. -3. **Develop and Debug**: Use the integrated tools to develop and debug your WordPress site. +- [WordPress Playground in Node.js](./03-php-wasm-node.md) - As a WebAssembly project, you can also use WordPress Playground in Node.js. diff --git a/packages/docs/site/docs/developers/06-playground-apis/01-index.md b/packages/docs/site/docs/developers/06-playground-apis/01-index.md index 8af4db3b7e..fcb5a56c47 100644 --- a/packages/docs/site/docs/developers/06-playground-apis/01-index.md +++ b/packages/docs/site/docs/developers/06-playground-apis/01-index.md @@ -88,7 +88,9 @@ wp_insert_post(array(

:::info -Learn more about JSON Blueprints at the [Blueprints Docs Hub](/wordpress-playground/blueprints). + +Blueprints play a significant role in WordPress Playground, so they have their own dedicated documentation hub. Learn more about JSON Blueprints at the [Blueprints Docs Hub](/wordpress-playground/blueprints). + ::: ## JavaScript API diff --git a/packages/docs/site/docs/developers/intro-devs.md b/packages/docs/site/docs/developers/intro-devs.md index 58a76f4aad..012d6b432f 100644 --- a/packages/docs/site/docs/developers/intro-devs.md +++ b/packages/docs/site/docs/developers/intro-devs.md @@ -19,10 +19,12 @@ Hi! Welcome to WordPress Playground Developer documentation. This docs hub is focused on Developers info and is divided into the following major sections: -- [Build your first app](./03-build-an-app/01-index.md) XXX -- [Local Development](./05-local-development/intro.md) -- [Playground APIs](./06-playground-apis/01-index.md) -- [Query API](./20-query-api/01-index.md) -- [Javascript API](./22-javascript-api/01-index.md) -- [Architecture](./23-architecture/01-index.md) -- [Limitations](./24-limitations/01-index.md) +- [Quick Start Guide for Developers](./03-build-an-app/01-index.md): Begin your development journey with Playground by exploring some examples of what you can achieve using Playground APIs. + +- [Local Development](./05-local-development/intro.md): Discover the tools provided by Playground to streamline the process of setting up and managing WordPress sites. + +- [Playground APIs](./06-playground-apis/01-index.md): Explore the main APIs exposed by WordPress Playground to interact with the Playground: [Query API](./20-query-api/01-index.md), [Blueprints](../blueprints/), [Javascript API](./22-javascript-api/01-index.md) + +- [Architecture](./23-architecture/01-index.md): The specifics of WordPress Playground's architecture, including its various components and tools. + +- [Limitations](./24-limitations/01-index.md): Learn more about the current limitations of WordPress Playground, which include disabled network connections, temporary data, iframe quirks, PHP function execution requirements, and partial WP-CLI support. diff --git a/packages/docs/site/docs/main/web-instance.md b/packages/docs/site/docs/main/web-instance.md index c9215fcd5f..fdd308d9f7 100644 --- a/packages/docs/site/docs/main/web-instance.md +++ b/packages/docs/site/docs/main/web-instance.md @@ -5,7 +5,7 @@ slug: /web-instance # WordPress Playground web instance -[https://playground.wordpress.net/](https://playground.wordpress.net/) is a versatile tool that allows developers to run WordPress in a browser without needing a server. This environment is particularly useful for testing plugins, themes, and other WordPress features quickly and efficiently. +[https://playground.wordpress.net/](https://playground.wordpress.net/) is a versatile web tool that allows developers to run WordPress in a browser without needing a server. This environment is particularly useful for testing plugins, themes, and other WordPress features quickly and efficiently. Some key features: @@ -58,3 +58,10 @@ This menu contains links to some Playground resources and tools: [![snapshot of Builder mode of WordPress Playground](./_assets/builder-mode.png)](https://playground.wordpress.net/builder/builder.html) + +:::caution + +The site at https://playground.wordpress.net is there to support the community, but there are no guarantees it will continue to work if the traffic grows significantly. + +If you need certain availability, you should [host your own WordPress Playground](../developers/23-architecture/18-host-your-own-playground.md). +::: diff --git a/packages/docs/site/sidebars.js b/packages/docs/site/sidebars.js index 88d2eaccb7..fc17cc3ae6 100644 --- a/packages/docs/site/sidebars.js +++ b/packages/docs/site/sidebars.js @@ -36,18 +36,18 @@ const sidebars = { 'main/about/launch', ], }, - { - type: 'category', - label: 'Guides', - link: { - type: 'doc', - id: 'main/guides/index', - }, - items: [ - 'main/guides/for-theme-developers', - 'main/guides/for-plugin-developers', - ], - }, + // { + // type: 'category', + // label: 'Guides', + // link: { + // type: 'doc', + // id: 'main/guides/index', + // }, + // items: [ + // 'main/guides/for-theme-developers', + // 'main/guides/for-plugin-developers', + // ], + // }, { type: 'category', label: 'Contributing', @@ -128,7 +128,7 @@ const sidebars = { label: 'Local Development', link: { type: 'doc', - id: 'developers/local-development/intro', + id: 'developers/local-development/intro-local-development', }, items: [ 'developers/local-development/wp-now', @@ -143,22 +143,24 @@ const sidebars = { type: 'doc', id: 'developers/playground-apis/index', }, - items: ['developers/playground-apis/api-concepts'], - }, - 'developers/query-api/index', - { - type: 'category', - label: 'Javascript API', - link: { - type: 'doc', - id: 'developers/javascript-api/index', - }, items: [ - 'developers/javascript-api/playground-api-client', - 'developers/javascript-api/index-html-vs-remote-html', - 'developers/javascript-api/blueprint-json-in-api-client', - 'developers/javascript-api/blueprint-functions-in-api-client', - 'developers/javascript-api/mount-data', + 'developers/playground-apis/api-concepts', + 'developers/query-api/index', + { + type: 'category', + label: 'Javascript API', + link: { + type: 'doc', + id: 'developers/javascript-api/index', + }, + items: [ + 'developers/javascript-api/playground-api-client', + 'developers/javascript-api/index-html-vs-remote-html', + 'developers/javascript-api/blueprint-json-in-api-client', + 'developers/javascript-api/blueprint-functions-in-api-client', + 'developers/javascript-api/mount-data', + ], + }, ], }, { From 403390c8242199a16c7e82b995f03c52c41b8860 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Mon, 5 Aug 2024 12:55:12 +0100 Subject: [PATCH 20/32] Latest changes pre open PR to review --- .../docs/site/docs/blueprints/01-index.md | 2 +- .../docs/site/docs/blueprints/05-steps.md | 10 ++-- packages/docs/site/docs/blueprints/intro.md | 2 - .../developers/05-local-development/intro.md | 10 ++-- .../docs/site/docs/developers/intro-devs.md | 2 +- packages/docs/site/docs/main/about/build.md | 31 +++++++++++-- packages/docs/site/docs/main/about/index.md | 6 +-- packages/docs/site/docs/main/about/launch.md | 18 ++++++-- packages/docs/site/docs/main/about/test.md | 34 ++++++++++++-- ...site-in-a-native-ios-app-via-playground.md | 46 +++++++++++++++++++ packages/docs/site/docs/main/guides/index.md | 8 ++++ packages/docs/site/docusaurus.config.js | 10 ++-- packages/docs/site/sidebars.js | 27 +++++------ packages/docs/site/src/css/custom.css | 12 +++++ 14 files changed, 174 insertions(+), 44 deletions(-) create mode 100644 packages/docs/site/docs/main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md diff --git a/packages/docs/site/docs/blueprints/01-index.md b/packages/docs/site/docs/blueprints/01-index.md index 3780460c3e..09ff376c35 100644 --- a/packages/docs/site/docs/blueprints/01-index.md +++ b/packages/docs/site/docs/blueprints/01-index.md @@ -1,5 +1,5 @@ --- -title: Getting started with Blueprints +title: Getting started --- # Getting started with Blueprints diff --git a/packages/docs/site/docs/blueprints/05-steps.md b/packages/docs/site/docs/blueprints/05-steps.md index 2e12454723..3c2e351d91 100644 --- a/packages/docs/site/docs/blueprints/05-steps.md +++ b/packages/docs/site/docs/blueprints/05-steps.md @@ -20,11 +20,13 @@ import BlueprintExample from '@site/src/components/Blueprints/BlueprintExample.m Each step is an object that contains a `step` property that specifies the type of step to run. The rest of the properties depend on the type of step. Learn and try each step type below. -:::info -Some steps have a shorthand version. Check the [Shorthands](./05-steps-shorthands.md) section for more information about them. +The following step-related topics are addressed on dedicated pages included in this section: -For each step listed below, you'll find both a "Blueprint API" and a "Function API". Refer to the [API Consistency](./07-json-api-and-function-api.md) for further details. -::: +- [Resources References](./04-resources.md) allow you use external files in Blueprints. + +- Some steps have a shorthand version. Check the [Shorthands](./05-steps-shorthands.md) section for more information about them. + +- For each step listed below, you'll find both a "Blueprint API" and a "Function API". Refer to the [API Consistency](./07-json-api-and-function-api.md) page for further details. --- diff --git a/packages/docs/site/docs/blueprints/intro.md b/packages/docs/site/docs/blueprints/intro.md index f25f2175af..52e89b853e 100644 --- a/packages/docs/site/docs/blueprints/intro.md +++ b/packages/docs/site/docs/blueprints/intro.md @@ -35,8 +35,6 @@ This docs hub is focused on Blueprints info and is divided into the following ma - [Using Blueprints](./02-using-blueprints.md): Learn in this section different ways to use Blueprints. -- [Resources References](./04-resources.md): Resource References allow you use external files in Blueprints. Learn more about them in this section. - - [Steps](./05-steps.md): API Reference of all the available steps that can be set in a blueprint to run tasks such as login, plugin/theme activation, file operations, and more. - [Examples](./08-examples.md): Compilation of Blueprint examples for various WordPress Playground setups, including installing themes/plugins, running PHP code, enabling features, and loading specific WordPress versions. diff --git a/packages/docs/site/docs/developers/05-local-development/intro.md b/packages/docs/site/docs/developers/05-local-development/intro.md index 61a81fb45d..1be63afd92 100644 --- a/packages/docs/site/docs/developers/05-local-development/intro.md +++ b/packages/docs/site/docs/developers/05-local-development/intro.md @@ -4,16 +4,18 @@ slug: developers/local-development id: intro-local-development --- -## Local Development Environments with WordPress Playground +## Local Development with WordPress Playground Playground powers offers several development environments designed to streamline the process of setting up and managing WordPress sites. -The easiest way to set up a WordPress site is to open a [public Playground web instance](../../main/web-instance.md) from https://playground.wordpress.net/ (you could also [host your own WordPress Playground](../23-architecture/18-host-your-own-playground.md)). +The easiest way to get WordPress site up and running is to open a [public Playground web instance](../../main/web-instance.md) from https://playground.wordpress.net/ (you could also [host your own WordPress Playground](../23-architecture/18-host-your-own-playground.md)). -But Playground also provides additional tools to establish a WordPress environment designed to enhance the development experience by prioritizing ease of installation and usability: +Playground provides additional tools to check your code on a local WordPress environment. These tools are designed to enhance the development experience by prioritizing ease of installation and usability: - [`wp-now`](./01-wp-now.md) - CLI tool to spin up a WordPress site with a single command - [Visual Studio Code Extension](./02-vscode-extension.md) - Integrates WordPress development directly into Visual Studio Code to get a seamless development experience within the popular code editor. -- [WordPress Playground in Node.js](./03-php-wasm-node.md) - As a WebAssembly project, you can also use WordPress Playground in Node.js. +But Playground also provides tools to use WordPress Playground in Node.js: + +- [WordPress Playground in Node.js](./03-php-wasm-node.md) - If you need low-level control over the underlying WebAssembly PHP build, take a look at the [`@php-wasm/node` package](https://npmjs.org/@php-wasm/node) which ships the PHP WebAssembly runtime. diff --git a/packages/docs/site/docs/developers/intro-devs.md b/packages/docs/site/docs/developers/intro-devs.md index 012d6b432f..d6d470af01 100644 --- a/packages/docs/site/docs/developers/intro-devs.md +++ b/packages/docs/site/docs/developers/intro-devs.md @@ -21,7 +21,7 @@ This docs hub is focused on Developers info and is divided into the following ma - [Quick Start Guide for Developers](./03-build-an-app/01-index.md): Begin your development journey with Playground by exploring some examples of what you can achieve using Playground APIs. -- [Local Development](./05-local-development/intro.md): Discover the tools provided by Playground to streamline the process of setting up and managing WordPress sites. +- [Local Development](./05-local-development/intro.md): Discover the tools provided by Playground to streamline the process of setting up and managing WordPress sites and build your apps. - [Playground APIs](./06-playground-apis/01-index.md): Explore the main APIs exposed by WordPress Playground to interact with the Playground: [Query API](./20-query-api/01-index.md), [Blueprints](../blueprints/), [Javascript API](./22-javascript-api/01-index.md) diff --git a/packages/docs/site/docs/main/about/build.md b/packages/docs/site/docs/main/about/build.md index ad48450416..d935d8ca1c 100644 --- a/packages/docs/site/docs/main/about/build.md +++ b/packages/docs/site/docs/main/about/build.md @@ -7,8 +7,31 @@ sidebar_class_name: navbar-build-item # Build -Create and learn WordPress quickly—even on mobile with no signal. Use Playground where you work best, whether that’s in the browser, Node.js, mobile apps, VS Code, or elsewhere. +WordPress Playground can help you to create and learn WordPress quickly, even on mobile with no signal. You can use Playground where you work best, whether that’s in the browser, Node.js, mobile apps, VS Code, or elsewhere. -- Install WordPress [in a single click](#). -- [Build a block theme](https://youtu.be/gKrij8V3nK0?si=Jz7Dhe3RvxUMl9Cn&t=2488) in your browser and save it to GitHub. -- Integrate with [Open AI](https://make.wordpress.org/polyglots/2023/05/08/translate-live-updates-to-the-translation-playground/) and [CLI apps](../../developers/05-local-development/03-php-wasm-node.md) to create new tools. +## Setting quickly a local WordPress environment + +You can seamlessly integrate Playground into your development workflow to launch a local WordPress environment quickly for testing your code. You can do this directly [from the terminal](#) or [your preferred IDE.](#) + +## Save changes done on a Block Theme and create a PR for a GitHub repository + +You can connect your Playground instance to a GitHub repository and create a Pull Request with the changes you’ve done through the WordPress UI, leveraging the [Create Block Theme](https://wordpress.org/plugins/create-block-theme/) plugin. + +With this workflow, you could build a block theme completely in your browser and save your change to GitHub, or you could improve/fix an existing one. + +Some examples of this workflow: + +- [Developer Hours: Creating WordPress Playground Blueprints for Testing and Demos](https://www.youtube.com/watch?v=gKrij8V3nK0&t=2488s) +- [Recap Hallway Hangout: Theme Building with Playground, Create-block-theme plugin, and GitHub](https://make.wordpress.org/core/2024/06/25/recap-hallway-hangout-theme-building-with-playground-create-block-theme-plugin-and-github/) + +## Integrate with other APIs to create new tools. + +Playground can be combined with different APIs to create amazing tools. The possibilities are endless. + +You can [use WordPress Playground in Node.js](#) to create new tools. The [@php-wasm/node package](https://npmjs.org/@php-wasm/node), which ships the PHP WebAssembly runtime, is the package used for [https://playground.wordpress.net/](https://playground.wordpress.net/), for example. + +Another interesting app built on top of Playground is **Translate Live** (see [example](https://translate.wordpress.org/projects/wp-plugins/friends/dev/de/default/playground/)) which, in combination with Open AI provides a WordPress translations tool “in place” where translations can be seen and modified in their real context (see example). Read more about this tool at [Translate Live: Updates to the Translation Playground](https://make.wordpress.org/polyglots/2023/05/08/translate-live-updates-to-the-translation-playground/) + +## Enbed a WordPress site in non-web environments + +The [How to ship a real WordPress site in a native iOS app via Playground?](../guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground) guide shows how we can leverage Playground to wrap a WordPress site into an IOS app. diff --git a/packages/docs/site/docs/main/about/index.md b/packages/docs/site/docs/main/about/index.md index 61d81622b1..06b052055d 100644 --- a/packages/docs/site/docs/main/about/index.md +++ b/packages/docs/site/docs/main/about/index.md @@ -11,9 +11,9 @@ slug: /about WordPress Playground is your place to build, test, and launch: -- [Build](https://file+.vscode-resource.vscode-cdn.net/Users/juanmanuelgarrido/PROJECTS/2024/wordpress-playground/packages/docs/site/docs/main/about/build.md): WordPress Playground can help you to build products with WordPress. Use it from where you work best, whether that's in the browser, Node.js, mobile apps, VS Code, or elsewhere. -- [Test](https://file+.vscode-resource.vscode-cdn.net/Users/juanmanuelgarrido/PROJECTS/2024/wordpress-playground/packages/docs/site/docs/main/about/test.md): Upgrade your QA process with WordPress Playground. Quickly test your plugins or themes, experiment in a private sandbox, and create PRs from your WP Playground instance to any repo. -- [Launch](https://file+.vscode-resource.vscode-cdn.net/Users/juanmanuelgarrido/PROJECTS/2024/wordpress-playground/packages/docs/site/docs/main/about/launch.md): Use WordPress Playground to showcase your product, let users try it live, or launch it in the App Store with zero lead time. +- [Build](./build.md): WordPress Playground can help you to build products with WordPress. Use it from where you work best, whether that's in the browser, Node.js, mobile apps, VS Code, or elsewhere. +- [Test](./test.md): Upgrade your QA process with WordPress Playground. Quickly test your plugins or themes, experiment in a private sandbox, and create PRs from your WP Playground instance to any repo. +- [Launch](./launch.md): Use WordPress Playground to showcase your product, let users try it live, or launch it in the App Store with zero lead time. ## Why WordPress Playground? diff --git a/packages/docs/site/docs/main/about/launch.md b/packages/docs/site/docs/main/about/launch.md index e0dcad5be6..15485ed73b 100644 --- a/packages/docs/site/docs/main/about/launch.md +++ b/packages/docs/site/docs/main/about/launch.md @@ -6,8 +6,18 @@ sidebar_class_name: navbar-build-item # Launch -Reach your clients or customers faster. Showcase your product, let users try it live, or launch it in the App Store with zero lead time. +### Embed interactive product demos on websites. -- Embed [interactive product demos](https://developer.wordpress.org/news/2024/04/25/how-to-use-wordpress-playground-for-interactive-demos/) on websites. -- Put a [native app](https://wordpress.org/playground/wordpress-for-native-ios-apps/) running WordPress in the App Store. -- Create new sites [from Blueprints](https://github.com/WordPress/blueprints/tree/trunk) and share them with a few clicks. +Leverage [blueprints'](#) potential to create interactive demos of your plugins or themes. For example, you can provide a link to your users/clients to showcase how your custom plugin integrates with an adapted theme, demonstrating their combined functionality and appearance. + +Read more about this at [How to use WordPress Playground for interactive demos](https://developer.wordpress.org/news/2024/04/25/how-to-use-wordpress-playground-for-interactive-demos/) + +Get inspiration about the type of interactive demos you can create at the [Blueprints Gallery](#) + +### Put a native app running WordPress in the App Store. + +Check the [How to ship a real WordPress site in a native iOS app via Playground?](../guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground) guide for info on this use case + +## Create new sites from Blueprints and share them with a few clicks. + +Read the [Blueprints Docs Hub](../../blueprints/) guide for full info on blueprints and check the [Blueprints Gallery](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md) to get inspiration. diff --git a/packages/docs/site/docs/main/about/test.md b/packages/docs/site/docs/main/about/test.md index 8a7c69daee..5a4e6640b7 100644 --- a/packages/docs/site/docs/main/about/test.md +++ b/packages/docs/site/docs/main/about/test.md @@ -8,6 +8,34 @@ sidebar_class_name: navbar-build-item Upgrade your QA process with the ability to review progress in your browser in a single click. When you’re ready, push updates instantly. -- [Live preview pull requests](https://wptavern.com/preview-wordpress-core-pull-requests-with-playground#:~:text=Previewing%20WordPress%20Pull%20Requests%20requires,testing%20and%20team%20workflows%20difficult.) in GitHub. -- [Clone your site](https://wordpress.org/plugins/playground/) and experiment in a private sandbox. -- [Test with](https://youtu.be/dN_LaenY8bI?si=5dRv5CgUuQAunWIl) different WordPress and PHP versions. +## Test any theme or plugin + +With Playground, you can test any plugin or theme. Use the [Query API](#) to quickly load any plugin or theme published in wordpress.org [plugins](https://wordpress.org/plugins) and [themes](https://wordpress.org/themes/) directories. + +For example, the following link will load the [“pendant” theme](https://wordpress.org/themes/pendant/) and the[ “gutenberg” plugin](https://wordpress.org/plugins/gutenberg/) on a Playground instance: + +[https://playground.wordpress.net/?theme=pendant&plugin=gutenberg](https://playground.wordpress.net/?theme=pendant) + +But you can also test [more elaborate configurations using blueprints](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md), for example testing a plugin’s code from a gist (see [blueprint](https://github.com/wordpress/blueprints/blob/trunk/blueprints/install-plugin-from-gist/blueprint.json) and [live demo](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/wordpress/blueprints/trunk/blueprints/install-plugin-from-gist/blueprint.json)) + +## Live preview pull requests + +Testing pull requests is one of the most exciting use cases for the Playground project. With Playground, you can enable a Live preview link on each Pull Request of a WordPress-related project in GitHub so that developers can see in action the effects of code in that Pull Request. Read more about this at [Preview WordPress Core Pull Requests with Playground](https://wptavern.com/preview-wordpress-core-pull-requests-with-playground#:~:text=Previewing%20WordPress%20Pull%20Requests%20requires,testing%20and%20team%20workflows%20difficult.). + +There are some public implementations of this use case such as [WordPress Core PR previewer](https://playground.wordpress.net/wordpress.html) and [Gutenberg PR previewer](https://playground.wordpress.net/gutenberg.html). Users can input the PR number or URL to be redirected to a WordPress instance, powered by Playground, where the changes from the PR are applied. + +## Clone your site and experiment in a private sandbox. + +With the [Sandbox Site powered by Playground](https://wordpress.org/plugins/playground/) plugin you can create a private WordPress Playground copy of your site to test plugins safely or do any other experiments on your site’s replica without uploading any data to the cloud and without affecting the original site. + +## Test different WordPress and PHP versions. + +With Playground, you can quickly test any major WordPress or PHP version by customizing its settings or using a custom blueprint with the `preferredVersions` property. + +For example, you can always test the latest development version of WordPress, also called [Beta Nightly](https://wordpress.org/download/beta-nightly/), from this link: [https://playground.wordpress.net/?wp=nightly](https://playground.wordpress.net/?wp=nightly) + +During the Beta period of any WordPress release, you can also test the latest WordPress Beta or RC release with theme test data and debugging plugins (see [blueprint](https://github.com/WordPress/blueprints/blob/trunk/blueprints/beta-rc/blueprint.json) and [live demo). ](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/wordpress/blueprints/trunk/blueprints/beta-rc/blueprint.json) + +You can also load any [theme, plugin](#), or [configuration](#) in any of the available WordPress and PHP versions to check how they work in that environment. + +The [WordPress Playground: the ultimate learning, testing, & teaching tool for WordPress](https://www.youtube.com/watch?v=dN_LaenY8bI) provides a great overview of the testing possibilities with Playground. diff --git a/packages/docs/site/docs/main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md b/packages/docs/site/docs/main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md new file mode 100644 index 0000000000..f05bb96d3f --- /dev/null +++ b/packages/docs/site/docs/main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md @@ -0,0 +1,46 @@ +--- +title: Playground in native iOS apps +slug: /wordpress-native-ios-app +description: WordPress Playground in native iOS apps +--- + +## How to ship a real WordPress site in a native iOS app via Playground? + +Blocknotes is the first iOS application that ran WordPress natively on iOS devices by leveraging WordPress Playground. Developed by [Ella van Durpe](https://profiles.wordpress.org/ellatrix/), a core committer for WordPress, Blocknotes represents a significant leap in the capabilities of mobile applications by utilizing WebAssembly to run WordPress without the need for a traditional PHP server. + +This case study explores the features, technical implementation, and potential implications of Blocknotes for the future of mobile and web development. + +**Important!** The current version of Blocknotes isn’t running WordPress Playground anymore. Since the initial release, the app was rewritten to only use the WordPress block editor without the rest of WordPress. This case study covers the early versions of Blocknotes that opened an entire world of new possibilities for WordPress. + +## Blocknotes features + +Blocknotes allows users to create and edit notes using the WordPress block editor. The notes are automatically saved as HTML files to the user’s iCloud Drive and seamlessly synchronized across devices. + +## Technical Implementation + +Blocknotes operated as a WebView running an HTML page where a WebAssembly version of PHP was running WordPress. That HTML page was packaged as a native iOS via [Capacitor](https://capacitorjs.com/). This setup allowed WordPress to function in environments traditionally not supported. + +In [Blocknotes GitHub repository](https://github.com/blocknotes-org/blocknotes/tree/e08535883332be9a45a0c75b750c54a4e17f6748) you can review the last Playground-based release. Here are the most important parts: + +- [A WordPress build](https://github.com/blocknotes-org/blocknotes/blob/e08535883332be9a45a0c75b750c54a4e17f6748/src/js/wp-6.2.data) (packaged as a `.data` file). +- [Static WordPress assets](https://github.com/blocknotes-org/blocknotes/tree/e08535883332be9a45a0c75b750c54a4e17f6748/public). +- [A WebAssembly build of PHP](https://github.com/blocknotes-org/blocknotes/tree/e08535883332be9a45a0c75b750c54a4e17f6748/node_modules/%40php-wasm/web) (via [@php-wasm/web](https://npmjs.com/package/@php-wasm/web)). +- [A web worker running PHP and WordPress](https://github.com/blocknotes-org/blocknotes/blob/e08535883332be9a45a0c75b750c54a4e17f6748/src/js/worker.js). +- [Hypernotes](https://wordpress.com/plugins/hypernotes) WordPress plugin ([installed here](https://github.com/blocknotes-org/blocknotes/blob/e08535883332be9a45a0c75b750c54a4e17f6748/src/js/index.js#L160)) to turn wp-admin into a note-taking app. +- A layer to [load WordPress posts from iOS files](https://github.com/blocknotes-org/blocknotes/blob/e08535883332be9a45a0c75b750c54a4e17f6748/src/js/index.js#L39) and [save changes as iOS files](https://github.com/blocknotes-org/blocknotes/blob/e08535883332be9a45a0c75b750c54a4e17f6748/src/js/save-data.js). + +## Building your own iOS app with WordPress Playground + +Although Blocknotes proved releasing a WordPress-based iOS app is possible, this is still a highly exploratory area. There are no established workflows, libraries, or knowledge bases. + +The best documentation we have is the Blocknotes repository. Use it as a reference and a starting point for exploring your new app. Review the key components like the WebAssembly build of PHP, the integration of the WordPress block editor, and how web workers are utilized to run WordPress efficiently. By dissecting these elements, you can gain insights into building your own iOS app with WordPress Playground, pushing the boundaries of what’s possible with mobile web applications. + +As you navigate this innovative space, share your findings and challenges with the Playground team and the broader WordPress community. Publishing your learnings will not only aid in your development but also contribute to a collective knowledge base, driving forward the future of WordPress on mobile. + +## Potential and the future + +Blocknotes paves the way for a new generation of applications that are more accessible, flexible, and powerful. + +Once the app-building workflows mature, we may see an automated pipelines for packaging Playground sites as iOS apps. It would make it extremely easy to run the same codebase on the server, in the browser, and as a mobile app. + +By working together and sharing our findings, we can push the boundaries of what’s possible with WordPress and mobile app development diff --git a/packages/docs/site/docs/main/guides/index.md b/packages/docs/site/docs/main/guides/index.md index 7445ef4514..1ed6c660b9 100644 --- a/packages/docs/site/docs/main/guides/index.md +++ b/packages/docs/site/docs/main/guides/index.md @@ -9,6 +9,12 @@ sidebar_class_name: navbar-build-item In this section we present a selection of guides that will help you to both work with, and to better understand, a variety of topics related to WordPress Playground. +## [How to ship a real WordPress site in a native iOS app via Playground?](./how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground) + +Check "Blocknotes", the first app to run WordPress natively on iOS via WordPress Playground. It showcases the potential for seamless mobile web integration using WebAssembly and the WordPress block editor. + + diff --git a/packages/docs/site/docusaurus.config.js b/packages/docs/site/docusaurus.config.js index c953820d30..3e48f82dc7 100644 --- a/packages/docs/site/docusaurus.config.js +++ b/packages/docs/site/docusaurus.config.js @@ -133,11 +133,11 @@ const config = { label: 'API Reference', position: 'left', }, - { - href: 'https://playground.wordpress.net/gutenberg.html', - label: 'Gutenberg PR Previewer', - position: 'right', - }, + // { + // href: 'https://playground.wordpress.net/gutenberg.html', + // label: 'Gutenberg PR Previewer', + // position: 'right', + // }, { href: 'https://github.com/WordPress/wordpress-playground', position: 'right', diff --git a/packages/docs/site/sidebars.js b/packages/docs/site/sidebars.js index fc17cc3ae6..95f7a5a491 100644 --- a/packages/docs/site/sidebars.js +++ b/packages/docs/site/sidebars.js @@ -36,18 +36,19 @@ const sidebars = { 'main/about/launch', ], }, - // { - // type: 'category', - // label: 'Guides', - // link: { - // type: 'doc', - // id: 'main/guides/index', - // }, - // items: [ - // 'main/guides/for-theme-developers', - // 'main/guides/for-plugin-developers', - // ], - // }, + { + type: 'category', + label: 'Guides', + link: { + type: 'doc', + id: 'main/guides/index', + }, + items: [ + 'main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground', + // 'main/guides/for-theme-developers', + // 'main/guides/for-plugin-developers', + ], + }, { type: 'category', label: 'Contributing', @@ -93,7 +94,6 @@ const sidebars = { }, 'blueprints/data-format', 'blueprints/using-blueprints', - 'blueprints/resources', { type: 'category', label: 'Steps', @@ -103,6 +103,7 @@ const sidebars = { }, items: [ + 'blueprints/resources', 'blueprints/steps-shorthands', 'blueprints/json-api-and-function-api', ], diff --git a/packages/docs/site/src/css/custom.css b/packages/docs/site/src/css/custom.css index cd83026071..9879325792 100644 --- a/packages/docs/site/src/css/custom.css +++ b/packages/docs/site/src/css/custom.css @@ -122,10 +122,18 @@ iframe { color: white; } +[data-theme='dark'] .navbar__link--active { + color: black; +} + a.navbar__link--active:hover { color: white; } +[data-theme='dark'] a.navbar__link--active:hover { + color: black; +} + .docs-hubs + ul li a { padding: 0.2rem; } @@ -136,6 +144,10 @@ a.navbar__link--active:hover { text-decoration: none; } +[data-theme='dark'] .docs-hubs + ul li a:hover { + color: black; +} + #customize-playground + p > img { max-width: 50%; border: 1px solid #bebebe; From 287c46ba9bb457d0845e3d35a529a17e4011bb62 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Mon, 5 Aug 2024 12:59:57 +0100 Subject: [PATCH 21/32] fixed issues --- packages/docs/site/docs/main/about/launch.md | 11 ++++------- packages/docs/site/docs/main/about/test.md | 3 +-- 2 files changed, 5 insertions(+), 9 deletions(-) diff --git a/packages/docs/site/docs/main/about/launch.md b/packages/docs/site/docs/main/about/launch.md index 15485ed73b..99be74d79d 100644 --- a/packages/docs/site/docs/main/about/launch.md +++ b/packages/docs/site/docs/main/about/launch.md @@ -1,12 +1,13 @@ --- title: Launch slug: /launch -sidebar_class_name: navbar-build-item --- # Launch -### Embed interactive product demos on websites. +Reach your clients or customers faster. Showcase your product, let users try it live, or launch it in the App Store with zero lead time. + +## Embed interactive product demos on websites. Leverage [blueprints'](#) potential to create interactive demos of your plugins or themes. For example, you can provide a link to your users/clients to showcase how your custom plugin integrates with an adapted theme, demonstrating their combined functionality and appearance. @@ -14,10 +15,6 @@ Read more about this at [How to use WordPress Playground for interactive demos]( Get inspiration about the type of interactive demos you can create at the [Blueprints Gallery](#) -### Put a native app running WordPress in the App Store. +## Put a native app running WordPress in the App Store. Check the [How to ship a real WordPress site in a native iOS app via Playground?](../guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground) guide for info on this use case - -## Create new sites from Blueprints and share them with a few clicks. - -Read the [Blueprints Docs Hub](../../blueprints/) guide for full info on blueprints and check the [Blueprints Gallery](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md) to get inspiration. diff --git a/packages/docs/site/docs/main/about/test.md b/packages/docs/site/docs/main/about/test.md index 5a4e6640b7..fd1030eac8 100644 --- a/packages/docs/site/docs/main/about/test.md +++ b/packages/docs/site/docs/main/about/test.md @@ -1,7 +1,6 @@ --- title: Test slug: /test -sidebar_class_name: navbar-build-item --- # Test @@ -30,7 +29,7 @@ With the [Sandbox Site powered by Playground](https://wordpress.org/plugins/play ## Test different WordPress and PHP versions. -With Playground, you can quickly test any major WordPress or PHP version by customizing its settings or using a custom blueprint with the `preferredVersions` property. +With Playground, you can quickly test any major WordPress or PHP version by _customizing its settings_ or using a custom blueprint with the `preferredVersions` property. For example, you can always test the latest development version of WordPress, also called [Beta Nightly](https://wordpress.org/download/beta-nightly/), from this link: [https://playground.wordpress.net/?wp=nightly](https://playground.wordpress.net/?wp=nightly) From 28f175e1f0bfb79b86766cace8712cb1e3e8bb68 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Mon, 5 Aug 2024 17:18:19 +0100 Subject: [PATCH 22/32] Rearranged some folders and fixed links --- .../docs/site/docs/_fragments/_api_list.mdx | 6 +- .../docs/_fragments/_this_is_query_api.md | 2 +- .../docs/site/docs/blueprints/01-index.md | 3 +- .../docs/site/docs/blueprints/04-resources.md | 2 +- .../docs/blueprints/05-steps-shorthands.md | 2 +- .../07-json-api-and-function-api.md | 1 + .../09-troubleshoot-and-debug-blueprints.md | 2 +- packages/docs/site/docs/blueprints/intro.md | 2 +- ...re-blueprints-what-you-can-do-with-them.md | 1 + .../02-how-to-load-run-blueprints.md | 3 +- .../03-build-your-first-blueprint.md | 1 + .../{blueprint-101 => tutorial}/index.md | 6 +- .../developers/03-build-an-app/01-index.md | 6 +- .../05-local-development/01-wp-now.md | 2 +- .../02-vscode-extension.md | 4 ++ .../05-local-development/03-php-wasm-node.md | 1 + .../developers/05-local-development/intro.md | 9 ++- .../01-index.md | 64 ++++++++++++++++--- .../_category_.json | 0 .../javascript-api}/01-index.md | 4 ++ .../02-index-html-vs-remote-html.md | 6 +- .../03-playground-api-client.md | 2 +- .../04-blueprint-json-in-api-client.md | 6 +- .../05-blueprint-functions-in-api-client.md | 4 +- .../javascript-api}/06-mount-data.md | 4 ++ .../javascript-api}/_category_.json | 0 .../query-api}/01-index.md | 2 +- .../06-playground-apis/02-api-concepts.md | 51 --------------- .../developers/23-architecture/01-index.md | 2 +- .../developers/24-limitations/01-index.md | 6 +- .../docs/site/docs/developers/intro-devs.md | 2 +- packages/docs/site/docs/main/about/build.md | 4 +- packages/docs/site/docs/main/about/launch.md | 4 +- packages/docs/site/docs/main/about/test.md | 2 +- .../docs/site/docs/main/contributing/code.md | 2 +- .../main/contributing/coding-standards.md | 2 +- .../docs/main/contributing/contributor-day.md | 2 +- .../docs/main/contributing/documentation.md | 4 ++ .../docs/main/guides/for-plugin-developers.md | 2 +- packages/docs/site/docs/main/guides/index.md | 2 +- ...yground.md => wordpress-native-ios-app.md} | 2 +- packages/docs/site/docs/main/intro.md | 2 +- packages/docs/site/docs/main/web-instance.md | 4 +- packages/docs/site/sidebars.js | 29 ++++----- 44 files changed, 142 insertions(+), 125 deletions(-) rename packages/docs/site/docs/blueprints/{blueprint-101 => tutorial}/01-what-are-blueprints-what-you-can-do-with-them.md (98%) rename packages/docs/site/docs/blueprints/{blueprint-101 => tutorial}/02-how-to-load-run-blueprints.md (94%) rename packages/docs/site/docs/blueprints/{blueprint-101 => tutorial}/03-build-your-first-blueprint.md (99%) rename packages/docs/site/docs/blueprints/{blueprint-101 => tutorial}/index.md (67%) rename packages/docs/site/docs/developers/{06-playground-apis => 06-apis}/01-index.md (53%) rename packages/docs/site/docs/developers/{06-playground-apis => 06-apis}/_category_.json (100%) rename packages/docs/site/docs/developers/{22-javascript-api => 06-apis/javascript-api}/01-index.md (97%) rename packages/docs/site/docs/developers/{22-javascript-api => 06-apis/javascript-api}/02-index-html-vs-remote-html.md (88%) rename packages/docs/site/docs/developers/{22-javascript-api => 06-apis/javascript-api}/03-playground-api-client.md (98%) rename packages/docs/site/docs/developers/{22-javascript-api => 06-apis/javascript-api}/04-blueprint-json-in-api-client.md (78%) rename packages/docs/site/docs/developers/{22-javascript-api => 06-apis/javascript-api}/05-blueprint-functions-in-api-client.md (87%) rename packages/docs/site/docs/developers/{22-javascript-api => 06-apis/javascript-api}/06-mount-data.md (90%) rename packages/docs/site/docs/developers/{22-javascript-api => 06-apis/javascript-api}/_category_.json (100%) rename packages/docs/site/docs/developers/{20-query-api => 06-apis/query-api}/01-index.md (99%) delete mode 100644 packages/docs/site/docs/developers/06-playground-apis/02-api-concepts.md rename packages/docs/site/docs/main/guides/{how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md => wordpress-native-ios-app.md} (99%) diff --git a/packages/docs/site/docs/_fragments/_api_list.mdx b/packages/docs/site/docs/_fragments/_api_list.mdx index ac01cc6ec4..b0ad3afae0 100644 --- a/packages/docs/site/docs/_fragments/_api_list.mdx +++ b/packages/docs/site/docs/_fragments/_api_list.mdx @@ -1,3 +1,3 @@ -- [Query API](../developers/20-query-api/01-index.md) enable basic operations using only query parameters -- [Blueprints API](../blueprints/intro.md) give you a great degree of control with a simple JSON file -- [JavaScript API](../developers/22-javascript-api/01-index.md) give you full control via a JavaScript client from an npm package +- [Query API](/developers/apis/query-api/) enable basic operations using only query parameters +- [Blueprints API](/blueprints/intro.md) give you a great degree of control with a simple JSON file +- [JavaScript API](/developers/apis/javascript-api/) give you full control via a JavaScript client from an npm package diff --git a/packages/docs/site/docs/_fragments/_this_is_query_api.md b/packages/docs/site/docs/_fragments/_this_is_query_api.md index 5a6df89098..37a8bf7d7f 100644 --- a/packages/docs/site/docs/_fragments/_this_is_query_api.md +++ b/packages/docs/site/docs/_fragments/_this_is_query_api.md @@ -1 +1 @@ -This is called [Query API](../developers/20-query-api/01-index.md) and you can learn more about it [here](../developers/20-query-api/01-index.md). +This is called [Query API](../developers/playground-apis/query-api/) and you can learn more about it [here](../developers/playground-apis/query-api/). diff --git a/packages/docs/site/docs/blueprints/01-index.md b/packages/docs/site/docs/blueprints/01-index.md index 09ff376c35..5e0566e88c 100644 --- a/packages/docs/site/docs/blueprints/01-index.md +++ b/packages/docs/site/docs/blueprints/01-index.md @@ -1,5 +1,6 @@ --- title: Getting started +slug: /blueprints/getting-started --- # Getting started with Blueprints @@ -29,7 +30,7 @@ There are three ways to use Blueprints: - [Paste a Blueprint into the URL "fragment" on WordPress Playground website](./02-using-blueprints.md#url-fragment). - [Use them with the JavaScript API](./02-using-blueprints.md#javascript-api). -- [Reference a blueprint JSON file via QueryParam blueprint-url](../developers/20-query-api/01-index.md) +- [Reference a blueprint JSON file via QueryParam blueprint-url](../developers/playground-apis/query-api/) ## What problems are solved by Blueprints? diff --git a/packages/docs/site/docs/blueprints/04-resources.md b/packages/docs/site/docs/blueprints/04-resources.md index 8033b6dee7..2ff76be8d6 100644 --- a/packages/docs/site/docs/blueprints/04-resources.md +++ b/packages/docs/site/docs/blueprints/04-resources.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +slug: /blueprints/steps/resources --- # Resources References diff --git a/packages/docs/site/docs/blueprints/05-steps-shorthands.md b/packages/docs/site/docs/blueprints/05-steps-shorthands.md index 6e3c32a0e8..4b8ec16909 100644 --- a/packages/docs/site/docs/blueprints/05-steps-shorthands.md +++ b/packages/docs/site/docs/blueprints/05-steps-shorthands.md @@ -1,5 +1,5 @@ --- -sidebar_position: 4 +slug: /blueprints/steps/shorthands --- # Shorthands diff --git a/packages/docs/site/docs/blueprints/07-json-api-and-function-api.md b/packages/docs/site/docs/blueprints/07-json-api-and-function-api.md index e296615d60..7c78dba4ff 100644 --- a/packages/docs/site/docs/blueprints/07-json-api-and-function-api.md +++ b/packages/docs/site/docs/blueprints/07-json-api-and-function-api.md @@ -1,5 +1,6 @@ --- title: API Consistency +slug: /blueprints/steps/api-consistency --- # JSON API and Function API diff --git a/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md b/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md index 009b18e01b..5034b2a667 100644 --- a/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md +++ b/packages/docs/site/docs/blueprints/09-troubleshoot-and-debug-blueprints.md @@ -29,7 +29,7 @@ To check the final internal filesytem structure and database (after the blueprin :::tip -There are a bunch of methods we can launch from the console of any WordPress Playground instance to inspect the internals of that instance. They're exposed as part of `window.playground` object (see [Developers > JavaScript API > Debugging and testing](../developers/22-javascript-api/01-index.md#debugging-and-testing)). Some examples: +There are a bunch of methods we can launch from the console of any WordPress Playground instance to inspect the internals of that instance. They're exposed as part of `window.playground` object (see [Developers > JavaScript API > Debugging and testing](../developers/apis/javascript-api/#debugging-and-testing)). Some examples: ``` > await playground.isDir("/wordpress/wp-content/plugins") diff --git a/packages/docs/site/docs/blueprints/intro.md b/packages/docs/site/docs/blueprints/intro.md index 52e89b853e..915a0aeebf 100644 --- a/packages/docs/site/docs/blueprints/intro.md +++ b/packages/docs/site/docs/blueprints/intro.md @@ -29,7 +29,7 @@ This docs hub is focused on Blueprints info and is divided into the following ma - [Getting started with Blueprints](./01-index.md): Quick Start Guide to setting up a WordPress Playground instance using Blueprint JSON files. -- [Tutorial - Blueprints 101](./blueprint-101/index.md) - Blueprints API crash course. The tutorial will guide you through the complete process of creating a blueprint that loads a theme and plugin (among other things). +- [Tutorial - Blueprints 101](./tutorial/index.md) - Blueprints API crash course. The tutorial will guide you through the complete process of creating a blueprint that loads a theme and plugin (among other things). - [Blueprint data Format](./03-data-format.md): Blueprint JSON files define your Playground instance with various properties. This section highlights the key properties you need to know. diff --git a/packages/docs/site/docs/blueprints/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md b/packages/docs/site/docs/blueprints/tutorial/01-what-are-blueprints-what-you-can-do-with-them.md similarity index 98% rename from packages/docs/site/docs/blueprints/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md rename to packages/docs/site/docs/blueprints/tutorial/01-what-are-blueprints-what-you-can-do-with-them.md index f375f70ecb..41429b3543 100644 --- a/packages/docs/site/docs/blueprints/blueprint-101/01-what-are-blueprints-what-you-can-do-with-them.md +++ b/packages/docs/site/docs/blueprints/tutorial/01-what-are-blueprints-what-you-can-do-with-them.md @@ -1,5 +1,6 @@ --- title: What are Blueprints? +slug: /blueprints/tutorial/what-are-blueprints-what-you-can-do-with-them description: Getting started with Blueprints --- diff --git a/packages/docs/site/docs/blueprints/blueprint-101/02-how-to-load-run-blueprints.md b/packages/docs/site/docs/blueprints/tutorial/02-how-to-load-run-blueprints.md similarity index 94% rename from packages/docs/site/docs/blueprints/blueprint-101/02-how-to-load-run-blueprints.md rename to packages/docs/site/docs/blueprints/tutorial/02-how-to-load-run-blueprints.md index db8d8910a0..1cae96c822 100644 --- a/packages/docs/site/docs/blueprints/blueprint-101/02-how-to-load-run-blueprints.md +++ b/packages/docs/site/docs/blueprints/tutorial/02-how-to-load-run-blueprints.md @@ -1,5 +1,6 @@ --- title: How to run Blueprints +slug: /blueprints/tutorial/how-to-load-run-blueprints description: Learn about the multiple ways to use blueprints --- @@ -25,7 +26,7 @@ To run it, go to `https://playground.wordpress.net/#{"preferredVersions": {"php" [   Run Blueprint   ](https://playground.wordpress.net/#{"preferredVersions":{"php":"7.4","wp":"5.9"}}) -Use this method to run the example code in the next chapter, [**Build your first Blueprint**](./03-build-your-first-blueprint.md). +Use this method to run the example code in the next chapter, [**Build your first Blueprint**](./tutorial/build-your-first-blueprint). ### Base64 encoded Blueprints diff --git a/packages/docs/site/docs/blueprints/blueprint-101/03-build-your-first-blueprint.md b/packages/docs/site/docs/blueprints/tutorial/03-build-your-first-blueprint.md similarity index 99% rename from packages/docs/site/docs/blueprints/blueprint-101/03-build-your-first-blueprint.md rename to packages/docs/site/docs/blueprints/tutorial/03-build-your-first-blueprint.md index f21e433e5f..af5b9a6253 100644 --- a/packages/docs/site/docs/blueprints/blueprint-101/03-build-your-first-blueprint.md +++ b/packages/docs/site/docs/blueprints/tutorial/03-build-your-first-blueprint.md @@ -1,5 +1,6 @@ --- title: Build your first Blueprint +slug: /blueprints/tutorial/build-your-first-blueprint description: Six steps to your first blueprint --- diff --git a/packages/docs/site/docs/blueprints/blueprint-101/index.md b/packages/docs/site/docs/blueprints/tutorial/index.md similarity index 67% rename from packages/docs/site/docs/blueprints/blueprint-101/index.md rename to packages/docs/site/docs/blueprints/tutorial/index.md index 5b65f41041..f4f52f62c1 100644 --- a/packages/docs/site/docs/blueprints/blueprint-101/index.md +++ b/packages/docs/site/docs/blueprints/tutorial/index.md @@ -8,9 +8,9 @@ hide_table_of_contents: false Welcome to a Blueprints crash course, where you'll find everything you need to know about Blueprints: what they are, how to create them, and how to use them effectively. -1. [What are Blueprints, and what can you do with them?](./01-what-are-blueprints-what-you-can-do-with-them.md) -2. [How to load and run Blueprints](./02-how-to-load-run-blueprints.md) -3. [Build your first Blueprint](./03-build-your-first-blueprint.md) +1. [What are Blueprints, and what can you do with them?](./tutorial/what-are-blueprints-what-you-can-do-with-them) +2. [How to load and run Blueprints](./tutorial/how-to-load-run-blueprints) +3. [Build your first Blueprint](./tutorial/build-your-first-blueprint) :::tip If you encounter any issues while following this tutorial, refer to the [Troubleshoot and debug Blueprints](../09-troubleshoot-and-debug-blueprints.md) section for tips and tools to help you solve them. diff --git a/packages/docs/site/docs/developers/03-build-an-app/01-index.md b/packages/docs/site/docs/developers/03-build-an-app/01-index.md index 1b98d1d127..6dceac223b 100644 --- a/packages/docs/site/docs/developers/03-build-an-app/01-index.md +++ b/packages/docs/site/docs/developers/03-build-an-app/01-index.md @@ -5,7 +5,7 @@ slug: /developers/build-your-first-app # Quick Start Guide for Developers -WordPress Playground was created as a programmable tool. Below you'll find a few examples of what you can do with it. Each discussed API is described in detail in the [APIs section](../06-playground-apis/01-index.md): +WordPress Playground was created as a programmable tool. Below you'll find a few examples of what you can do with it. Each discussed API is described in detail in the [APIs section](../apis/index): import TOCInline from '@theme/TOCInline'; @@ -19,7 +19,7 @@ Playground can be embedded on your website using the HTML ` ``` -Every visitor will get their own private WordPress instance for free. You can then customize it using one of the [Playground APIs](../06-playground-apis/01-index.md). +Every visitor will get their own private WordPress instance for free. You can then customize it using one of the [Playground APIs](../apis/index). import PlaygroundWpNetWarning from '@site/docs/\_fragments/\_playground_wp_net_may_stop_working.md'; @@ -33,7 +33,7 @@ import APIList from '@site/docs/\_fragments/\_api_list.mdx'; -Learn more about each of these APIs in the [APIs overview section](../06-playground-apis/01-index.md). +Learn more about each of these APIs in the [APIs overview section](../apis/index). ## Showcase a plugin or theme from WordPress directory diff --git a/packages/docs/site/docs/developers/05-local-development/01-wp-now.md b/packages/docs/site/docs/developers/05-local-development/01-wp-now.md index d67333ae3a..230e720639 100644 --- a/packages/docs/site/docs/developers/05-local-development/01-wp-now.md +++ b/packages/docs/site/docs/developers/05-local-development/01-wp-now.md @@ -1,6 +1,6 @@ --- title: wp-now -slug: wp-now +slug: /developers/local-development/wp-now --- # wp-now NPM package diff --git a/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md b/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md index d2ee0f5002..520f46fb50 100644 --- a/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md +++ b/packages/docs/site/docs/developers/05-local-development/02-vscode-extension.md @@ -1,3 +1,7 @@ +--- +slug: /developers/local-development/vscode-extension +--- + # VS Code extension Start a zero-setup development environment using the [VS Code extension](https://marketplace.visualstudio.com/items?itemName=WordPressPlayground.wordpress-playground), and develop your plugin or theme locally without installing Apache or MySQL. diff --git a/packages/docs/site/docs/developers/05-local-development/03-php-wasm-node.md b/packages/docs/site/docs/developers/05-local-development/03-php-wasm-node.md index 220283c56c..cc75499dc2 100644 --- a/packages/docs/site/docs/developers/05-local-development/03-php-wasm-node.md +++ b/packages/docs/site/docs/developers/05-local-development/03-php-wasm-node.md @@ -1,5 +1,6 @@ --- title: php-wasm/node +slug: /developers/local-development/php-wasm-node --- # Using WordPress Playground in Node.js diff --git a/packages/docs/site/docs/developers/05-local-development/intro.md b/packages/docs/site/docs/developers/05-local-development/intro.md index 1be63afd92..6900470629 100644 --- a/packages/docs/site/docs/developers/05-local-development/intro.md +++ b/packages/docs/site/docs/developers/05-local-development/intro.md @@ -1,7 +1,6 @@ --- title: Local Development -slug: developers/local-development -id: intro-local-development +slug: /developers/local-development --- ## Local Development with WordPress Playground @@ -12,10 +11,10 @@ The easiest way to get WordPress site up and running is to open a [public Playgr Playground provides additional tools to check your code on a local WordPress environment. These tools are designed to enhance the development experience by prioritizing ease of installation and usability: -- [`wp-now`](./01-wp-now.md) - CLI tool to spin up a WordPress site with a single command +- [`wp-now`](./wp-now) - CLI tool to spin up a WordPress site with a single command -- [Visual Studio Code Extension](./02-vscode-extension.md) - Integrates WordPress development directly into Visual Studio Code to get a seamless development experience within the popular code editor. +- [Visual Studio Code Extension](./vscode-extension) - Integrates WordPress development directly into Visual Studio Code to get a seamless development experience within the popular code editor. But Playground also provides tools to use WordPress Playground in Node.js: -- [WordPress Playground in Node.js](./03-php-wasm-node.md) - If you need low-level control over the underlying WebAssembly PHP build, take a look at the [`@php-wasm/node` package](https://npmjs.org/@php-wasm/node) which ships the PHP WebAssembly runtime. +- [WordPress Playground in Node.js](./php-wasm-node) - If you need low-level control over the underlying WebAssembly PHP build, take a look at the [`@php-wasm/node` package](https://npmjs.org/@php-wasm/node) which ships the PHP WebAssembly runtime. diff --git a/packages/docs/site/docs/developers/06-playground-apis/01-index.md b/packages/docs/site/docs/developers/06-apis/01-index.md similarity index 53% rename from packages/docs/site/docs/developers/06-playground-apis/01-index.md rename to packages/docs/site/docs/developers/06-apis/01-index.md index fcb5a56c47..05278d4047 100644 --- a/packages/docs/site/docs/developers/06-playground-apis/01-index.md +++ b/packages/docs/site/docs/developers/06-apis/01-index.md @@ -1,11 +1,11 @@ --- title: APIs overview -slug: /apis-overview +slug: /developers/apis/ --- import ThisIsQueryApi from '@site/docs/\_fragments/\_this_is_query_api.md'; -# WordPress Playground APIs overview +## WordPress Playground APIs overview WordPress Playground exposes a few APIs that you can use to interact with the Playground: @@ -13,7 +13,7 @@ import TOCInline from '@theme/TOCInline'; -## Query API +### Query API Basic operations can be done by adjusting the URL, for example here's how you can preinstall a coblocks plugin: @@ -30,10 +30,10 @@ Or a theme: ``` :::info -Check the [Query API](../20-query-api/01-index.md) section for more info. +Check the [Query API](../query-api/) section for more info. ::: -## Blueprints +### Blueprints If you need more control over your Playground, you can use JSON Blueprints. For example, here's how to create a post and install a plugin: @@ -89,11 +89,11 @@ wp_insert_post(array( :::info -Blueprints play a significant role in WordPress Playground, so they have their own dedicated documentation hub. Learn more about JSON Blueprints at the [Blueprints Docs Hub](/wordpress-playground/blueprints). +Blueprints play a significant role in WordPress Playground, so they have their own dedicated documentation hub. Learn more about JSON Blueprints at the [Blueprints Docs Hub](../../blueprints/01-index.md). ::: -## JavaScript API +### JavaScript API The `@wp-playground/client` package provides a JavaScript API you can use to fully control your Playground instance. Here's a very example of what you can do: @@ -102,5 +102,53 @@ import JSApiShortExample from '@site/docs/\_fragments/\_js_api_short_example.mdx :::info -Check the [JavaScript API](../22-javascript-api/01-index.md) section for more info. +Check the [JavaScript API](../javascript-api/) section for more info. ::: + +## Playground APIs Concepts + +WordPress Playground in the browser is all about links and iframes. Regardless of which API you choose, you will use it in one of the following ways: + +### Link to the Playground site + +You can customize WordPress Playground by modifying the https://playground.wordpress.net/ link. You can, for example, create a post, request a specific plugin, or run any PHP code. + +To prepare such a link, use either the [Query API](./query-api/) (easy) or the [JSON Blueprints API](../../blueprints/01-index.md) (medium). + +Once it's ready, simply post it on your site. It makes a great "Try it yourself" button in a tutorial, for example. + +#### Embed in an ` +``` + +To customize that Playground instance, you can: + +- Load it from special link prepared using the [Query API](./query-api/) (easy) or the [JSON Blueprints API](../../blueprints/01-index.md) (medium). +- Control it using the [JavaScript API](./javascript-api/). + +The JavaScript API gives you the most control, but it is also the least convenient option as it requires loading the Playground Client library. + +import PlaygroundWpNetWarning from '@site/docs/\_fragments/\_playground_wp_net_may_stop_working.md'; + + + +### Browser APIs + +The following Playground APIs are available in the browser: + +import APIList from '@site/docs/\_fragments/\_api_list.mdx'; + + + +### In Node.js + +The following Playground APIs are available in Node.js: + +- [JSON Blueprints API](../../blueprints/01-index.md) +- [JavaScript API](./javascript-api/01-index.md) + +These APIs are very similar to their web counterparts, but, unsurprisingly, they are not based or links or iframes. diff --git a/packages/docs/site/docs/developers/06-playground-apis/_category_.json b/packages/docs/site/docs/developers/06-apis/_category_.json similarity index 100% rename from packages/docs/site/docs/developers/06-playground-apis/_category_.json rename to packages/docs/site/docs/developers/06-apis/_category_.json diff --git a/packages/docs/site/docs/developers/22-javascript-api/01-index.md b/packages/docs/site/docs/developers/06-apis/javascript-api/01-index.md similarity index 97% rename from packages/docs/site/docs/developers/22-javascript-api/01-index.md rename to packages/docs/site/docs/developers/06-apis/javascript-api/01-index.md index 1dfadea336..5502571f7f 100644 --- a/packages/docs/site/docs/developers/22-javascript-api/01-index.md +++ b/packages/docs/site/docs/developers/06-apis/javascript-api/01-index.md @@ -1,3 +1,7 @@ +--- +slug: /developers/apis/javascript-api +--- + # JavaScript API WordPress Playground comes with a JavaScript API client that grants you full control over your WordPress. diff --git a/packages/docs/site/docs/developers/22-javascript-api/02-index-html-vs-remote-html.md b/packages/docs/site/docs/developers/06-apis/javascript-api/02-index-html-vs-remote-html.md similarity index 88% rename from packages/docs/site/docs/developers/22-javascript-api/02-index-html-vs-remote-html.md rename to packages/docs/site/docs/developers/06-apis/javascript-api/02-index-html-vs-remote-html.md index dd6d999671..9d8547845f 100644 --- a/packages/docs/site/docs/developers/22-javascript-api/02-index-html-vs-remote-html.md +++ b/packages/docs/site/docs/developers/06-apis/javascript-api/02-index-html-vs-remote-html.md @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +slug: /developers/apis/javascript-api/-html-vs-remote-html --- # `remote.html` vs `index.html` @@ -7,8 +7,8 @@ sidebar_position: 3 [playground.wordpress.net](https://playground.wordpress.net/) exposes two distinct APIs through two separate HTML files: `remote.html` and `index.html`. Here's an overview of their functions and differences: - `index.html` uses WordPress Playground API client to control the "endpoint" that is `remote.html`. -- The [Query API](../20-query-api/01-index.md) is exclusively provided by `index.html`, independent of the WordPress Playground JavaScript API. -- The [JavaScript API](../22-javascript-api/01-index.md) is exclusively provided by `remote.html`. Only that file can be used as an "endpoint" for the `PlaygroundClient` class. +- The [Query API](../query-api/) is exclusively provided by `index.html`, independent of the WordPress Playground JavaScript API. +- The [JavaScript API](../javascript-api/) is exclusively provided by `remote.html`. Only that file can be used as an "endpoint" for the `PlaygroundClient` class. Here's a bit more about each of these files: diff --git a/packages/docs/site/docs/developers/22-javascript-api/03-playground-api-client.md b/packages/docs/site/docs/developers/06-apis/javascript-api/03-playground-api-client.md similarity index 98% rename from packages/docs/site/docs/developers/22-javascript-api/03-playground-api-client.md rename to packages/docs/site/docs/developers/06-apis/javascript-api/03-playground-api-client.md index 160ffd35a8..42f8999917 100644 --- a/packages/docs/site/docs/developers/22-javascript-api/03-playground-api-client.md +++ b/packages/docs/site/docs/developers/06-apis/javascript-api/03-playground-api-client.md @@ -1,5 +1,5 @@ --- -sidebar_position: 2 +slug: /developers/apis/javascript-api/playground-api-client --- # Playground API Client diff --git a/packages/docs/site/docs/developers/22-javascript-api/04-blueprint-json-in-api-client.md b/packages/docs/site/docs/developers/06-apis/javascript-api/04-blueprint-json-in-api-client.md similarity index 78% rename from packages/docs/site/docs/developers/22-javascript-api/04-blueprint-json-in-api-client.md rename to packages/docs/site/docs/developers/06-apis/javascript-api/04-blueprint-json-in-api-client.md index 50c82a5774..da09f86b93 100644 --- a/packages/docs/site/docs/developers/22-javascript-api/04-blueprint-json-in-api-client.md +++ b/packages/docs/site/docs/developers/06-apis/javascript-api/04-blueprint-json-in-api-client.md @@ -1,10 +1,10 @@ --- -sidebar_position: 3 +slug: /developers/apis/javascript-api/blueprint-json-in-api-client --- # Blueprints JSON and the API Client -The Playground API client can be initialized with a [JSON Blueprint](../../blueprints/01-index.md). This is a convenient way of preconfiguring it in any way you like without worrying about progress bars and fetching remote files: +The Playground API client can be initialized with a [JSON Blueprint](../../../blueprints/01-index.md). This is a convenient way of preconfiguring it in any way you like without worrying about progress bars and fetching remote files: ```ts import { startPlaygroundWeb } from 'https://playground.wordpress.net/client/index.js'; @@ -36,6 +36,6 @@ await client.isReady(); Running a JSON Blueprint is only possible during the initialization of the API client. -If this is sufficient for your needs, read more about [JSON Blueprints](../../blueprints/01-index.md). +If this is sufficient for your needs, read more about [JSON Blueprints](../../../blueprints/01-index.md). If you need to work with an already initialized client, you should look into [Blueprint functions](./05-blueprint-functions-in-api-client.md). diff --git a/packages/docs/site/docs/developers/22-javascript-api/05-blueprint-functions-in-api-client.md b/packages/docs/site/docs/developers/06-apis/javascript-api/05-blueprint-functions-in-api-client.md similarity index 87% rename from packages/docs/site/docs/developers/22-javascript-api/05-blueprint-functions-in-api-client.md rename to packages/docs/site/docs/developers/06-apis/javascript-api/05-blueprint-functions-in-api-client.md index 6802ee2218..9ce962ad5d 100644 --- a/packages/docs/site/docs/developers/22-javascript-api/05-blueprint-functions-in-api-client.md +++ b/packages/docs/site/docs/developers/06-apis/javascript-api/05-blueprint-functions-in-api-client.md @@ -1,5 +1,5 @@ --- -sidebar_position: 3 +slug: /developers/apis/javascript-api/blueprint-functions-in-api-client --- # Blueprints Functions and the API Client @@ -30,4 +30,4 @@ await installPlugin(client, { }); ``` -For more information and live examples visit the [Blueprints Steps page](../../blueprints/05-steps.md). +For more information and live examples visit the [Blueprints Steps page](../../../blueprints/05-steps.md). diff --git a/packages/docs/site/docs/developers/22-javascript-api/06-mount-data.md b/packages/docs/site/docs/developers/06-apis/javascript-api/06-mount-data.md similarity index 90% rename from packages/docs/site/docs/developers/22-javascript-api/06-mount-data.md rename to packages/docs/site/docs/developers/06-apis/javascript-api/06-mount-data.md index fd56ad03f2..7e6eb2c67f 100644 --- a/packages/docs/site/docs/developers/22-javascript-api/06-mount-data.md +++ b/packages/docs/site/docs/developers/06-apis/javascript-api/06-mount-data.md @@ -1,3 +1,7 @@ +--- +slug: /developers/apis/javascript-api/mount-data +--- + # Mount data ## Mount a directory from the browser diff --git a/packages/docs/site/docs/developers/22-javascript-api/_category_.json b/packages/docs/site/docs/developers/06-apis/javascript-api/_category_.json similarity index 100% rename from packages/docs/site/docs/developers/22-javascript-api/_category_.json rename to packages/docs/site/docs/developers/06-apis/javascript-api/_category_.json diff --git a/packages/docs/site/docs/developers/20-query-api/01-index.md b/packages/docs/site/docs/developers/06-apis/query-api/01-index.md similarity index 99% rename from packages/docs/site/docs/developers/20-query-api/01-index.md rename to packages/docs/site/docs/developers/06-apis/query-api/01-index.md index 3047d3da1b..34e81fb78f 100644 --- a/packages/docs/site/docs/developers/20-query-api/01-index.md +++ b/packages/docs/site/docs/developers/06-apis/query-api/01-index.md @@ -1,6 +1,6 @@ --- sidebar_position: 5 -slug: /query-api +slug: /developers/apis/query-api --- # Query API diff --git a/packages/docs/site/docs/developers/06-playground-apis/02-api-concepts.md b/packages/docs/site/docs/developers/06-playground-apis/02-api-concepts.md deleted file mode 100644 index 1da9db29ef..0000000000 --- a/packages/docs/site/docs/developers/06-playground-apis/02-api-concepts.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Concepts ---- - -# Playground APIs Concepts - -WordPress Playground in the browser is all about links and iframes. Regardless of which API you choose, you will use it in one of the following ways: - -## Link to the Playground site - -You can customize WordPress Playground by modifying the https://playground.wordpress.net/ link. You can, for example, create a post, request a specific plugin, or run any PHP code. - -To prepare such a link, use either the [Query API](../20-query-api/01-index.md) (easy) or the [JSON Blueprints API](../../blueprints/01-index.md) (medium). - -Once it's ready, simply post it on your site. It makes a great "Try it yourself" button in a tutorial, for example. - -### Embed in an ` -``` - -To customize that Playground instance, you can: - -- Load it from special link prepared using the [Query API](../20-query-api/01-index.md) (easy) or the [JSON Blueprints API](../../blueprints/01-index.md) (medium). -- Control it using the [JavaScript API](../22-javascript-api/01-index.md). - -The JavaScript API gives you the most control, but it is also the least convenient option as it requires loading the Playground Client library. - -import PlaygroundWpNetWarning from '@site/docs/\_fragments/\_playground_wp_net_may_stop_working.md'; - - - -## Browser APIs - -The following Playground APIs are available in the browser: - -import APIList from '@site/docs/\_fragments/\_api_list.mdx'; - - - -## In Node.js - -The following Playground APIs are available in Node.js: - -- [JSON Blueprints API](../../blueprints/01-index.md) -- [JavaScript API](../22-javascript-api/01-index.md) - -These APIs are very similar to their web counterparts, but, unsurprisingly, they are not based or links or iframes. diff --git a/packages/docs/site/docs/developers/23-architecture/01-index.md b/packages/docs/site/docs/developers/23-architecture/01-index.md index f64e70afbc..b260c270ca 100644 --- a/packages/docs/site/docs/developers/23-architecture/01-index.md +++ b/packages/docs/site/docs/developers/23-architecture/01-index.md @@ -6,7 +6,7 @@ WordPress Playground consists of the following high-level components: - [WebAssembly PHP](./02-wasm-php-overview.md) - [Browser bindings](./08-browser-concepts.md) - Node.js bindings via [@php-wasm/node](https://npmjs.com/package/@php-wasm/node) -- [Public API](../06-playground-apis/01-index.md) +- [Public API](../apis/index) Visit each section to learn more about the specific parts of the architecture. diff --git a/packages/docs/site/docs/developers/24-limitations/01-index.md b/packages/docs/site/docs/developers/24-limitations/01-index.md index c7f00ef25f..2b004ee140 100644 --- a/packages/docs/site/docs/developers/24-limitations/01-index.md +++ b/packages/docs/site/docs/developers/24-limitations/01-index.md @@ -1,5 +1,5 @@ --- -slug: /limitations +slug: /developers/limitations --- # Limitations @@ -12,11 +12,11 @@ You can track the status of these issues on the [Playground Project board](https ### Access the Plugins, Themes, Blocks, or Patterns directories -Playground [disables network connections](../../blueprints/03-data-format.md#features) by default, blocking access to wp.org assets (themes, plugins, blocks, or patterns) in `wp-admin`. You can still upload zipped plugin and theme files from your device or enable the option via the [Query API](../20-query-api/01-index.md#available-options) or [Blueprints API](../../blueprints/09-troubleshoot-and-debug-blueprints.md#review-common-gotchas). +Playground [disables network connections](../../blueprints/03-data-format.md#features) by default, blocking access to wp.org assets (themes, plugins, blocks, or patterns) in `wp-admin`. You can still upload zipped plugin and theme files from your device or enable the option via the [Query API](../query-api/#available-options) or [Blueprints API](../../blueprints/09-troubleshoot-and-debug-blueprints.md#review-common-gotchas). ### Temporary by design -As Playground [streams rather than serves](../../main/about/index.md#streamed-not-served) WordPress, all database changes and uploads will be gone when you refresh the page. To avoid losing your work, either [export your work](../../main/quick-start-guide.md#save-your-site) before or enable storage in the browser/device via the [Query API](../20-query-api/01-index.md#available-options) or the UI. +As Playground [streams rather than serves](../../main/about/index.md#streamed-not-served) WordPress, all database changes and uploads will be gone when you refresh the page. To avoid losing your work, either [export your work](../../main/quick-start-guide.md#save-your-site) before or enable storage in the browser/device via the [Query API](../query-api/#available-options) or the UI. ## When developing with Playground diff --git a/packages/docs/site/docs/developers/intro-devs.md b/packages/docs/site/docs/developers/intro-devs.md index d6d470af01..b9e065256c 100644 --- a/packages/docs/site/docs/developers/intro-devs.md +++ b/packages/docs/site/docs/developers/intro-devs.md @@ -23,7 +23,7 @@ This docs hub is focused on Developers info and is divided into the following ma - [Local Development](./05-local-development/intro.md): Discover the tools provided by Playground to streamline the process of setting up and managing WordPress sites and build your apps. -- [Playground APIs](./06-playground-apis/01-index.md): Explore the main APIs exposed by WordPress Playground to interact with the Playground: [Query API](./20-query-api/01-index.md), [Blueprints](../blueprints/), [Javascript API](./22-javascript-api/01-index.md) +- [Playground APIs](./apis): Explore the main APIs exposed by WordPress Playground to interact with the Playground: [Query API](./apis/query-api/), [Blueprints](../blueprints/), [Javascript API](./apis/javascript-api/) - [Architecture](./23-architecture/01-index.md): The specifics of WordPress Playground's architecture, including its various components and tools. diff --git a/packages/docs/site/docs/main/about/build.md b/packages/docs/site/docs/main/about/build.md index d935d8ca1c..f1cf966b53 100644 --- a/packages/docs/site/docs/main/about/build.md +++ b/packages/docs/site/docs/main/about/build.md @@ -1,6 +1,6 @@ --- title: Build -slug: /build +slug: /about/build description: Build with WP Playground sidebar_class_name: navbar-build-item --- @@ -34,4 +34,4 @@ Another interesting app built on top of Playground is **Translate Live** (see [e ## Enbed a WordPress site in non-web environments -The [How to ship a real WordPress site in a native iOS app via Playground?](../guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground) guide shows how we can leverage Playground to wrap a WordPress site into an IOS app. +The [How to ship a real WordPress site in a native iOS app via Playground?](../guides/wordpress-native-ios-app) guide shows how we can leverage Playground to wrap a WordPress site into an IOS app. diff --git a/packages/docs/site/docs/main/about/launch.md b/packages/docs/site/docs/main/about/launch.md index 99be74d79d..17424d74b5 100644 --- a/packages/docs/site/docs/main/about/launch.md +++ b/packages/docs/site/docs/main/about/launch.md @@ -1,6 +1,6 @@ --- title: Launch -slug: /launch +slug: /about/launch --- # Launch @@ -17,4 +17,4 @@ Get inspiration about the type of interactive demos you can create at the [Bluep ## Put a native app running WordPress in the App Store. -Check the [How to ship a real WordPress site in a native iOS app via Playground?](../guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground) guide for info on this use case +Check the [How to ship a real WordPress site in a native iOS app via Playground?](../guides/wordpress-native-ios-app) guide for info on this use case diff --git a/packages/docs/site/docs/main/about/test.md b/packages/docs/site/docs/main/about/test.md index fd1030eac8..4c0201e58f 100644 --- a/packages/docs/site/docs/main/about/test.md +++ b/packages/docs/site/docs/main/about/test.md @@ -1,6 +1,6 @@ --- title: Test -slug: /test +slug: /about/test --- # Test diff --git a/packages/docs/site/docs/main/contributing/code.md b/packages/docs/site/docs/main/contributing/code.md index ad7a5ce4f7..ed7dbddc62 100644 --- a/packages/docs/site/docs/main/contributing/code.md +++ b/packages/docs/site/docs/main/contributing/code.md @@ -1,5 +1,5 @@ --- -sidebar_position: 1 +slug: /contributing/code --- # Code contributions diff --git a/packages/docs/site/docs/main/contributing/coding-standards.md b/packages/docs/site/docs/main/contributing/coding-standards.md index a680fe3aad..96f3bb4fb7 100644 --- a/packages/docs/site/docs/main/contributing/coding-standards.md +++ b/packages/docs/site/docs/main/contributing/coding-standards.md @@ -1,5 +1,5 @@ --- -sidebar_position: 1 +slug: /contributing/coding-standards --- # Coding principles diff --git a/packages/docs/site/docs/main/contributing/contributor-day.md b/packages/docs/site/docs/main/contributing/contributor-day.md index af96f9a27c..9c6c1bb9f4 100644 --- a/packages/docs/site/docs/main/contributing/contributor-day.md +++ b/packages/docs/site/docs/main/contributing/contributor-day.md @@ -1,5 +1,5 @@ --- -slug: /wordcamp-contributor-day +slug: /contributing/contributor-day --- # WordCamp Contributor Day diff --git a/packages/docs/site/docs/main/contributing/documentation.md b/packages/docs/site/docs/main/contributing/documentation.md index 4578f1f99f..60da41db5a 100644 --- a/packages/docs/site/docs/main/contributing/documentation.md +++ b/packages/docs/site/docs/main/contributing/documentation.md @@ -1,3 +1,7 @@ +--- +slug: /contributing/documentation +--- + # Documentation contributions [WordPress Playground's documentation site](../intro.md) is maintained by volunteers like you, who'd love your help. diff --git a/packages/docs/site/docs/main/guides/for-plugin-developers.md b/packages/docs/site/docs/main/guides/for-plugin-developers.md index c7f3219780..f7c4b82668 100644 --- a/packages/docs/site/docs/main/guides/for-plugin-developers.md +++ b/packages/docs/site/docs/main/guides/for-plugin-developers.md @@ -1,5 +1,5 @@ --- title: For Plugin Developers -slug: /for-plugin-developers +slug: /guides/for-plugin-developers description: WordPress Playground for Plugin Developers --- diff --git a/packages/docs/site/docs/main/guides/index.md b/packages/docs/site/docs/main/guides/index.md index 1ed6c660b9..3b11d42d01 100644 --- a/packages/docs/site/docs/main/guides/index.md +++ b/packages/docs/site/docs/main/guides/index.md @@ -9,7 +9,7 @@ sidebar_class_name: navbar-build-item In this section we present a selection of guides that will help you to both work with, and to better understand, a variety of topics related to WordPress Playground. -## [How to ship a real WordPress site in a native iOS app via Playground?](./how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground) +## [How to ship a real WordPress site in a native iOS app via Playground?](./guides/wordpress-native-ios-app) Check "Blocknotes", the first app to run WordPress natively on iOS via WordPress Playground. It showcases the potential for seamless mobile web integration using WebAssembly and the WordPress block editor. diff --git a/packages/docs/site/docs/main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md b/packages/docs/site/docs/main/guides/wordpress-native-ios-app.md similarity index 99% rename from packages/docs/site/docs/main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md rename to packages/docs/site/docs/main/guides/wordpress-native-ios-app.md index f05bb96d3f..727ca49df2 100644 --- a/packages/docs/site/docs/main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground.md +++ b/packages/docs/site/docs/main/guides/wordpress-native-ios-app.md @@ -1,6 +1,6 @@ --- title: Playground in native iOS apps -slug: /wordpress-native-ios-app +slug: /guides/wordpress-native-ios-app description: WordPress Playground in native iOS apps --- diff --git a/packages/docs/site/docs/main/intro.md b/packages/docs/site/docs/main/intro.md index e7229744d2..ae5f97c9da 100644 --- a/packages/docs/site/docs/main/intro.md +++ b/packages/docs/site/docs/main/intro.md @@ -59,7 +59,7 @@ If you're a developer or tech user, you may want to check directly the APIs avai import APIList from '@site/docs/\_fragments/\_api_list.mdx'; -- Read about [Playground APIs](../developers/06-playground-apis/01-index.md) and basic concepts +- Read about [Playground APIs](../developers/apis/index) and basic concepts - Review [links and resources](./resources.md) - Choose the right API for your app - Dive into the [architecture](../developers/23-architecture/01-index.md) and learn how it all works diff --git a/packages/docs/site/docs/main/web-instance.md b/packages/docs/site/docs/main/web-instance.md index fdd308d9f7..30baa0aa02 100644 --- a/packages/docs/site/docs/main/web-instance.md +++ b/packages/docs/site/docs/main/web-instance.md @@ -13,7 +13,7 @@ Some key features: - **Instant Setup**: Run WordPress with a single click. - **Testing Environment**: Ideal for testing plugins and themes. -Via [Query Params](../developers/20-query-api/01-index.md) we can directly load in the Playground instance things such as a specific version of WordPress, a theme, a plugin or a more complex setup via blueprints (check [here](./quick-start-guide.md#try-a-block-a-theme-or-a-plugin) some examples). +Via [Query Params](../developers/playground-apis/query-api/) we can directly load in the Playground instance things such as a specific version of WordPress, a theme, a plugin or a more complex setup via blueprints (check [here](./quick-start-guide.md#try-a-block-a-theme-or-a-plugin) some examples). From the Playground website there are also available some toolbars to customize your playground instance and to provide quick access to some resources and utilities. @@ -23,7 +23,7 @@ From the Playground website there are also available some toolbars to customize ![snapshot of customize playground window at playground instance](./_assets/customize-playground.png) -The options available from the "Customize Playground" window correpond to the following [Query API options](../developers/20-query-api/01-index.md##available-options): +The options available from the "Customize Playground" window correpond to the following [Query API options](../developers/playground-apis/query-api/##available-options): - `storage` - `php` diff --git a/packages/docs/site/sidebars.js b/packages/docs/site/sidebars.js index 95f7a5a491..75eaa76e56 100644 --- a/packages/docs/site/sidebars.js +++ b/packages/docs/site/sidebars.js @@ -44,7 +44,7 @@ const sidebars = { id: 'main/guides/index', }, items: [ - 'main/guides/how-to-ship-a-real-wordpress-site-in-a-native-ios-app-via-playground', + 'main/guides/wordpress-native-ios-app', // 'main/guides/for-theme-developers', // 'main/guides/for-plugin-developers', ], @@ -83,13 +83,13 @@ const sidebars = { label: 'Tutorial', link: { type: 'doc', - id: 'blueprints/blueprint-101/index', + id: 'blueprints/tutorial/index', }, items: [ - 'blueprints/blueprint-101/what-are-blueprints-what-you-can-do-with-them', - 'blueprints/blueprint-101/how-to-load-run-blueprints', - 'blueprints/blueprint-101/build-your-first-blueprint', + 'blueprints/tutorial/what-are-blueprints-what-you-can-do-with-them', + 'blueprints/tutorial/how-to-load-run-blueprints', + 'blueprints/tutorial/build-your-first-blueprint', ], }, 'blueprints/data-format', @@ -129,7 +129,7 @@ const sidebars = { label: 'Local Development', link: { type: 'doc', - id: 'developers/local-development/intro-local-development', + id: 'developers/local-development/intro', }, items: [ 'developers/local-development/wp-now', @@ -142,24 +142,23 @@ const sidebars = { label: 'Playground APIs', link: { type: 'doc', - id: 'developers/playground-apis/index', + id: 'developers/apis/index', }, items: [ - 'developers/playground-apis/api-concepts', - 'developers/query-api/index', + 'developers/apis/query-api/index', { type: 'category', label: 'Javascript API', link: { type: 'doc', - id: 'developers/javascript-api/index', + id: 'developers/apis/javascript-api/index', }, items: [ - 'developers/javascript-api/playground-api-client', - 'developers/javascript-api/index-html-vs-remote-html', - 'developers/javascript-api/blueprint-json-in-api-client', - 'developers/javascript-api/blueprint-functions-in-api-client', - 'developers/javascript-api/mount-data', + 'developers/apis/javascript-api/playground-api-client', + 'developers/apis/javascript-api/index-html-vs-remote-html', + 'developers/apis/javascript-api/blueprint-json-in-api-client', + 'developers/apis/javascript-api/blueprint-functions-in-api-client', + 'developers/apis/javascript-api/mount-data', ], }, ], From f75e563781ae60b910c2d7ae7beacec5fde12545 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Fri, 9 Aug 2024 11:52:24 +0100 Subject: [PATCH 23/32] Reviewed broken links and fix them - also embedded videos --- .../site/docs/_fragments/_this_is_query_api.md | 2 +- packages/docs/site/docs/blueprints/01-index.md | 2 +- packages/docs/site/docs/blueprints/05-steps.md | 4 ++++ .../tutorial/02-how-to-load-run-blueprints.md | 2 +- .../tutorial/03-build-your-first-blueprint.md | 4 ++-- .../docs/site/docs/blueprints/tutorial/index.md | 6 +++--- .../docs/developers/03-build-an-app/01-index.md | 6 +++--- .../docs/developers/05-local-development/intro.md | 6 +++--- .../docs/site/docs/developers/06-apis/01-index.md | 14 +++++++------- .../docs/developers/23-architecture/01-index.md | 2 +- .../docs/developers/24-limitations/01-index.md | 4 ++-- packages/docs/site/docs/developers/intro-devs.md | 2 +- packages/docs/site/docs/main/about/build.md | 9 ++++++--- packages/docs/site/docs/main/about/index.md | 2 +- packages/docs/site/docs/main/about/launch.md | 12 ++++++++++-- packages/docs/site/docs/main/about/test.md | 4 ++-- packages/docs/site/docs/main/intro.md | 8 ++++---- packages/docs/site/docs/main/web-instance.md | 4 ++-- 18 files changed, 54 insertions(+), 39 deletions(-) diff --git a/packages/docs/site/docs/_fragments/_this_is_query_api.md b/packages/docs/site/docs/_fragments/_this_is_query_api.md index 37a8bf7d7f..f20cae561a 100644 --- a/packages/docs/site/docs/_fragments/_this_is_query_api.md +++ b/packages/docs/site/docs/_fragments/_this_is_query_api.md @@ -1 +1 @@ -This is called [Query API](../developers/playground-apis/query-api/) and you can learn more about it [here](../developers/playground-apis/query-api/). +This is called [Query API](/developers/apis/query-api/) and you can learn more about it [here](/developers/apis/query-api/). diff --git a/packages/docs/site/docs/blueprints/01-index.md b/packages/docs/site/docs/blueprints/01-index.md index 5e0566e88c..5ec6157262 100644 --- a/packages/docs/site/docs/blueprints/01-index.md +++ b/packages/docs/site/docs/blueprints/01-index.md @@ -30,7 +30,7 @@ There are three ways to use Blueprints: - [Paste a Blueprint into the URL "fragment" on WordPress Playground website](./02-using-blueprints.md#url-fragment). - [Use them with the JavaScript API](./02-using-blueprints.md#javascript-api). -- [Reference a blueprint JSON file via QueryParam blueprint-url](../developers/playground-apis/query-api/) +- [Reference a blueprint JSON file via QueryParam blueprint-url](../developers/apis/query-api/) ## What problems are solved by Blueprints? diff --git a/packages/docs/site/docs/blueprints/05-steps.md b/packages/docs/site/docs/blueprints/05-steps.md index 3c2e351d91..95977a19ea 100644 --- a/packages/docs/site/docs/blueprints/05-steps.md +++ b/packages/docs/site/docs/blueprints/05-steps.md @@ -28,6 +28,10 @@ The following step-related topics are addressed on dedicated pages included in t - For each step listed below, you'll find both a "Blueprint API" and a "Function API". Refer to the [API Consistency](./07-json-api-and-function-api.md) page for further details. +:::tip +The [WordPress Playground Step Library](https://akirk.github.io/playground-step-library/#) tool provides a visual interface to drag or click the steps to create a blueprint for WordPress Playground. You can also [create your own steps](https://github.com/akirk/playground-step-library/#contributing)! +::: + --- import BlueprintStep from '@site/src/components/BlueprintsAPI/BlueprintStep'; diff --git a/packages/docs/site/docs/blueprints/tutorial/02-how-to-load-run-blueprints.md b/packages/docs/site/docs/blueprints/tutorial/02-how-to-load-run-blueprints.md index 1cae96c822..5db5233b55 100644 --- a/packages/docs/site/docs/blueprints/tutorial/02-how-to-load-run-blueprints.md +++ b/packages/docs/site/docs/blueprints/tutorial/02-how-to-load-run-blueprints.md @@ -26,7 +26,7 @@ To run it, go to `https://playground.wordpress.net/#{"preferredVersions": {"php" [   Run Blueprint   ](https://playground.wordpress.net/#{"preferredVersions":{"php":"7.4","wp":"5.9"}}) -Use this method to run the example code in the next chapter, [**Build your first Blueprint**](./tutorial/build-your-first-blueprint). +Use this method to run the example code in the next chapter, [**Build your first Blueprint**](/blueprints/tutorial/build-your-first-blueprint). ### Base64 encoded Blueprints diff --git a/packages/docs/site/docs/blueprints/tutorial/03-build-your-first-blueprint.md b/packages/docs/site/docs/blueprints/tutorial/03-build-your-first-blueprint.md index af5b9a6253..e4726afa0e 100644 --- a/packages/docs/site/docs/blueprints/tutorial/03-build-your-first-blueprint.md +++ b/packages/docs/site/docs/blueprints/tutorial/03-build-your-first-blueprint.md @@ -117,7 +117,7 @@ The site should now look like the screenshot below: ### Resources -The `themeZipFile` defines a [resource](../resources/) and referrences an external file required to complete the step. Playground supports different types of resources, including +The `themeZipFile` defines a [resource](/blueprints/steps/resources) and referrences an external file required to complete the step. Playground supports different types of resources, including - `url`, - `wordpress.org/themes`, @@ -130,7 +130,7 @@ The example uses the `wordpress.org/themes` resource, which requires a `slug` id In this case, `https://wordpress.org/themes//` becomes `https://wordpress.org/themes/adventurer/`. :::note -Learn more about the supported resources in the [Blueprint Resources API Reference](../resources/). +Learn more about the supported resources in the [Blueprint Resources API Reference](/blueprints/steps/resources/). ::: ## 4. Install the _Hello Dolly_ plugin diff --git a/packages/docs/site/docs/blueprints/tutorial/index.md b/packages/docs/site/docs/blueprints/tutorial/index.md index f4f52f62c1..cb972923c9 100644 --- a/packages/docs/site/docs/blueprints/tutorial/index.md +++ b/packages/docs/site/docs/blueprints/tutorial/index.md @@ -8,9 +8,9 @@ hide_table_of_contents: false Welcome to a Blueprints crash course, where you'll find everything you need to know about Blueprints: what they are, how to create them, and how to use them effectively. -1. [What are Blueprints, and what can you do with them?](./tutorial/what-are-blueprints-what-you-can-do-with-them) -2. [How to load and run Blueprints](./tutorial/how-to-load-run-blueprints) -3. [Build your first Blueprint](./tutorial/build-your-first-blueprint) +1. [What are Blueprints, and what can you do with them?](/blueprints/tutorial/what-are-blueprints-what-you-can-do-with-them) +2. [How to load and run Blueprints](/blueprints/tutorial/how-to-load-run-blueprints) +3. [Build your first Blueprint](/blueprints/tutorial/build-your-first-blueprint) :::tip If you encounter any issues while following this tutorial, refer to the [Troubleshoot and debug Blueprints](../09-troubleshoot-and-debug-blueprints.md) section for tips and tools to help you solve them. diff --git a/packages/docs/site/docs/developers/03-build-an-app/01-index.md b/packages/docs/site/docs/developers/03-build-an-app/01-index.md index 6dceac223b..4ff597c021 100644 --- a/packages/docs/site/docs/developers/03-build-an-app/01-index.md +++ b/packages/docs/site/docs/developers/03-build-an-app/01-index.md @@ -5,7 +5,7 @@ slug: /developers/build-your-first-app # Quick Start Guide for Developers -WordPress Playground was created as a programmable tool. Below you'll find a few examples of what you can do with it. Each discussed API is described in detail in the [APIs section](../apis/index): +WordPress Playground was created as a programmable tool. Below you'll find a few examples of what you can do with it. Each discussed API is described in detail in the [APIs section](/developers/apis/): import TOCInline from '@theme/TOCInline'; @@ -19,7 +19,7 @@ Playground can be embedded on your website using the HTML ` ``` -Every visitor will get their own private WordPress instance for free. You can then customize it using one of the [Playground APIs](../apis/index). +Every visitor will get their own private WordPress instance for free. You can then customize it using one of the [Playground APIs](/developers/apis/). import PlaygroundWpNetWarning from '@site/docs/\_fragments/\_playground_wp_net_may_stop_working.md'; @@ -33,7 +33,7 @@ import APIList from '@site/docs/\_fragments/\_api_list.mdx'; -Learn more about each of these APIs in the [APIs overview section](../apis/index). +Learn more about each of these APIs in the [APIs overview section](/developers/apis/). ## Showcase a plugin or theme from WordPress directory diff --git a/packages/docs/site/docs/developers/05-local-development/intro.md b/packages/docs/site/docs/developers/05-local-development/intro.md index 6900470629..722cad62d7 100644 --- a/packages/docs/site/docs/developers/05-local-development/intro.md +++ b/packages/docs/site/docs/developers/05-local-development/intro.md @@ -11,10 +11,10 @@ The easiest way to get WordPress site up and running is to open a [public Playgr Playground provides additional tools to check your code on a local WordPress environment. These tools are designed to enhance the development experience by prioritizing ease of installation and usability: -- [`wp-now`](./wp-now) - CLI tool to spin up a WordPress site with a single command +- [`wp-now`](/developers/local-development/wp-now) - CLI tool to spin up a WordPress site with a single command -- [Visual Studio Code Extension](./vscode-extension) - Integrates WordPress development directly into Visual Studio Code to get a seamless development experience within the popular code editor. +- [Visual Studio Code Extension](/developers/local-development/vscode-extension) - Integrates WordPress development directly into Visual Studio Code to get a seamless development experience within the popular code editor. But Playground also provides tools to use WordPress Playground in Node.js: -- [WordPress Playground in Node.js](./php-wasm-node) - If you need low-level control over the underlying WebAssembly PHP build, take a look at the [`@php-wasm/node` package](https://npmjs.org/@php-wasm/node) which ships the PHP WebAssembly runtime. +- [WordPress Playground in Node.js](/developers/local-development/php-wasm-node) - If you need low-level control over the underlying WebAssembly PHP build, take a look at the [`@php-wasm/node` package](https://npmjs.org/@php-wasm/node) which ships the PHP WebAssembly runtime. diff --git a/packages/docs/site/docs/developers/06-apis/01-index.md b/packages/docs/site/docs/developers/06-apis/01-index.md index 05278d4047..fb58bf4449 100644 --- a/packages/docs/site/docs/developers/06-apis/01-index.md +++ b/packages/docs/site/docs/developers/06-apis/01-index.md @@ -30,7 +30,7 @@ Or a theme: ``` :::info -Check the [Query API](../query-api/) section for more info. +Check the [Query API](/developers/apis/query-api) section for more info. ::: ### Blueprints @@ -102,7 +102,7 @@ import JSApiShortExample from '@site/docs/\_fragments/\_js_api_short_example.mdx :::info -Check the [JavaScript API](../javascript-api/) section for more info. +Check the [JavaScript API](/developers/apis/javascript-api/) section for more info. ::: ## Playground APIs Concepts @@ -113,7 +113,7 @@ WordPress Playground in the browser is all about links and iframes. Regardless o You can customize WordPress Playground by modifying the https://playground.wordpress.net/ link. You can, for example, create a post, request a specific plugin, or run any PHP code. -To prepare such a link, use either the [Query API](./query-api/) (easy) or the [JSON Blueprints API](../../blueprints/01-index.md) (medium). +To prepare such a link, use either the [Query API](/developers/apis/query-api) (easy) or the [JSON Blueprints API](/blueprints) (medium). Once it's ready, simply post it on your site. It makes a great "Try it yourself" button in a tutorial, for example. @@ -127,8 +127,8 @@ WordPress Playground can be embedded in your app using an ` + +

+Some more examples of this workflow: - [Developer Hours: Creating WordPress Playground Blueprints for Testing and Demos](https://www.youtube.com/watch?v=gKrij8V3nK0&t=2488s) - [Recap Hallway Hangout: Theme Building with Playground, Create-block-theme plugin, and GitHub](https://make.wordpress.org/core/2024/06/25/recap-hallway-hangout-theme-building-with-playground-create-block-theme-plugin-and-github/) @@ -28,7 +31,7 @@ Some examples of this workflow: Playground can be combined with different APIs to create amazing tools. The possibilities are endless. -You can [use WordPress Playground in Node.js](#) to create new tools. The [@php-wasm/node package](https://npmjs.org/@php-wasm/node), which ships the PHP WebAssembly runtime, is the package used for [https://playground.wordpress.net/](https://playground.wordpress.net/), for example. +You can [use WordPress Playground in Node.js](/developers/local-development/php-wasm-node) to create new tools. The [@php-wasm/node package](https://npmjs.org/@php-wasm/node), which ships the PHP WebAssembly runtime, is the package used for [https://playground.wordpress.net/](https://playground.wordpress.net/), for example. Another interesting app built on top of Playground is **Translate Live** (see [example](https://translate.wordpress.org/projects/wp-plugins/friends/dev/de/default/playground/)) which, in combination with Open AI provides a WordPress translations tool “in place” where translations can be seen and modified in their real context (see example). Read more about this tool at [Translate Live: Updates to the Translation Playground](https://make.wordpress.org/polyglots/2023/05/08/translate-live-updates-to-the-translation-playground/) diff --git a/packages/docs/site/docs/main/about/index.md b/packages/docs/site/docs/main/about/index.md index 06b052055d..728dbaba7b 100644 --- a/packages/docs/site/docs/main/about/index.md +++ b/packages/docs/site/docs/main/about/index.md @@ -35,7 +35,7 @@ But hey! You can also connect your Playground instance to a GitHub repo and crea Overall, WordPress Playground provides a risk-free environment for beginners to learn and get hands-on experience with WordPress. It helps you to gain confidence and knowledge before making changes to your live website. :::tip -Check the [guides section](#) to learn more about how to leverage WordPress Playground to test your themes and plugins and create content on the fly. +Check the [guides section](/guides) to learn more about how to leverage WordPress Playground to test your themes and plugins and create content on the fly. ::: ## How does WordPress Playground work? diff --git a/packages/docs/site/docs/main/about/launch.md b/packages/docs/site/docs/main/about/launch.md index 17424d74b5..bd198c772c 100644 --- a/packages/docs/site/docs/main/about/launch.md +++ b/packages/docs/site/docs/main/about/launch.md @@ -9,11 +9,19 @@ Reach your clients or customers faster. Showcase your product, let users try it ## Embed interactive product demos on websites. -Leverage [blueprints'](#) potential to create interactive demos of your plugins or themes. For example, you can provide a link to your users/clients to showcase how your custom plugin integrates with an adapted theme, demonstrating their combined functionality and appearance. +Leverage [blueprints'](/blueprints) potential to create interactive demos of your plugins or themes. For example, you can provide a link to your users/clients to showcase how your custom plugin integrates with an adapted theme, demonstrating their combined functionality and appearance. Read more about this at [How to use WordPress Playground for interactive demos](https://developer.wordpress.org/news/2024/04/25/how-to-use-wordpress-playground-for-interactive-demos/) -Get inspiration about the type of interactive demos you can create at the [Blueprints Gallery](#) +Get inspiration about the type of interactive demos you can create at the [Blueprints Gallery](<[#](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md)>) + +The [Blueprints builder](https://playground.wordpress.net/builder/builder.html) tool allows you edit your blueprint online and run it direclty in a Playground instance. + + + +

+ +Another handy tool to create a blueprint is the [WordPress Playground Step Library](https://akirk.github.io/playground-step-library/#) tool that provides a visual interface to drag or click the steps to create a blueprint for WordPress Playground. You can also [create your own steps](https://github.com/akirk/playground-step-library/#contributing)! ## Put a native app running WordPress in the App Store. diff --git a/packages/docs/site/docs/main/about/test.md b/packages/docs/site/docs/main/about/test.md index 4c0201e58f..3e7c0a47fd 100644 --- a/packages/docs/site/docs/main/about/test.md +++ b/packages/docs/site/docs/main/about/test.md @@ -9,7 +9,7 @@ Upgrade your QA process with the ability to review progress in your browser in a ## Test any theme or plugin -With Playground, you can test any plugin or theme. Use the [Query API](#) to quickly load any plugin or theme published in wordpress.org [plugins](https://wordpress.org/plugins) and [themes](https://wordpress.org/themes/) directories. +With Playground, you can test any plugin or theme. Use the [Query API](/developers/apis/query-api) to quickly load any plugin or theme published in wordpress.org [plugins](https://wordpress.org/plugins) and [themes](https://wordpress.org/themes/) directories. For example, the following link will load the [“pendant” theme](https://wordpress.org/themes/pendant/) and the[ “gutenberg” plugin](https://wordpress.org/plugins/gutenberg/) on a Playground instance: @@ -35,6 +35,6 @@ For example, you can always test the latest development version of WordPress, al During the Beta period of any WordPress release, you can also test the latest WordPress Beta or RC release with theme test data and debugging plugins (see [blueprint](https://github.com/WordPress/blueprints/blob/trunk/blueprints/beta-rc/blueprint.json) and [live demo). ](https://playground.wordpress.net/?blueprint-url=https://raw.githubusercontent.com/wordpress/blueprints/trunk/blueprints/beta-rc/blueprint.json) -You can also load any [theme, plugin](#), or [configuration](#) in any of the available WordPress and PHP versions to check how they work in that environment. +You can also load any [theme, plugin](/developers/apis/query-api), or [configuration](/blueprints) in any of the available WordPress and PHP versions to check how they work in that environment. The [WordPress Playground: the ultimate learning, testing, & teaching tool for WordPress](https://www.youtube.com/watch?v=dN_LaenY8bI) provides a great overview of the testing possibilities with Playground. diff --git a/packages/docs/site/docs/main/intro.md b/packages/docs/site/docs/main/intro.md index ae5f97c9da..0dad020536 100644 --- a/packages/docs/site/docs/main/intro.md +++ b/packages/docs/site/docs/main/intro.md @@ -44,13 +44,13 @@ This docs hub is focused on starting with WordPress Playground and is divided in Whether you're a developer, a non-technical user, or a contributor, these docs will guide you as you start your learning journey: - [Start using WordPress Playground](./quick-start-guide.md) in 5 minutes (and check out the [demo site](https://playground.wordpress.net/)) -- [Build your first app](../developers/03-build-an-app/01-index.md) with WordPress Playground -- Use Playground as a zero-setup [local development environment](../developers/05-local-development/02-vscode-extension.md) +- [Get started for developing](../developers/03-build-an-app/01-index.md) with WordPress Playground +- Use Playground as a zero-setup [local development environment](/developers/local-development/) - Read about the [limitations](../developers/24-limitations/01-index.md) - [WordCamp Contributor Day](./contributing/contributor-day.md) :::tip -Read [**Introduction to Playground: running WordPress in the browser**](https://developer.wordpress.org/news/2024/04/05/introduction-to-playground-running-wordpress-in-the-browser/) for a great introduction to WordPress Playground +Read [**Introduction to Playground: running WordPress in the browser**](https://developer.wordpress.org/news/2024/04/05/introduction-to-playground-running-wordpress-in-the-browser/) blog post in the [WordPress Developer Blog](https://developer.wordpress.org/news) for a great introduction to WordPress Playground ::: ## Take a deep dive @@ -59,7 +59,7 @@ If you're a developer or tech user, you may want to check directly the APIs avai import APIList from '@site/docs/\_fragments/\_api_list.mdx'; -- Read about [Playground APIs](../developers/apis/index) and basic concepts +- Read about [Playground APIs](/developers/apis/) and basic concepts - Review [links and resources](./resources.md) - Choose the right API for your app - Dive into the [architecture](../developers/23-architecture/01-index.md) and learn how it all works diff --git a/packages/docs/site/docs/main/web-instance.md b/packages/docs/site/docs/main/web-instance.md index 30baa0aa02..12caa2e93f 100644 --- a/packages/docs/site/docs/main/web-instance.md +++ b/packages/docs/site/docs/main/web-instance.md @@ -13,7 +13,7 @@ Some key features: - **Instant Setup**: Run WordPress with a single click. - **Testing Environment**: Ideal for testing plugins and themes. -Via [Query Params](../developers/playground-apis/query-api/) we can directly load in the Playground instance things such as a specific version of WordPress, a theme, a plugin or a more complex setup via blueprints (check [here](./quick-start-guide.md#try-a-block-a-theme-or-a-plugin) some examples). +Via [Query Params](/developers/apis/query-api/) we can directly load in the Playground instance things such as a specific version of WordPress, a theme, a plugin or a more complex setup via blueprints (check [here](./quick-start-guide.md#try-a-block-a-theme-or-a-plugin) some examples). From the Playground website there are also available some toolbars to customize your playground instance and to provide quick access to some resources and utilities. @@ -23,7 +23,7 @@ From the Playground website there are also available some toolbars to customize ![snapshot of customize playground window at playground instance](./_assets/customize-playground.png) -The options available from the "Customize Playground" window correpond to the following [Query API options](../developers/playground-apis/query-api/##available-options): +The options available from the "Customize Playground" window correpond to the following [Query API options](/developers/apis/query-api#available-options): - `storage` - `php` From 3f130776246bb8b80cf3e61b9347cbd41cef7031 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Fri, 9 Aug 2024 13:02:38 +0100 Subject: [PATCH 24/32] Clearer intro sentences for docs hubs --- 1 | 6 ++++++ packages/docs/site/docs/blueprints/intro.md | 4 ++-- packages/docs/site/docs/developers/intro-devs.md | 4 ++-- packages/docs/site/docs/main/intro.md | 4 ++-- 4 files changed, 12 insertions(+), 6 deletions(-) create mode 100644 1 diff --git a/1 b/1 new file mode 100644 index 0000000000..7093d0fd2e --- /dev/null +++ b/1 @@ -0,0 +1,6 @@ +Merge branch 'docs/documentation-overhaul' of github.com:wordpress-juanmaguitar/wordpress-playground into docs/documentation-overhaul +# Please enter a commit message to explain why this merge is necessary, +# especially if it merges an updated upstream into a topic branch. +# +# Lines starting with '#' will be ignored, and an empty message aborts +# the commit. diff --git a/packages/docs/site/docs/blueprints/intro.md b/packages/docs/site/docs/blueprints/intro.md index 915a0aeebf..8013669477 100644 --- a/packages/docs/site/docs/blueprints/intro.md +++ b/packages/docs/site/docs/blueprints/intro.md @@ -19,8 +19,8 @@ Blueprints are JSON files for setting up your very own WordPress Playground inst

The WordPress Playground documentation is distributed across four separate hubs (subsites):

- [**Documentation**](/wordpress-playground/) – Introduction to WP Playground, starter guides and your entry point to WP Playground Docs. -- 👉 [**Blueprints**](/wordpress-playground/blueprints) (you're here) – Blueprints are JSON files for setting up your WordPress Playground instance. Learn about their possibilities from this docs hub. -- [**Developers**](/wordpress-playground/developers) – WordPress Playground was created as a programmable tool. Discover all the things you can do with it from your code in this docs hub. +- 👉 [**Blueprints**](/wordpress-playground/blueprints) (you're here) – Blueprints are JSON files for setting up your WordPress Playground instance. Learn about their possibilities from this Blueprints docs hub. +- [**Developers**](/wordpress-playground/developers) – WordPress Playground was created as a programmable tool. Discover all the things you can do with it from your code in the Developers docs hub. - [**API Reference**](/wordpress-playground/api) – All the APIs exposed by WordPress Playground ## Navigating the Blueprints documentation hub diff --git a/packages/docs/site/docs/developers/intro-devs.md b/packages/docs/site/docs/developers/intro-devs.md index 9e997300a8..30ba0c299a 100644 --- a/packages/docs/site/docs/developers/intro-devs.md +++ b/packages/docs/site/docs/developers/intro-devs.md @@ -11,8 +11,8 @@ Hi! Welcome to WordPress Playground Developer documentation.

The WordPress Playground documentation is distributed across four separate hubs (subsites):

- [**Documentation**](/wordpress-playground/) – Introduction to WP Playground, starter guides and your entry point to WP Playground Docs. -- [**Blueprints**](/wordpress-playground/blueprints) – Blueprints are JSON files for setting up your WordPress Playground instance. Learn about their possibilities from this docs hub. -- 👉 [**Developers**](/wordpress-playground/developers) (you're here)– WordPress Playground was created as a programmable tool. Discover all the things you can do with it from your code in this docs hub. +- [**Blueprints**](/wordpress-playground/blueprints) – Blueprints are JSON files for setting up your WordPress Playground instance. Learn about their possibilities from the Blueprints docs hub. +- 👉 [**Developers**](/wordpress-playground/developers) (you're here)– WordPress Playground was created as a programmable tool. Discover all the things you can do with it from your code in this Developers docs hub. - [**API Reference**](/wordpress-playground/api) – All the APIs exposed by WordPress Playground ## Navigating the Developers documentation hub diff --git a/packages/docs/site/docs/main/intro.md b/packages/docs/site/docs/main/intro.md index 0dad020536..83ba6d4217 100644 --- a/packages/docs/site/docs/main/intro.md +++ b/packages/docs/site/docs/main/intro.md @@ -19,8 +19,8 @@ Playground is an online tool to experiment and learn about WordPress. This site

The WordPress Playground documentation is distributed across four separate hubs (subsites):

- 👉 [**Documentation**](/wordpress-playground/) (you're here) – Introduction to WP Playground, starter guides and your entry point to WP Playground Docs. -- [**Blueprints**](/wordpress-playground/blueprints) – Blueprints are JSON files for setting up your WordPress Playground instance. Learn about their possibilities from this docs hub. -- [**Developers**](/wordpress-playground/developers) – WordPress Playground was created as a programmable tool. Discover all the things you can do with it from your code in this docs hub. +- [**Blueprints**](/wordpress-playground/blueprints) – Blueprints are JSON files for setting up your WordPress Playground instance. Learn about their possibilities from the Blueprints docs hub. +- [**Developers**](/wordpress-playground/developers) – WordPress Playground was created as a programmable tool. Discover all the things you can do with it from your code in the Developers docs hub. - [**API Reference**](/wordpress-playground/api) – All the APIs exposed by WordPress Playground ## Navigating this documentation hub From 0eb7f973dacf0d16d6669f41a90d741a4737934e Mon Sep 17 00:00:00 2001 From: JuanMa Date: Fri, 9 Aug 2024 15:21:48 +0100 Subject: [PATCH 25/32] Update packages/docs/site/docs/main/about/launch.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adam Zieliński --- packages/docs/site/docs/main/about/launch.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/site/docs/main/about/launch.md b/packages/docs/site/docs/main/about/launch.md index bd198c772c..2df54fde71 100644 --- a/packages/docs/site/docs/main/about/launch.md +++ b/packages/docs/site/docs/main/about/launch.md @@ -13,7 +13,7 @@ Leverage [blueprints'](/blueprints) potential to create interactive demos of you Read more about this at [How to use WordPress Playground for interactive demos](https://developer.wordpress.org/news/2024/04/25/how-to-use-wordpress-playground-for-interactive-demos/) -Get inspiration about the type of interactive demos you can create at the [Blueprints Gallery](<[#](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md)>) +Get inspiration about the type of interactive demos you can create at the [Blueprints Gallery](https://github.com/WordPress/blueprints/blob/trunk/GALLERY.md) The [Blueprints builder](https://playground.wordpress.net/builder/builder.html) tool allows you edit your blueprint online and run it direclty in a Playground instance. From 171e5218101bacf65e82befc650962428d94f105 Mon Sep 17 00:00:00 2001 From: JuanMa Date: Fri, 9 Aug 2024 15:22:14 +0100 Subject: [PATCH 26/32] Update packages/docs/site/docs/main/about/build.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adam Zieliński --- packages/docs/site/docs/main/about/build.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/site/docs/main/about/build.md b/packages/docs/site/docs/main/about/build.md index 743eeae429..29d10eaa64 100644 --- a/packages/docs/site/docs/main/about/build.md +++ b/packages/docs/site/docs/main/about/build.md @@ -35,6 +35,6 @@ You can [use WordPress Playground in Node.js](/developers/local-development/php- Another interesting app built on top of Playground is **Translate Live** (see [example](https://translate.wordpress.org/projects/wp-plugins/friends/dev/de/default/playground/)) which, in combination with Open AI provides a WordPress translations tool “in place” where translations can be seen and modified in their real context (see example). Read more about this tool at [Translate Live: Updates to the Translation Playground](https://make.wordpress.org/polyglots/2023/05/08/translate-live-updates-to-the-translation-playground/) -## Enbed a WordPress site in non-web environments +## Embed a WordPress site in non-web environments The [How to ship a real WordPress site in a native iOS app via Playground?](../guides/wordpress-native-ios-app) guide shows how we can leverage Playground to wrap a WordPress site into an IOS app. From 9641526cab6e73c061f90f52abdf1c630737fc91 Mon Sep 17 00:00:00 2001 From: JuanMa Date: Fri, 9 Aug 2024 15:22:23 +0100 Subject: [PATCH 27/32] Update packages/docs/site/docs/main/intro.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Adam Zieliński --- packages/docs/site/docs/main/intro.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/docs/site/docs/main/intro.md b/packages/docs/site/docs/main/intro.md index 83ba6d4217..13b1e342d2 100644 --- a/packages/docs/site/docs/main/intro.md +++ b/packages/docs/site/docs/main/intro.md @@ -29,7 +29,7 @@ This docs hub is focused on starting with WordPress Playground and is divided in - **[Quick Start Guide](./quick-start-guide.md)**: For those just starting out with WordPress Playground, this is where you can get up and running with WordPress Playground quickly to [start a new WordPress site](/wordpress-playground/quick-start-guide#start-a-new-wordpress-site) and [try a block/theme/plugin](/wordpress-playground/quick-start-guide#try-a-block-a-theme-or-a-plugin) or [test a specific WordPress/PHP version](/wordpress-playground/quick-start-guide#use-a-specific-wordpress-or-php-version). -- **[Playground web instance](./web-instance)**: Learn morea bout the Playground instance you get at https://playground.wordpress.net/ +- **[Playground web instance](./web-instance)**: Learn more about the Playground instance you get at https://playground.wordpress.net/ - **[About Playground](./about/index.md)**: To learn about WordPress Playground, how safe it is, what you can do with and some of its current limitations, visit this section. From 8dc9bcf8cf318dc86229aa131a278bc4bcde58b0 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Fri, 9 Aug 2024 15:24:39 +0100 Subject: [PATCH 28/32] removed unnecesary file --- 1 | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 1 diff --git a/1 b/1 deleted file mode 100644 index 7093d0fd2e..0000000000 --- a/1 +++ /dev/null @@ -1,6 +0,0 @@ -Merge branch 'docs/documentation-overhaul' of github.com:wordpress-juanmaguitar/wordpress-playground into docs/documentation-overhaul -# Please enter a commit message to explain why this merge is necessary, -# especially if it merges an updated upstream into a topic branch. -# -# Lines starting with '#' will be ignored, and an empty message aborts -# the commit. From ff3d46972949a9b82633b531828cefab78b77244 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Fri, 9 Aug 2024 16:04:16 +0100 Subject: [PATCH 29/32] redirections info on resources page --- packages/docs/site/docs/blueprints/04-resources.md | 5 +++++ packages/docs/site/docs/main/resources.md | 14 ++++++++++++++ packages/docs/site/src/css/custom.css | 4 ++++ 3 files changed, 23 insertions(+) diff --git a/packages/docs/site/docs/blueprints/04-resources.md b/packages/docs/site/docs/blueprints/04-resources.md index 2ff76be8d6..eab04f007c 100644 --- a/packages/docs/site/docs/blueprints/04-resources.md +++ b/packages/docs/site/docs/blueprints/04-resources.md @@ -34,6 +34,11 @@ To use the URLReference resource, you need to provide the URL of the file. For e } ``` +The resource `url` type works really in combination with blueprint steps such as [`installPlugin`](/blueprints/steps#InstallPluginStep) or +[`installTheme`](http://localhost:3000/wordpress-playground/blueprints/steps#InstallThemeStep). These steps require a `ResourceType` to define the location of the plugin or the theme to install. + +With a `"resource": "url"` we can define the location of a `.zip` containing the plugin/theme via a URL that can point direclty to a GitHub repo. To avoid CORS issues, the Playground project provides a [GitHub proxy](https://playground.wordpress.net/proxy) that also allows you to generate a `.zip` from a repository (or even a folder inside a repo) containing your plugin or theme. + ### CoreThemeReference The CoreThemeReference resource is used to reference WordPress core themes. The CoreThemeReference resource is defined as follows: diff --git a/packages/docs/site/docs/main/resources.md b/packages/docs/site/docs/main/resources.md index a56f061b05..19aedcafbd 100644 --- a/packages/docs/site/docs/main/resources.md +++ b/packages/docs/site/docs/main/resources.md @@ -5,6 +5,20 @@ slug: /resources # Links and Resources +:::tip + +There's a set of redirections in place to make it easier the access to some of the tools related to Playground: + + +::: + ## Frequently sought links - [Demo](https://playground.wordpress.net/) diff --git a/packages/docs/site/src/css/custom.css b/packages/docs/site/src/css/custom.css index 9879325792..7ec2e29273 100644 --- a/packages/docs/site/src/css/custom.css +++ b/packages/docs/site/src/css/custom.css @@ -157,3 +157,7 @@ a.navbar__link--active:hover { max-width: 30%; border: 1px solid #bebebe; } + +#list-resources-redirections a { + font-weight: normal; +} From 2c9b218cfbe319e19da0fa844ed2b57ce9eac15d Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Fri, 9 Aug 2024 16:19:37 +0100 Subject: [PATCH 30/32] connect playground instance to local directory --- .../docs/main/_assets/storage-type-device.png | Bin 0 -> 165615 bytes packages/docs/site/docs/main/about/build.md | 24 +++++++++++++++++- packages/docs/site/src/css/custom.css | 5 +++- 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 packages/docs/site/docs/main/_assets/storage-type-device.png diff --git a/packages/docs/site/docs/main/_assets/storage-type-device.png b/packages/docs/site/docs/main/_assets/storage-type-device.png new file mode 100644 index 0000000000000000000000000000000000000000..4092b7347bce4465771c468d85c6a27ab90bc914 GIT binary patch literal 165615 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

k8XAc*ylyv{ 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 literal 0 HcmV?d00001 diff --git a/packages/docs/site/docs/main/about/build.md b/packages/docs/site/docs/main/about/build.md index 29d10eaa64..4e4864aef2 100644 --- a/packages/docs/site/docs/main/about/build.md +++ b/packages/docs/site/docs/main/about/build.md @@ -13,7 +13,7 @@ WordPress Playground can help you to create and learn WordPress quickly, even on You can seamlessly integrate Playground into your development workflow to launch a local WordPress environment quickly for testing your code. You can do this directly [from the terminal](/developers/local-development/wp-now) or [your preferred IDE.](/developers/local-development/vscode-extension) -## Save changes done on a Block Theme and create a PR for a GitHub repository +## Save changes done on a Block Theme and create Github Pull Requests You can connect your Playground instance to a GitHub repository and create a Pull Request with the changes you’ve done through the WordPress UI, leveraging the [Create Block Theme](https://wordpress.org/plugins/create-block-theme/) plugin. @@ -27,6 +27,28 @@ Some more examples of this workflow: - [Developer Hours: Creating WordPress Playground Blueprints for Testing and Demos](https://www.youtube.com/watch?v=gKrij8V3nK0&t=2488s) - [Recap Hallway Hangout: Theme Building with Playground, Create-block-theme plugin, and GitHub](https://make.wordpress.org/core/2024/06/25/recap-hallway-hangout-theme-building-with-playground-create-block-theme-plugin-and-github/) +## Synchronize your playground instance with a local folder and create Github Pull Requests + +![Storage Type Device Snaphsot](../_assets/storage-type-device.png) + +With Google Chrome (it only works with this browser, for now) you can synchronize your Playground instance with a local directory, that can be either: + +- And empty directory – to save this Playground and start syncing +- An existing directory – to load it here and start syncing + +Regarding changes done on both sides of the connection: + +- Files changed in Playground will be synchronized to on your computer. +- Files changed on your computer will not be synchronized to Playground. You'll need to click the "Sync local files" button. + +With this workflow you can create directly GitHub PRs from your changes done on your local directory. + +See here a little demo of this workflow in action: + + + +

+ ## Integrate with other APIs to create new tools. Playground can be combined with different APIs to create amazing tools. The possibilities are endless. diff --git a/packages/docs/site/src/css/custom.css b/packages/docs/site/src/css/custom.css index 7ec2e29273..4328788afa 100644 --- a/packages/docs/site/src/css/custom.css +++ b/packages/docs/site/src/css/custom.css @@ -148,7 +148,10 @@ a.navbar__link--active:hover { color: black; } -#customize-playground + p > img { +#customize-playground + p > img, +#synchronize-your-playground-instance-with-a-local-folder-and-create-github-pull-requests + + p + > img { max-width: 50%; border: 1px solid #bebebe; } From d45c541e21aabb8237ee196970c1174c99b18ec5 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Sun, 11 Aug 2024 16:20:43 +0100 Subject: [PATCH 31/32] offline mode and PWA support --- packages/docs/site/docs/main/about/build.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/docs/site/docs/main/about/build.md b/packages/docs/site/docs/main/about/build.md index 4e4864aef2..36d3e80ff0 100644 --- a/packages/docs/site/docs/main/about/build.md +++ b/packages/docs/site/docs/main/about/build.md @@ -57,6 +57,14 @@ You can [use WordPress Playground in Node.js](/developers/local-development/php- Another interesting app built on top of Playground is **Translate Live** (see [example](https://translate.wordpress.org/projects/wp-plugins/friends/dev/de/default/playground/)) which, in combination with Open AI provides a WordPress translations tool “in place” where translations can be seen and modified in their real context (see example). Read more about this tool at [Translate Live: Updates to the Translation Playground](https://make.wordpress.org/polyglots/2023/05/08/translate-live-updates-to-the-translation-playground/) +## Work offline and as a native app + +When you first visit [playground.wordpress.net](https://playground.wordpress.net/), your browser automatically caches all the necessary files to use Playground. From that point on, you can access [playground.wordpress.net](https://playground.wordpress.net/), even without internet connection, ensuring you can continue working on your projects without interruptions. + +You can also install Playground on your device as a Progressive Web App (PWA) to launch the Playground directly from your home screen—just like a native app. + +Read [Introducing Offline Mode and PWA Support for WordPress Playground](https://make.wordpress.org/playground/2024/08/05/offline-mode-and-pwa-support/) for more info. + ## Embed a WordPress site in non-web environments The [How to ship a real WordPress site in a native iOS app via Playground?](../guides/wordpress-native-ios-app) guide shows how we can leverage Playground to wrap a WordPress site into an IOS app. From 1d10f101704fa608d92a4a3f5d44fde112feeb41 Mon Sep 17 00:00:00 2001 From: JuanMa Garrido Date: Mon, 19 Aug 2024 09:32:09 +0100 Subject: [PATCH 32/32] Highlight Build, Test and Launch in the intro --- packages/docs/site/docs/main/intro.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/docs/site/docs/main/intro.md b/packages/docs/site/docs/main/intro.md index 13b1e342d2..04c8a35590 100644 --- a/packages/docs/site/docs/main/intro.md +++ b/packages/docs/site/docs/main/intro.md @@ -33,6 +33,8 @@ This docs hub is focused on starting with WordPress Playground and is divided in - **[About Playground](./about/index.md)**: To learn about WordPress Playground, how safe it is, what you can do with and some of its current limitations, visit this section. + Discover how you can leverage WordPress Playground to [Build](./about/build), [Test](./about/test), and [Launch](./about/test) your products. + - **[Guides](./guides/)**: Explore our comprehensive guides to master new skills, find step-by-step instructions, and unlock valuable insights. Dive in to learn and grow! - **[Contributing](./contributing/)**: WordPress Playground is an open-source project that welcomes all contributors—from code to design, documentation to triage. Learn here how to contribute.