diff --git a/.gitignore b/.gitignore index 4ff80e01..5ce5797e 100644 --- a/.gitignore +++ b/.gitignore @@ -14,6 +14,7 @@ test-results/ .wp-env .wp-env.override.json uploads/ +debug.log # Environment .env diff --git a/examples/README.md b/examples/README.md index 938dd1c5..61ace089 100644 --- a/examples/README.md +++ b/examples/README.md @@ -4,3 +4,4 @@ This directory contains examples demonstrating how to use various features of th - **next-pages-apollo-authentication**: An example project showcasing authentication with Next.js, Apollo Client, and Headless WordPress. - **next/client-app-router-fetch-data**: An example WordPress application using Next.js App Router and the fetch API to fetch data from WordPress using WPGraphQL +- **next/client-multisite-app-router-fetch-data**: An example WordPress multisite application using Next.js App Router and the fetch API to fetch data from WordPress using WPGraphQL diff --git a/examples/next/client-multisite-app-router-fetch-data/.wp-env.json b/examples/next/client-multisite-app-router-fetch-data/.wp-env.json new file mode 100644 index 00000000..c877d9e5 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/.wp-env.json @@ -0,0 +1,28 @@ +{ + "phpVersion": "7.4", + "port": 8888, + "plugins": [ + "https://github.com/wp-graphql/wp-graphql/releases/latest/download/wp-graphql.zip", + "https://github.com/wp-graphql/wpgraphql-ide/releases/latest/download/wpgraphql-ide.zip", + "https://github.com/AdvancedCustomFields/acf/releases/download/6.3.12/advanced-custom-fields-6.3.12.zip", + "https://github.com/wp-graphql/wpgraphql-acf/releases/latest/download/wpgraphql-acf.zip", + "https://github.com/wpengine/wp-graphql-content-blocks/releases/latest/download/wp-graphql-content-blocks.zip" + ], + "config": { + "WP_DEBUG": true, + "SCRIPT_DEBUG": false, + "GRAPHQL_DEBUG": true, + "WP_DEBUG_LOG": true, + "WP_DEBUG_DISPLAY": false, + "SAVEQUERIES": false + }, + "mappings": { + "db": "./wp-env/db", + "wp-content/debug.log": "./wp-env/log/", + "wp-content/uploads": "./wp-env/uploads", + ".htaccess": "./wp-env/setup/.htaccess" + }, + "lifecycleScripts": { + "afterStart": "wp-env run cli -- wp plugin update wpgraphql-acf && wp-env run cli -- wp rewrite structure '/%postname%/' && wp-env run cli -- wp rewrite flush" + } +} \ No newline at end of file diff --git a/examples/next/client-multisite-app-router-fetch-data/README.md b/examples/next/client-multisite-app-router-fetch-data/README.md new file mode 100644 index 00000000..7bfe831e --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/README.md @@ -0,0 +1,218 @@ +# Example: Multisite Next.js App Router using the Fetch API + +# Table of Contents +- [Overview](#overview) + - [Prerequisites](#prerequisites) + - [Project Structure](#project-structure) + - [Features](#features) + - [Screenshots](#screenshots) +- [Running the Example with wp-env](#running-the-example-with-wp-env) + - [Prerequisites](#prerequisites-1) + - [Setup Repository and Packages](#setup-repository-and-packages) + - [Build and Start the Application](#build-and-start-the-application) + - [Command Reference](#command-reference) + - [Database Access](#database-access) + - [Adding More Sites to the Multisite Examples](#adding-more-sites-to-the-multisite-examples) + + +# Overview + +An example mulitsite headless WordPress application using Next.js App Router and the fetch API to fetch data from WordPress using WPGraphQL. It showcases different data fetching strategies, state management techniques, and modern web development patterns in a real-world application context. This also contains a full example using wp-env and sample data. + +## Prerequisites + +- Node.js (v18+ recommended) +- [pnpm](https://pnpm.io/) +- [Docker](https://www.docker.com/) (if you plan on running the example see details below) + + +## Project Structure + +``` +/ +├── example-app/ # Next.js App Headless Example Application +│ ├── app/ # Application-specific pages and routes +│ ├── components/ # Reusable UI components +│ ├── lib/ # Utility functions and libraries and WP GraphQL Fragments +| +├── wp-env/ # WordPress local environment setup +│ ├── wp-env.json +│ ├── db/ # Example database export to be imported for the example setup +│ ├── setup/ # .htaccess file to fix a CORS issue +| |── log/ # Log file for wp-content/debug.log +| |-- screenshots/ # Example screenshots for this README +│ ├── uploads.zip # Zipped wp-content/uploads directory for the example application +│ ├── uploads/ # Unzipped wp-content/uploads directory when the example application is run. +├── package.json # Scripts for running the example application +``` + +## Features + +- **Covers various rendering patterns of Next.js** + + - Server-Side Rendering (SSR) for dynamic pages + - Static Site Generation (SSG) for static pages + - Client-Side data fetching (CSR) for blog settings + - Hybrid data fetching, combining SSR and CSR + +- **Multisite Features** + + - Dynamic site management in next.config.mjs + - Fetch data based off site key defined in next.config.mjs + - Homepage dynamically fetches and displays data from multiple WordPress sites in the multisite network. + + - **Catch-All Template** + + - The catch-all template fetches data from all WordPress sites in the multisite network. + - It loops through each site until it finds the relevant data to display. + - Can be extended on a per site basis for querying different fragments + +- **Blog features** + + - Listing posts with pagination + - Fetching posts and pages using nodeByUri of WPGraphQL + - Fetching static pages at build time + - Commenting posts + - Header with dynamic blog title + - Featured image + - Includes category and tag blog post listings + +- **Other Template Features** + - Page template + - CPT template with listings for a CPT events (can be adapted for other CPT) + - Single CPT page with ACF custom meta fields + +## Screenshots + +![Home](wp-env/screenshots/Home.png) +![Blog Listing](wp-env/screenshots/Blog_listing.png) +![Blog Listing Pagination](wp-env/screenshots/Blog_listing_pagination.png) +![Single Blog Page](wp-env/screenshots/Single_blog.png) +![Comments](wp-env/screenshots/Comments.png) +![Comment Form](wp-env/screenshots/Comment_form.png) +![Catch All](wp-env/screenshots/Catch_all.png) +![Catch All second site](wp-env/screenshots/Catch_all_second_site.png) +![CPT Second site](wp-env/screenshots/cpt.png) + +# Running the example with wp-env + +## Prerequisites + +**Note** Please make sure you have all prerequisites installed as mentioned above and Docker running (`docker ps`) + +## Setup Repository and Packages + +- Clone the repo `git clone https://github.com/wpengine/hwptoolkit.git` +- Install packages `cd hwptoolkit && pnpm install` +- Setup a .env file under `examples/next/client-multisite-app-router-fetch-data/example-app` with + +``` +NEXT_PUBLIC_WORDPRESS_URL=http://localhost:8888 +NEXT_PUBLIC_MOVIE_WORDPRESS_URL=http://localhost:8888/movies +``` + +e.g. + +```bash +echo "NEXT_PUBLIC_WORDPRESS_URL=http://localhost:8888" > examples/next/client-multisite-app-router-fetch-data/example-app/.env +echo "NEXT_PUBLIC_MOVIE_WORDPRESS_URL=http://localhost:8888/movies" >> examples/next/client-multisite-app-router-fetch-data/example-app/.env +``` + +> [!IMPORTANT] +> The site configuration is based off values set in [example-app/next.config.mjs](example-app/next.config.mjs) +> If you want to add more sites please feel free to add more sites to your .env file and update the configuration in the next.config.mjs + + +## Build and start the application + +- `cd examples/next/client-multisite-app-router-fetch-data` +- Then run `pnpm example:build` will build and start your application.) +- This does the following: + - Unzips `wp-env/uploads.zip` to `wp-env/uploads` which is mapped to the wp-content/uploads directory for the Docker container. + - Starts up [wp-env](https://developer.wordpress.org/block-editor/getting-started/devenv/get-started-with-wp-env/) + - Imports the database from [wp-env/db/database.sql](wp-env/db/database.sql) + - Sets the mulitisite wp-config.php variables + - Install Next.js dependencies for `example-app` + - Runs the Next.js dev script + +Congratulations, WordPress should now be fully set up. + +| Frontend | Admin | +|----------|------------------------------| +| [http://localhost:3000/](http://localhost:3000/) | [http://localhost:8888/wp-admin/](http://localhost:8888/wp-admin/) | + +The login details for the admin is username "admin" and password "password" + + +> [!IMPORTANT] +There are issues with setting variables for multisite in .wp-env.json before converting the site to multisite. For this reason we set the variables after the sample database (which is multisite) is imported. +**You also need to update the port in wp:multisite:set:variables if you ever change 8888** + +## Command Reference + +| Command | Description | +|-----------------------------|-----------------------------------------------------------------------------| +| `example:build` | Prepares the environment by unzipping images, starting WordPress, importing the database, and starting the application. | +| `example:dev` | Runs the Next.js development server. | +| `example:dev:install` | Installs the required Next.js packages. | +| `example:start` | Starts WordPress, sets the multisite variables, and starts the Next.js development server. | +| `example:stop` | Stops the WordPress environment. | +| `example:prune` | Rebuilds and restarts the application by destroying and recreating the WordPress environment. | +| `wp:start` | Starts the WordPress environment. | +| `wp:stop` | Stops the WordPress environment. | +| `wp:multisite:set:variables`| Sets the variables for multisite in `wp-config.php`. | +| `wp:destroy` | Completely removes the WordPress environment. | +| `wp:db:query` | Executes a database query within the WordPress environment. | +| `wp:db:export` | Exports the WordPress database to `wp-env/db/database.sql`. | +| `wp:db:import` | Imports the WordPress database from `wp-env/db/database.sql`. | +| `wp:images:unzip` | Extracts the WordPress uploads directory. | +| `wp:images:zip` | Compresses the WordPress uploads directory. | + + +>**Note** You can run `pnpm wp-env` and use any other wp-env command. You can also see for more details on how to use or configure `wp-env`. + +### Database access + +If you need database access add the following to your wp-env `"phpmyadminPort": 11111,` (where port 11111 is not allocated). + +You can check if a port is free by running `lsof -i :11111` + +### Adding more sites to the multisite examples + +If you want to add more sites you need to do the followint + +1. Add the variable to your .env next.js setup e.g. `NEXT_PUBLIC_SPORT_WORDPRESS_URL=http://localhost:8888/sport` +2. Update your next.config.mjs with a site key and this value e.g. +```js + WORDPRESS_SITES: JSON.stringify({ + main: process.env.NEXT_PUBLIC_WORDPRESS_URL + "/graphql", + movie_site: process.env.NEXT_PUBLIC_MOVIE_WORDPRESS_URL + "/graphql", + sport_site: process.env.NEXT_PUBLIC_SPORT_WORDPRESS_URL + "/graphql", + }), +``` + +You then use the site key e.g. `sport_site` when fetching data with a template or the `fetchGraphQL` function + +e.g. + +``` +# example-app/src/app/sport-news/page.js +import { SportsListingsQuery } from "@/lib/queries/SportsListingsQuery"; +import { CustomPostTypeTemplate } from "@/components/cpt/CustomPostTypeTemplate"; + +export default async function SportsListingsPage(params) { + return CustomPostTypeTemplate(SportsListingsQuery, { + params: params, + customPostType: "sport", # Update CPT + siteKey: "sport_site", # This is your site key + title: "Sport News", + cacheExpiry: 3600, + }); +} + +``` + +**Note** + +1. You need to add the query +2. You also need to update the Custom Post Type Template to include your listings template diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/.gitignore b/examples/next/client-multisite-app-router-fetch-data/example-app/.gitignore new file mode 100644 index 00000000..5ef6a520 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/.gitignore @@ -0,0 +1,41 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.* +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/versions + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* +.pnpm-debug.log* + +# env files (can opt-in for committing if needed) +.env* + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/eslint.config.mjs b/examples/next/client-multisite-app-router-fetch-data/example-app/eslint.config.mjs new file mode 100644 index 00000000..348c45a2 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/eslint.config.mjs @@ -0,0 +1,14 @@ +import { dirname } from "path"; +import { fileURLToPath } from "url"; +import { FlatCompat } from "@eslint/eslintrc"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}); + +const eslintConfig = [...compat.extends("next/core-web-vitals")]; + +export default eslintConfig; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/jsconfig.json b/examples/next/client-multisite-app-router-fetch-data/example-app/jsconfig.json new file mode 100644 index 00000000..b8d6842d --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/jsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/next.config.mjs b/examples/next/client-multisite-app-router-fetch-data/example-app/next.config.mjs new file mode 100644 index 00000000..52f8adda --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/next.config.mjs @@ -0,0 +1,25 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, + images: { + // Allow images from localhost. + // Please change this to your domain if you are using a different domain. + domains: ["localhost"], + }, + env: { + // A list of sites to be used in the app. See src/lib/client.js for more info. + WORDPRESS_SITES: JSON.stringify({ + main: process.env.NEXT_PUBLIC_WORDPRESS_URL + "/graphql", + movie_site: process.env.NEXT_PUBLIC_MOVIE_WORDPRESS_URL + "/graphql", + }), + }, + // Note: env variables are set in next.config.js only accept string values so used publicRuntimeConfig instead + publicRuntimeConfig: { + // Controls posts per page for blog, category and tag pages + wordPressDisplaySettings: { + postsPerPage: 5, + }, + }, +}; + +export default nextConfig; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/package-lock.json b/examples/next/client-multisite-app-router-fetch-data/example-app/package-lock.json new file mode 100644 index 00000000..b819a5cd --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/package-lock.json @@ -0,0 +1,5726 @@ +{ + "name": "example-app", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "example-app", + "version": "0.1.0", + "dependencies": { + "next": "15.2.4", + "prettier": "^3.5.3", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "eslint": "^9", + "eslint-config-next": "15.2.4", + "tailwindcss": "^4" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@emnapi/core": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.3.1.tgz", + "integrity": "sha512-pVGjBIt1Y6gg3EJN8jTcfpP/+uuRksIo055oE/OBkDNcjZqVbfkWCksG1Jp4yZnj3iKWyWX8fdG/j6UDYPbFog==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.5.1.tgz", + "integrity": "sha512-soEIOALTfTK6EjmKMMoLugwaP0rzkad90iIWd1hMO9ARkSAyjfMfkRRhLvD5qH7vvM0Cg72pieUfR6yh6XxC4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/config-array": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/object-schema": "^2.1.6", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.12.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/retry": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" + } + }, + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" + } + }, + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" + } + }, + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" + } + }, + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, + "dependencies": { + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + } + }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz", + "integrity": "sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.3.1", + "@emnapi/runtime": "^1.3.1", + "@tybys/wasm-util": "^0.9.0" + } + }, + "node_modules/@next/env": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.4.tgz", + "integrity": "sha512-+SFtMgoiYP3WoSswuNmxJOCwi06TdWE733D+WPjpXIe4LXGULwEaofiiAy6kbS0+XjM5xF5n3lKuBwN2SnqD9g==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-15.2.4.tgz", + "integrity": "sha512-O8ScvKtnxkp8kL9TpJTTKnMqlkZnS+QxwoQnJwPGBxjBbzd6OVVPEJ5/pMNrktSyXQD/chEfzfFzYLM6JANOOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "3.3.1" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-15.2.4.tgz", + "integrity": "sha512-1AnMfs655ipJEDC/FHkSr0r3lXBgpqKo4K1kiwfUf3iE68rDFXZ1TtHdMvf7D0hMItgDZ7Vuq3JgNMbt/+3bYw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-15.2.4.tgz", + "integrity": "sha512-3qK2zb5EwCwxnO2HeO+TRqCubeI/NgCe+kL5dTJlPldV/uwCnUgC7VbEzgmxbfrkbjehL4H9BPztWOEtsoMwew==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-15.2.4.tgz", + "integrity": "sha512-HFN6GKUcrTWvem8AZN7tT95zPb0GUGv9v0d0iyuTb303vbXkkbHDp/DxufB04jNVD+IN9yHy7y/6Mqq0h0YVaQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-15.2.4.tgz", + "integrity": "sha512-Oioa0SORWLwi35/kVB8aCk5Uq+5/ZIumMK1kJV+jSdazFm2NzPDztsefzdmzzpx5oGCJ6FkUC7vkaUseNTStNA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-15.2.4.tgz", + "integrity": "sha512-yb5WTRaHdkgOqFOZiu6rHV1fAEK0flVpaIN2HB6kxHVSy/dIajWbThS7qON3W9/SNOH2JWkVCyulgGYekMePuw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-15.2.4.tgz", + "integrity": "sha512-Dcdv/ix6srhkM25fgXiyOieFUkz+fOYkHlydWCtB0xMST6X9XYI3yPDKBZt1xuhOytONsIFJFB08xXYsxUwJLw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-15.2.4.tgz", + "integrity": "sha512-dW0i7eukvDxtIhCYkMrZNQfNicPDExt2jPb9AZPpL7cfyUo7QSNl1DjsHjmmKp6qNAqUESyT8YFl/Aw91cNJJg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-15.2.4.tgz", + "integrity": "sha512-SbnWkJmkS7Xl3kre8SdMF6F/XDh1DTFEhp0jRTj/uB8iPKoU2bb2NDfcu+iifv1+mxQEd1g2vvSxcZbXSKyWiQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.11.0.tgz", + "integrity": "sha512-zxnHvoMQVqewTJr/W4pKjF0bMGiKJv1WX7bSrkl46Hg0QjESbzBROWK0Wg4RphzSOS5Jiy7eFimmM3UgMrMZbQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.15.tgz", + "integrity": "sha512-JQ5TuMi45Owi4/BIMAJBoSQoOJu12oOk/gADqlcUL9JEdHB8vyjUSsxqeNXnmXHjYKMi2WcYtezGEEhqUI/E2g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.8.0" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.0.17.tgz", + "integrity": "sha512-LIdNwcqyY7578VpofXyqjH6f+3fP4nrz7FBLki5HpzqjYfXdF2m/eW18ZfoKePtDGg90Bvvfpov9d2gy5XVCbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "enhanced-resolve": "^5.18.1", + "jiti": "^2.4.2", + "tailwindcss": "4.0.17" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.0.17.tgz", + "integrity": "sha512-B4OaUIRD2uVrULpAD1Yksx2+wNarQr2rQh65nXqaqbLY1jCd8fO+3KLh/+TH4Hzh2NTHQvgxVbPdUDOtLk7vAw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.0.17", + "@tailwindcss/oxide-darwin-arm64": "4.0.17", + "@tailwindcss/oxide-darwin-x64": "4.0.17", + "@tailwindcss/oxide-freebsd-x64": "4.0.17", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.0.17", + "@tailwindcss/oxide-linux-arm64-gnu": "4.0.17", + "@tailwindcss/oxide-linux-arm64-musl": "4.0.17", + "@tailwindcss/oxide-linux-x64-gnu": "4.0.17", + "@tailwindcss/oxide-linux-x64-musl": "4.0.17", + "@tailwindcss/oxide-win32-arm64-msvc": "4.0.17", + "@tailwindcss/oxide-win32-x64-msvc": "4.0.17" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.0.17.tgz", + "integrity": "sha512-3RfO0ZK64WAhop+EbHeyxGThyDr/fYhxPzDbEQjD2+v7ZhKTb2svTWy+KK+J1PHATus2/CQGAGp7pHY/8M8ugg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.0.17.tgz", + "integrity": "sha512-e1uayxFQCCDuzTk9s8q7MC5jFN42IY7nzcr5n0Mw/AcUHwD6JaBkXnATkD924ZsHyPDvddnusIEvkgLd2CiREg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.0.17.tgz", + "integrity": "sha512-d6z7HSdOKfXQ0HPlVx1jduUf/YtBuCCtEDIEFeBCzgRRtDsUuRtofPqxIVaSCUTOk5+OfRLonje6n9dF6AH8wQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.0.17.tgz", + "integrity": "sha512-EjrVa6lx3wzXz3l5MsdOGtYIsRjgs5Mru6lDv4RuiXpguWeOb3UzGJ7vw7PEzcFadKNvNslEQqoAABeMezprxQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.0.17.tgz", + "integrity": "sha512-65zXfCOdi8wuaY0Ye6qMR5LAXokHYtrGvo9t/NmxvSZtCCitXV/gzJ/WP5ksXPhff1SV5rov0S+ZIZU+/4eyCQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.0.17.tgz", + "integrity": "sha512-+aaq6hJ8ioTdbJV5IA1WjWgLmun4T7eYLTvJIToiXLHy5JzUERRbIZjAcjgK9qXMwnvuu7rqpxzej+hGoEcG5g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.0.17.tgz", + "integrity": "sha512-/FhWgZCdUGAeYHYnZKekiOC0aXFiBIoNCA0bwzkICiMYS5Rtx2KxFfMUXQVnl4uZRblG5ypt5vpPhVaXgGk80w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.0.17.tgz", + "integrity": "sha512-gELJzOHK6GDoIpm/539Golvk+QWZjxQcbkKq9eB2kzNkOvrP0xc5UPgO9bIMNt1M48mO8ZeNenCMGt6tfkvVBg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.0.17.tgz", + "integrity": "sha512-68NwxcJrZn94IOW4TysMIbYv5AlM6So1luTlbYUDIGnKma1yTFGBRNEJ+SacJ3PZE2rgcTBNRHX1TB4EQ/XEHw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.0.17.tgz", + "integrity": "sha512-AkBO8efP2/7wkEXkNlXzRD4f/7WerqKHlc6PWb5v0jGbbm22DFBLbIM19IJQ3b+tNewQZa+WnPOaGm0SmwMNjw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.0.17.tgz", + "integrity": "sha512-7/DTEvXcoWlqX0dAlcN0zlmcEu9xSermuo7VNGX9tJ3nYMdo735SHvbrHDln1+LYfF6NhJ3hjbpbjkMOAGmkDg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/postcss": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/@tailwindcss/postcss/-/postcss-4.0.17.tgz", + "integrity": "sha512-qeJbRTB5FMZXmuJF+eePd235EGY6IyJZF0Bh0YM6uMcCI4L9Z7dy+lPuLAhxOJzxnajsbjPoDAKOuAqZRtf1PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "@tailwindcss/node": "4.0.17", + "@tailwindcss/oxide": "4.0.17", + "lightningcss": "1.29.2", + "postcss": "^8.4.41", + "tailwindcss": "4.0.17" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@types/estree": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.28.0.tgz", + "integrity": "sha512-lvFK3TCGAHsItNdWZ/1FkvpzCxTHUVuFrdnOGLMa0GGCFIbCgQWVk3CzCGdA7kM3qGVc+dfW9tr0Z/sHnGDFyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/type-utils": "8.28.0", + "@typescript-eslint/utils": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.28.0.tgz", + "integrity": "sha512-LPcw1yHD3ToaDEoljFEfQ9j2xShY367h7FZ1sq5NJT9I3yj4LHer1Xd1yRSOdYy9BpsrxU7R+eoDokChYM53lQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/typescript-estree": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.28.0.tgz", + "integrity": "sha512-u2oITX3BJwzWCapoZ/pXw6BCOl8rJP4Ij/3wPoGvY8XwvXflOzd1kLrDUUUAIEdJSFh+ASwdTHqtan9xSg8buw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.28.0.tgz", + "integrity": "sha512-oRoXu2v0Rsy/VoOGhtWrOKDiIehvI+YNrDk5Oqj40Mwm0Yt01FC/Q7nFqg088d3yAsR1ZcZFVfPCTTFCe/KPwg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.28.0", + "@typescript-eslint/utils": "8.28.0", + "debug": "^4.3.4", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.28.0.tgz", + "integrity": "sha512-bn4WS1bkKEjx7HqiwG2JNB3YJdC1q6Ue7GyGlwPHyt0TnVq6TtD/hiOdTZt71sq0s7UzqBFXD8t8o2e63tXgwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.28.0.tgz", + "integrity": "sha512-H74nHEeBGeklctAVUvmDkxB1mk+PAZ9FiOMPFncdqeRBXxk1lWSYraHw8V12b7aa6Sg9HOBNbGdSHobBPuQSuA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/visitor-keys": "8.28.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.28.0.tgz", + "integrity": "sha512-OELa9hbTYciYITqgurT1u/SzpQVtDLmQMFzy/N8pQE+tefOyCWT79jHsav294aTqV1q1u+VzqDGbuujvRYaeSQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.28.0", + "@typescript-eslint/types": "8.28.0", + "@typescript-eslint/typescript-estree": "8.28.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.28.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.28.0.tgz", + "integrity": "sha512-hbn8SZ8w4u2pRwgQ1GlUrPKE+t2XvcCW5tTRF7j6SMYIuYG37XuzIW44JCZPa36evi0Oy2SnM664BlIaAuQcvg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.28.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@unrs/rspack-resolver-binding-darwin-arm64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-arm64/-/rspack-resolver-binding-darwin-arm64-1.3.0.tgz", + "integrity": "sha512-EcjI0Hh2HiNOM0B9UuYH1PfLWgE6/SBQ4dKoHXWNloERfveha/n6aUZSBThtPGnJenmdfaJYXXZtqyNbWtJAFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-darwin-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-darwin-x64/-/rspack-resolver-binding-darwin-x64-1.3.0.tgz", + "integrity": "sha512-3CgG+mhfudDfnaDqwEl0W1mcGTto5f5mqPyJSXcWDxrnNc7pr/p01khIgWOoOD1eCwVejmgpYvRKGBwJPwgHOQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-freebsd-x64": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-freebsd-x64/-/rspack-resolver-binding-freebsd-x64-1.3.0.tgz", + "integrity": "sha512-ww8BwryDrpXlSajwSIEUXEv8oKDkw04L2ke3hxjaxWohuBV8pAQie9XBS4yQTyREuL2ypcqbARfoCXJJzVp7ig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-arm-gnueabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm-gnueabihf/-/rspack-resolver-binding-linux-arm-gnueabihf-1.3.0.tgz", + "integrity": "sha512-WyhonI1mkuAlnG2iaMjk7uy4aWX+FWi2Au8qCCwj57wVHbAEfrN6xN2YhzbrsCC+ciumKhj5c01MqwsnYDNzWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-arm-musleabihf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm-musleabihf/-/rspack-resolver-binding-linux-arm-musleabihf-1.3.0.tgz", + "integrity": "sha512-+uCP6hIAMVWHKQnLZHESJ1U1TFVGLR3FTeaS2A4zB0k8w+IbZlWwl9FiBUOwOiqhcCCyKiUEifgnYFNGpxi3pw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-arm64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-gnu/-/rspack-resolver-binding-linux-arm64-gnu-1.3.0.tgz", + "integrity": "sha512-p+s/Wp8rf75Qqs2EPw4HC0xVLLW+/60MlVAsB7TYLoeg1e1CU/QCis36FxpziLS0ZY2+wXdTnPUxr+5kkThzwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-arm64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-arm64-musl/-/rspack-resolver-binding-linux-arm64-musl-1.3.0.tgz", + "integrity": "sha512-cZEL9jmZ2kAN53MEk+fFCRJM8pRwOEboDn7sTLjZW+hL6a0/8JNfHP20n8+MBDrhyD34BSF4A6wPCj/LNhtOIQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-ppc64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-ppc64-gnu/-/rspack-resolver-binding-linux-ppc64-gnu-1.3.0.tgz", + "integrity": "sha512-IOeRhcMXTNlk2oApsOozYVcOHu4t1EKYKnTz4huzdPyKNPX0Y9C7X8/6rk4aR3Inb5s4oVMT9IVKdgNXLcpGAQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-s390x-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-s390x-gnu/-/rspack-resolver-binding-linux-s390x-gnu-1.3.0.tgz", + "integrity": "sha512-op54XrlEbhgVRCxzF1pHFcLamdOmHDapwrqJ9xYRB7ZjwP/zQCKzz/uAsSaAlyQmbSi/PXV7lwfca4xkv860/Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-x64-gnu": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-gnu/-/rspack-resolver-binding-linux-x64-gnu-1.3.0.tgz", + "integrity": "sha512-orbQF7sN02N/b9QF8Xp1RBO5YkfI+AYo9VZw0H2Gh4JYWSuiDHjOPEeFPDIRyWmXbQJuiVNSB+e1pZOjPPKIyg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-linux-x64-musl": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-linux-x64-musl/-/rspack-resolver-binding-linux-x64-musl-1.3.0.tgz", + "integrity": "sha512-kpjqjIAC9MfsjmlgmgeC8U9gZi6g/HTuCqpI7SBMjsa7/9MvBaQ6TJ7dtnsV/+DXvfJ2+L5teBBXG+XxfpvIFA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-wasm32-wasi": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-wasm32-wasi/-/rspack-resolver-binding-wasm32-wasi-1.3.0.tgz", + "integrity": "sha512-JAg0hY3kGsCPk7Jgh16yMTBZ6VEnoNR1DFZxiozjKwH+zSCfuDuM5S15gr50ofbwVw9drobIP2TTHdKZ15MJZQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/rspack-resolver-binding-win32-arm64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-arm64-msvc/-/rspack-resolver-binding-win32-arm64-msvc-1.3.0.tgz", + "integrity": "sha512-h5N83i407ntS3ndDkhT/3vC3Dj8oP0BIwMtekETNJcxk7IuWccSXifzCEhdxxu/FOX4OICGIHdHrxf5fJuAjfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-win32-ia32-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-ia32-msvc/-/rspack-resolver-binding-win32-ia32-msvc-1.3.0.tgz", + "integrity": "sha512-9QH7Gq3dRL8Q/D6PGS3Dwtjx9yw6kbCEu6iBkAUhFTDAuVUk2L0H/5NekRVA13AQaSc3OsEUKt60EOn/kq5Dug==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/rspack-resolver-binding-win32-x64-msvc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@unrs/rspack-resolver-binding-win32-x64-msvc/-/rspack-resolver-binding-win32-x64-msvc-1.3.0.tgz", + "integrity": "sha512-IYuXJCuwBOVV0H73l6auaZwtAPHjCPBJkxd4Co0yO6dSjDM5Na5OceaxhUmJLZ3z8kuEGhTYWIHH7PchGztnlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz", + "integrity": "sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.3.tgz", + "integrity": "sha512-Xm7bpRXnDSX2YE2YFfBk2FnF0ep6tmG7xPh8iHee8MIcrgq762Nkce856dYtJYLkuIoYZvGfTs/PbZhideTcEg==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001707", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001707.tgz", + "integrity": "sha512-3qtRjw/HQSMlDWf+X79N206fepf4SOOU6SQLMaq/0KkZLmSjPxAkBOQQ+FxbHKfHmYLZFfdWsO3KA90ceHPSnw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/color": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", + "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "devOptional": true, + "license": "MIT" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "license": "MIT", + "optional": true, + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", + "devOptional": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true, + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.18.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.1.tgz", + "integrity": "sha512-ZSW3ma5GkcQBIpwZTSRAI8N71Uuwgs93IezB7mf7R60tC8ZbJideoDNKjHn2O9KIlx6rkGTTEk1xUCK2E1Y2Yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/es-abstract": { + "version": "1.23.9", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.9.tgz", + "integrity": "sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.0", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-regex": "^1.2.1", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.1.tgz", + "integrity": "sha512-uDn+FE1yrDzyC0pCo961B2IHbdM8y/ACZsKD4dG6WqrjV53BADjwa7D+1aom2rsNVfLyDgU/eigvlJGJ08OQ4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz", + "integrity": "sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^8.0.0", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "node_modules/eslint-config-next": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-15.2.4.tgz", + "integrity": "sha512-v4gYjd4eYIme8qzaJItpR5MMBXJ0/YV07u7eb50kEnlEmX7yhOjdUdzz70v4fiINYRjLf8X8TbogF0k7wlz6sA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "15.2.4", + "@rushstack/eslint-patch": "^1.10.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.0", + "eslint-plugin-react": "^7.37.0", + "eslint-plugin-react-hooks": "^5.0.0" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0 || ^9.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.9.1.tgz", + "integrity": "sha512-euxa5rTGqHeqVxmOHT25hpk58PxkQ4mNoX6Yun4ooGaCHAxOCojJYNvjmyeOQxj/LyW+3fulH0+xtk+p2kPPTw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.4.0", + "get-tsconfig": "^4.10.0", + "is-bun-module": "^1.3.0", + "rspack-resolver": "^1.1.0", + "stable-hash": "^0.0.5", + "tinyglobby": "^0.2.12" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.4", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.4.tgz", + "integrity": "sha512-BGP0jRmfYyvOyvMoRX/uoUeW+GqNj9y16bPQzqAHf3AYII/tDs+jMN0dBVkl88/OZwNGwrVFxE7riHsXVfy/LQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.2.1", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.2.0.tgz", + "integrity": "sha512-+f15FfK64YQwZdJNELETdn5ibXEUQmW1DZL6KXhNnc2heoy/sg9VJJeT7n8TlMWouzWqSWavFkIhHyIbIAEapg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.14.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", + "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/flatted": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.3.tgz", + "integrity": "sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "license": "MIT", + "optional": true + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.16.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.1.tgz", + "integrity": "sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.0.tgz", + "integrity": "sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true, + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.5.tgz", + "integrity": "sha512-H0dkQoCa3b2VEeKQBOxFph+JAbcrQdE7KC0UkqwpLmv2EC4P41QXP+rqo9wYodACiG5/WM5s9oDApTU8utwj9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jiti": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.4.2.tgz", + "integrity": "sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==", + "dev": true, + "license": "MIT", + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.29.2.tgz", + "integrity": "sha512-6b6gd/RUXKaw5keVdSEtqFVdzWnU5jMxTUjA2bVcMNPLwSQ08Sv/UodBVtETLCn7k4S1Ibxwh7k68IwLZPgKaA==", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.29.2", + "lightningcss-darwin-x64": "1.29.2", + "lightningcss-freebsd-x64": "1.29.2", + "lightningcss-linux-arm-gnueabihf": "1.29.2", + "lightningcss-linux-arm64-gnu": "1.29.2", + "lightningcss-linux-arm64-musl": "1.29.2", + "lightningcss-linux-x64-gnu": "1.29.2", + "lightningcss-linux-x64-musl": "1.29.2", + "lightningcss-win32-arm64-msvc": "1.29.2", + "lightningcss-win32-x64-msvc": "1.29.2" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.29.2.tgz", + "integrity": "sha512-cK/eMabSViKn/PG8U/a7aCorpeKLMlK0bQeNHmdb7qUnBkNPnL+oV5DjJUo0kqWsJUapZsM4jCfYItbqBDvlcA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.29.2.tgz", + "integrity": "sha512-j5qYxamyQw4kDXX5hnnCKMf3mLlHvG44f24Qyi2965/Ycz829MYqjrVg2H8BidybHBp9kom4D7DR5VqCKDXS0w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.29.2.tgz", + "integrity": "sha512-wDk7M2tM78Ii8ek9YjnY8MjV5f5JN2qNVO+/0BAGZRvXKtQrBC4/cn4ssQIpKIPP44YXw6gFdpUF+Ps+RGsCwg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.29.2.tgz", + "integrity": "sha512-IRUrOrAF2Z+KExdExe3Rz7NSTuuJ2HvCGlMKoquK5pjvo2JY4Rybr+NrKnq0U0hZnx5AnGsuFHjGnNT14w26sg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.29.2.tgz", + "integrity": "sha512-KKCpOlmhdjvUTX/mBuaKemp0oeDIBBLFiU5Fnqxh1/DZ4JPZi4evEH7TKoSBFOSOV3J7iEmmBaw/8dpiUvRKlQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.29.2.tgz", + "integrity": "sha512-Q64eM1bPlOOUgxFmoPUefqzY1yV3ctFPE6d/Vt7WzLW4rKTv7MyYNky+FWxRpLkNASTnKQUaiMJ87zNODIrrKQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.29.2.tgz", + "integrity": "sha512-0v6idDCPG6epLXtBH/RPkHvYx74CVziHo6TMYga8O2EiQApnUPZsbR9nFNrg2cgBzk1AYqEd95TlrsL7nYABQg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.29.2.tgz", + "integrity": "sha512-rMpz2yawkgGT8RULc5S4WiZopVMOFWjiItBT7aSfDX4NQav6M44rhn5hjtkKzB+wMTRlLLqxkeYEtQ3dd9696w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.29.2.tgz", + "integrity": "sha512-nL7zRW6evGQqYVu/bKGK+zShyz8OVzsCotFgc7judbt6wnB2KbiKKJwBE4SGoDBQ1O94RjW4asrCjQL4i8Fhbw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.29.2", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.29.2.tgz", + "integrity": "sha512-EdIUW3B2vLuHmv7urfzMI/h2fmlnOQBk1xlsDxkN1tCWKjNFjfLhGxYk8C8mzpSfr+A6jFFIi8fU6LbQGsRWjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "15.2.4", + "resolved": "https://registry.npmjs.org/next/-/next-15.2.4.tgz", + "integrity": "sha512-VwL+LAaPSxEkd3lU2xWbgEOtrM8oedmyhBqaVNmgKB+GvZlCy9rgaEc+y2on0wv+l0oSFqLtYD6dcC1eAedUaQ==", + "license": "MIT", + "dependencies": { + "@next/env": "15.2.4", + "@swc/counter": "0.1.3", + "@swc/helpers": "0.5.15", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "postcss": "8.4.31", + "styled-jsx": "5.1.6" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": "^18.18.0 || ^19.8.0 || >= 20.0.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "15.2.4", + "@next/swc-darwin-x64": "15.2.4", + "@next/swc-linux-arm64-gnu": "15.2.4", + "@next/swc-linux-arm64-musl": "15.2.4", + "@next/swc-linux-x64-gnu": "15.2.4", + "@next/swc-linux-x64-musl": "15.2.4", + "@next/swc-win32-arm64-msvc": "15.2.4", + "@next/swc-win32-x64-msvc": "15.2.4", + "sharp": "^0.33.5" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "babel-plugin-react-compiler": "*", + "react": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "react-dom": "^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "babel-plugin-react-compiler": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.9.tgz", + "integrity": "sha512-8u/hfXFRBD1O0hPUjioLhoWFHRmt6tKA4/vZPyckBr18l1KE9uHrFaFaUi8MDRTpi4uak2goyPTSNJLXX2k2Hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.1.tgz", + "integrity": "sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", + "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react/-/react-19.0.0.tgz", + "integrity": "sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "19.0.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-19.0.0.tgz", + "integrity": "sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ==", + "license": "MIT", + "dependencies": { + "scheduler": "^0.25.0" + }, + "peerDependencies": { + "react": "^19.0.0" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve": { + "version": "1.22.10", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.10.tgz", + "integrity": "sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.16.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rspack-resolver": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rspack-resolver/-/rspack-resolver-1.3.0.tgz", + "integrity": "sha512-az/PLDwa1xijNv4bAFBS8mtqqJC1Y3lVyFag4cuyIUOHq/ft5kSZlHbqYaLZLpsQtPWv4ZGDo5ycySKJzUvU/A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/JounQin" + }, + "optionalDependencies": { + "@unrs/rspack-resolver-binding-darwin-arm64": "1.3.0", + "@unrs/rspack-resolver-binding-darwin-x64": "1.3.0", + "@unrs/rspack-resolver-binding-freebsd-x64": "1.3.0", + "@unrs/rspack-resolver-binding-linux-arm-gnueabihf": "1.3.0", + "@unrs/rspack-resolver-binding-linux-arm-musleabihf": "1.3.0", + "@unrs/rspack-resolver-binding-linux-arm64-gnu": "1.3.0", + "@unrs/rspack-resolver-binding-linux-arm64-musl": "1.3.0", + "@unrs/rspack-resolver-binding-linux-ppc64-gnu": "1.3.0", + "@unrs/rspack-resolver-binding-linux-s390x-gnu": "1.3.0", + "@unrs/rspack-resolver-binding-linux-x64-gnu": "1.3.0", + "@unrs/rspack-resolver-binding-linux-x64-musl": "1.3.0", + "@unrs/rspack-resolver-binding-wasm32-wasi": "1.3.0", + "@unrs/rspack-resolver-binding-win32-arm64-msvc": "1.3.0", + "@unrs/rspack-resolver-binding-win32-ia32-msvc": "1.3.0", + "@unrs/rspack-resolver-binding-win32-x64-msvc": "1.3.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.25.0.tgz", + "integrity": "sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA==", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", + "devOptional": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", + "hasInstallScript": true, + "license": "Apache-2.0", + "optional": true, + "dependencies": { + "color": "^4.2.3", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "license": "MIT", + "optional": true, + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stable-hash": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", + "dev": true, + "license": "MIT" + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.12.tgz", + "integrity": "sha512-6CC9uyBL+/48dYizRf7H7VAYCMCNTBeM78x/VTUe9bFEaxBepPJDa1Ow99LqI/1yF7kuy7Q3cQsYMrcjGUcskA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.6.tgz", + "integrity": "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0 || ^19.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "4.0.17", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.0.17.tgz", + "integrity": "sha512-OErSiGzRa6rLiOvaipsDZvLMSpsBZ4ysB4f0VKGXUrjw2jfkJRd6kjRKV2+ZmTCNvwtvgdDam5D7w6WXsdLJZw==", + "dev": true, + "license": "MIT" + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", + "dev": true, + "license": "MIT", + "dependencies": { + "fdir": "^6.4.3", + "picomatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.4.3", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.3.tgz", + "integrity": "sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/ts-api-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.19", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.19.tgz", + "integrity": "sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/package.json b/examples/next/client-multisite-app-router-fetch-data/example-app/package.json new file mode 100644 index 00000000..bb3a8d93 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/package.json @@ -0,0 +1,25 @@ +{ + "name": "example-app", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint", + "prettier": "prettier --write ." + }, + "dependencies": { + "next": "15.2.4", + "prettier": "^3.5.3", + "react": "^19.0.0", + "react-dom": "^19.0.0" + }, + "devDependencies": { + "@eslint/eslintrc": "^3", + "@tailwindcss/postcss": "^4", + "eslint": "^9", + "eslint-config-next": "15.2.4", + "tailwindcss": "^4" + } +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/postcss.config.mjs b/examples/next/client-multisite-app-router-fetch-data/example-app/postcss.config.mjs new file mode 100644 index 00000000..c7bcb4b1 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: ["@tailwindcss/postcss"], +}; + +export default config; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/public/file.svg b/examples/next/client-multisite-app-router-fetch-data/example-app/public/file.svg new file mode 100644 index 00000000..004145cd --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/public/file.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/public/globe.svg b/examples/next/client-multisite-app-router-fetch-data/example-app/public/globe.svg new file mode 100644 index 00000000..567f17b0 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/public/globe.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/public/next.svg b/examples/next/client-multisite-app-router-fetch-data/example-app/public/next.svg new file mode 100644 index 00000000..5174b28c --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/public/next.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/public/vercel.svg b/examples/next/client-multisite-app-router-fetch-data/example-app/public/vercel.svg new file mode 100644 index 00000000..77053960 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/public/vercel.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/public/window.svg b/examples/next/client-multisite-app-router-fetch-data/example-app/public/window.svg new file mode 100644 index 00000000..b2b2a44f --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/public/window.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/[...uri]/page.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/[...uri]/page.js new file mode 100644 index 00000000..c8a6609d --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/[...uri]/page.js @@ -0,0 +1,73 @@ +// Catch all template for all pages, posts and CPT +import { notFound } from "next/navigation"; +import Page from "@/components/single/Page"; +import Post from "@/components/single/Post"; +import Movie from "@/components/single/Movie"; +import { fetchGraphQL } from "@/lib/client"; +import { NodeByUriQuery } from "@/lib/queries/NodeByUriQuery"; + +// This function fetches the data for the given uri and siteKey +async function fetchContent(uri, siteKey) { + const query = NodeByUriQuery[siteKey] || false; + + if (!query) { + console.warn(`Site configuration for siteKey "${siteKey}" not found.`); + return null; + } + + return await fetchGraphQL( + query, + siteKey, + { + uri: uri, + }, + 3600, + ); +} + +// This is a catch-all route that will match any path +// We will loop through each site defined in next.config.mjs and loop through each site +// and fetch the data for the uri using the nodeByUri query. +// We will return notFound if the data is not found for any of the sites. + +export default async function ContentPage({ params }) { + // Await for the params to resolve + const resolvedParams = await params; + + const uri = Array.isArray(resolvedParams?.uri) + ? resolvedParams.uri.join("/") + : ""; + + const wordpressSites = JSON.parse(process.env.WORDPRESS_SITES || "{}"); + let data, + currentSiteKey = null; + for (const [siteKey] of Object.entries(wordpressSites)) { + currentSiteKey = siteKey; + data = await fetchContent(uri, siteKey); + + if (data?.nodeByUri) { + break; + } + } + + if (!data?.nodeByUri) { + console.warn("No data found, returning 404"); + notFound(); + } + + const contentType = data?.nodeByUri?.__typename; + + // Add your own CPT templates here for single post types + if (contentType === "Movie") + return ; + if (contentType === "Post") + return ; + if (contentType === "Page") + return ; + notFound(); +} + +// Note: We could generate static params for the pages you want to pre-render (optional) for things like popular posts etc +export async function generateStaticParams() { + return []; +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/blog/page.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/blog/page.js new file mode 100644 index 00000000..ff707899 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/blog/page.js @@ -0,0 +1,13 @@ +import { PostListQuery } from "@/lib/queries/PostListQuery"; +import { BlogListingTemplate } from "@/components/blog/BlogListingTemplate"; + +// Note: This is only rendering posts for the main site. +// See catch all template to see how you could implement a multisite solution. +export default function BlogPage(params) { + return BlogListingTemplate(PostListQuery, { + params: params, + siteKey: "main", + titlePrefix: "Blog", + cacheExpiry: 3600, + }); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/category/[...slug]/page.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/category/[...slug]/page.js new file mode 100644 index 00000000..e8edb76a --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/category/[...slug]/page.js @@ -0,0 +1,13 @@ +import { CategoryListQuery } from "@/lib/queries/CategoryListQuery"; +import { BlogListingTemplate } from "@/components/blog/BlogListingTemplate"; + +// Note: This is only rendering posts for the main site. +// See catch all template to see how you could implement a multisite solution. +export default function CategoryPage({ params }) { + return BlogListingTemplate(CategoryListQuery, { + params: params, + siteKey: "main", + titlePrefix: "Category", + cacheExpiry: 3600, + }); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/cinema-listings/page.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/cinema-listings/page.js new file mode 100644 index 00000000..f7a5c546 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/cinema-listings/page.js @@ -0,0 +1,12 @@ +import { CinemaListingsQuery } from "@/lib/queries/CinemaListingsQuery"; +import { CustomPostTypeTemplate } from "@/components/cpt/CustomPostTypeTemplate"; + +export default async function CinemaListingsPage(params) { + return CustomPostTypeTemplate(CinemaListingsQuery, { + params: params, + customPostType: "movies", + siteKey: "movie_site", + title: "Cinema Listings", + cacheExpiry: 3600, + }); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/favicon.ico b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/favicon.ico new file mode 100644 index 00000000..718d6fea Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/favicon.ico differ diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/globals.css b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/globals.css new file mode 100644 index 00000000..14986044 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/globals.css @@ -0,0 +1,52 @@ +@import "tailwindcss"; + +:root { + --background: #ffffff; + --foreground: #171717; +} + +@theme inline { + --color-background: var(--background); + --color-foreground: var(--foreground); + --font-sans: var(--font-geist-sans); + --font-mono: var(--font-geist-mono); +} + +@media (prefers-color-scheme: dark) { + :root { + --background: #0a0a0a; + --foreground: #ededed; + } +} + +body { + background: var(--background); + color: var(--foreground); + font-family: Arial, Helvetica, sans-serif; +} + +// Add a small bit of styling to the content +.wp-content { + font-size: 1rem; +} +.wp-content p { + margin: 1.5rem 0; +} +.wp-content h1 { + @apply text-4xl font-bold my-4; +} +.wp-content h2 { + @apply text-3xl font-semibold my-3; +} +.wp-content h3 { + @apply text-2xl font-medium my-2; +} +.wp-content h4 { + @apply text-xl font-medium my-2; +} +.wp-content h5 { + @apply text-lg font-medium my-1; +} +.wp-content h6 { + @apply text-base font-medium my-1; +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/layout.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/layout.js new file mode 100644 index 00000000..2ca5a3cc --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/layout.js @@ -0,0 +1,37 @@ +import { Lato, Open_Sans } from "next/font/google"; +import "./globals.css"; + +// Note: You can use nested layouts too in Next.js - https://nextjs.org/docs/pages/building-your-application/routing/pages-and-layouts#per-page-layouts +import Header from "@/components/layout/Header"; +import Footer from "@/components/layout/Footer"; + +const lato = Lato({ + variable: "--font-lato", + subsets: ["latin"], + weight: ["400", "700"], +}); + +const openSans = Open_Sans({ + variable: "--font-open-sans", + subsets: ["latin"], + weight: ["400", "700"], +}); + +export const metadata = { + title: "Sample Headless WordPress Multisite", + description: "Generated by hwptoolkit", +}; + +export default function RootLayout({ children }) { + return ( + + +
+
+ {children} +
+
+ + + ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/page.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/page.js new file mode 100644 index 00000000..35caa788 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/page.js @@ -0,0 +1,51 @@ +import { HomePostListQuery } from "@/lib/queries/HomePostListQuery"; +import { HomeCinemaListingsQuery } from "@/lib/queries/HomeCinemaListingsQuery"; +import { BlogListingTemplate } from "@/components/blog/BlogListingTemplate"; +import { CustomPostTypeTemplate } from "@/components/cpt/CustomPostTypeTemplate"; +import { PageHeading } from "@/components/heading/PageHeading"; +import { Button } from "@/components/button/Button"; + +export default async function HomePage(params) { + const postListContainerClass = + "grid grid-cols-1 md:grid-cols-2 lg:grid-cols-3 gap-4"; + + return ( + <> +
+ + + {BlogListingTemplate(HomePostListQuery, { + params: params, + siteKey: "main", + cacheExpiry: 86400, + postsPerPage: 3, + postListContainerClass: postListContainerClass, + })} + +
+
+
+
+ + {CustomPostTypeTemplate(HomeCinemaListingsQuery, { + customPostType: "movies", + siteKey: "movie_site", + postsPerPage: 3, + cacheExpiry: 86400, + containerClass: "container mx-auto px-4 pb-12", + postListContainerClass: postListContainerClass, + })} +
+
+
+ + ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/tag/[...slug]/page.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/tag/[...slug]/page.js new file mode 100644 index 00000000..8ec88d16 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/app/tag/[...slug]/page.js @@ -0,0 +1,13 @@ +import { TagListQuery } from "@/lib/queries/TagListQuery.js"; +import { BlogListingTemplate } from "@/components/blog/BlogListingTemplate"; + +// Note: This is only rendering posts for the main site. +// See catch all template to see how you could implement a multisite solution. +export default function TagPage({ params }) { + return BlogListingTemplate(TagListQuery, { + params: params, + siteKey: "main", + titlePrefix: "Tag", + cacheExpiry: 3600, + }); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogList.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogList.js new file mode 100644 index 00000000..898f5d1b --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogList.js @@ -0,0 +1,73 @@ +"use client"; + +import { useState } from "react"; +import { fetchGraphQL } from "@/lib/client"; +import BlogListItem from "@/components/blog/BlogListItem"; +import { LoadMoreButton } from "../button/LoadMoreButton"; + +export default function BlogList({ + initialPosts, + initialPageInfo, + postsPerPage, + postsQuery, + siteKey, + slug = "", + postListContainerClass, +}) { + // Track various states for posts, page info, and loading + const [posts, setPosts] = useState(initialPosts || []); + const [pageInfo, setPageInfo] = useState(initialPageInfo || {}); + const [loading, setLoading] = useState(false); + + const loadMorePosts = async () => { + if (!pageInfo.hasNextPage) return; + + setLoading(true); + try { + let data; + + /** + * if a category or tag slug is provided + */ + if (slug) { + data = await fetchGraphQL(postsQuery, siteKey, { + slug: slug, + first: postsPerPage, + after: pageInfo.endCursor, + }); + } else { + data = await fetchGraphQL(postsQuery, siteKey, { + first: postsPerPage, + after: pageInfo.endCursor, + }); + } + const newPosts = data?.posts?.edges || []; + const newPageInfo = data?.posts?.pageInfo || {}; + + setPosts((prevPosts) => [...prevPosts, ...newPosts]); + setPageInfo(newPageInfo); + } catch (error) { + console.error("Error loading more posts:", error); + } finally { + setLoading(false); + } + }; + + return ( + <> +
+ {posts.map(({ node }) => ( + + ))} +
+ + {pageInfo.hasNextPage && ( + + )} + + ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogListItem.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogListItem.js new file mode 100644 index 00000000..a380b028 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogListItem.js @@ -0,0 +1,49 @@ +import Link from "next/link"; +import { FeaturedImage } from "../image/FeaturedImage"; +import { formatDate } from "@/lib/utils"; + +export default function BlogListItem({ post }) { + const { title, excerpt, uri } = post; + + return ( +
+ + +

+ + {title} + +

+ +
+ by {post.author.node.name} +
+ + + +
+ + + Read more + +
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogListingTemplate.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogListingTemplate.js new file mode 100644 index 00000000..75de17ee --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/blog/BlogListingTemplate.js @@ -0,0 +1,65 @@ +import BlogList from "@/components/blog/BlogList"; +import { PageHeading } from "@/components/heading/PageHeading"; +import { getPosts, getPostsPerPage } from "@/lib/utils"; +import { notFound } from "next/navigation"; + +// Note the approach here is to load the first 5 posts on the server, +// and then use the client-side component to handle pagination after hydrating the initial data. +export async function BlogListingTemplate(query, args) { + const { + params, + siteKey, + titlePrefix, + postsPerPage, + cacheExpiry, + containerClass, + postListContainerClass, + } = args; + + // Get the last value in the array of params + const slug = Array.isArray(params.slug) + ? params.slug[params.slug.length - 1] + : params.slug; + + // Fetch initial data on the server using the slug from the route + const data = await getPosts({ + query, + siteKey, + slug, + pageSize: postsPerPage ? postsPerPage : getPostsPerPage(), + revalidate: cacheExpiry ? cacheExpiry : 3600, + }); + + // Check if posts exists then throw a 404 + if (!data || !data.posts || data.posts.edges.length === 0) { + console.warn(`No posts found for ${titlePrefix.toLowerCase()}: ${slug}`); + notFound(); + } + + const initialPosts = data.posts.edges; + const initialPageInfo = data.posts.pageInfo; + + let title = titlePrefix; + if (slug) { + title = `${titlePrefix}: ${slug}`; + } + + return ( +
+ {title && } + + +
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/button/Button.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/button/Button.js new file mode 100644 index 00000000..fe483b9d --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/button/Button.js @@ -0,0 +1,13 @@ +import Link from "next/link"; + +export function Button({ + text, + href, + className = "text-center p-3 bg-orange-600 hover:bg-orange-400 text-white uppercase transition-colors duration-300", +}) { + return ( + + {text} + + ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/button/LoadMoreButton.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/button/LoadMoreButton.js new file mode 100644 index 00000000..35ea93b3 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/button/LoadMoreButton.js @@ -0,0 +1,22 @@ +import Link from "next/link"; + +export function LoadMoreButton({ + text = "Load More Posts", + loadingText = "Loading...", + onClick, + loading = false, + className = "text-center p-3 bg-orange-600 hover:bg-orange-400 text-white uppercase transition-colors duration-300", +}) { + return ( +
+ +
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/comment/CommentForm.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/comment/CommentForm.js new file mode 100644 index 00000000..acbe4b68 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/comment/CommentForm.js @@ -0,0 +1,90 @@ +import { useState } from "react"; + +export default function CommentForm({ + onSubmit = () => {}, + isLoading, + isSuccessful, + errorMessage, +}) { + const [comment, setComment] = useState({ + author: "", + authorEmail: "", + content: "", + }); + + const handleSubmit = (e) => { + e.preventDefault(); + onSubmit(comment); + }; + + const handleChange = (e) => + setComment((prev) => ({ + ...prev, + [e.target.name]: e.target.value, + })); + + return ( +
+

Leave a Comment

+
+ + + + + {errorMessage &&

{errorMessage}

} + + {isSuccessful && ( +
+ + + + + Comment added successfully! It will appear after moderation. + +
+ )} + + +
+
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/comment/Comments.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/comment/Comments.js new file mode 100644 index 00000000..e2cf7a77 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/comment/Comments.js @@ -0,0 +1,35 @@ +export default function Comments({ comments }) { + return ( +
+

Comments

+
+ {comments?.length > 0 ? ( + comments.map(({ node: c }, index) => ( +
+

+ {new Date(c.date).toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + })} +

+

+ {c.author?.node?.name} +

+ +
+
+ )) + ) : ( +

No comments yet.

+ )} +
+
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/CustomPostTypeList.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/CustomPostTypeList.js new file mode 100644 index 00000000..5c3e28cf --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/CustomPostTypeList.js @@ -0,0 +1,64 @@ +"use client"; + +import { useState } from "react"; +import { fetchGraphQL } from "@/lib/client"; +import MovieListingItem from "./MovieListingItem"; +import { LoadMoreButton } from "../button/LoadMoreButton"; + +export default function CustomPostTypeList({ + initialPosts, + initialPageInfo, + postsPerPage, + postsQuery, + siteKey, + customPostType, + postListContainerClass, +}) { + // Track various states for posts, page info, and loading + const [posts, setPosts] = useState(initialPosts || []); + const [pageInfo, setPageInfo] = useState(initialPageInfo || {}); + const [loading, setLoading] = useState(false); + + const loadMorePosts = async () => { + if (!pageInfo.hasNextPage) return; + + setLoading(true); + try { + const data = await fetchGraphQL(postsQuery, siteKey, { + first: postsPerPage, + after: pageInfo.endCursor, + }); + + const newPosts = data[customPostType]?.edges || []; + const newPageInfo = data[customPostType]?.pageInfo || {}; + + setPosts((prevPosts) => [...prevPosts, ...newPosts]); + setPageInfo(newPageInfo); + } catch (error) { + console.error("Error loading more posts:", error); + } finally { + setLoading(false); + } + }; + + return ( + <> +
+ {/* Add your own templates here for different cpt */} + {posts.map(({ node }) => + customPostType === "movies" ? ( + + ) : null, + )} +
+ + {pageInfo.hasNextPage && ( + + )} + + ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/CustomPostTypeTemplate.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/CustomPostTypeTemplate.js new file mode 100644 index 00000000..acb91a73 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/CustomPostTypeTemplate.js @@ -0,0 +1,57 @@ +import { getPosts, getPostsPerPage } from "@/lib/utils"; +import { PageHeading } from "@/components/heading/PageHeading"; +import { notFound } from "next/navigation"; +import CustomPostTypeList from "./CustomPostTypeList"; + +// Note the approach here is to load the first 5 custom posts on the server, +// and then use the client-side component to handle pagination after hydrating the initial data. +export async function CustomPostTypeTemplate(query, args) { + const { + siteKey, + title, + customPostType, + postsPerPage, + cacheExpiry, + containerClass, + postListContainerClass, + } = args; + + // Fetch initial data on the server using the slug from the route + const data = await getPosts({ + query: query, + siteKey: siteKey, + pageSize: postsPerPage ? postsPerPage : getPostsPerPage(), + revalidate: cacheExpiry ? cacheExpiry : 3600, + }); + + // Check if posts exists then throw a 404 + if ( + !data || + !data[customPostType] || + data[customPostType].edges.length === 0 + ) { + console.warn(`No posts found for the custom post type ${customPostType}`); + notFound(); + } + + const initialPosts = data[customPostType].edges; + const initialPageInfo = data[customPostType].pageInfo; + + return ( +
+ {title && } + +
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/MovieListingItem.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/MovieListingItem.js new file mode 100644 index 00000000..84c0aa60 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/cpt/MovieListingItem.js @@ -0,0 +1,86 @@ +import Link from "next/link"; +import { FeaturedImage } from "../image/FeaturedImage"; +import { createExcerpt } from "@/lib/utils"; + +export default function MovieListingItem({ post }) { + // Note: movieShowTimes is the WPGraphQL name assigned under settings for the field group + const { content, movieShowTimes, title, uri } = post; + const { daysOfTheWeek, screenTimes } = movieShowTimes || {}; + + const screenTimesArray = screenTimes + ? screenTimes.split(",").map((time) => time.trim()) + : []; + + return ( +
+

+ + {title} + +

+ + + + {daysOfTheWeek && ( +
+
+ + Showing on: + +
    + {daysOfTheWeek.map((day, index) => ( +
  • + {day} +
  • + ))} +
+
+
+ )} + + {daysOfTheWeek && screenTimesArray.length > 0 && ( +
+
+ + Screen Times: + +
    + {screenTimesArray.map((time, index) => ( +
  • + {time} +
  • + ))} +
+
+
+ )} + +
+

{createExcerpt(content)}

+
+ + + View Show + +
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/heading/PageHeading.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/heading/PageHeading.js new file mode 100644 index 00000000..c9dcc620 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/heading/PageHeading.js @@ -0,0 +1,14 @@ +import { capitalizeWords } from "@/lib/utils"; + +export function PageHeading({ + heading, + className = "text-3xl lg:text-4xl font-bold mb-8 container max-w-4xl text-center lg:text-left lg:px-10 py-2 mx-auto", +}) { + const capitalizeHeading = capitalizeWords(heading); + + return ( +

+ {capitalizeHeading ? `${capitalizeHeading}` : heading} +

+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/image/FeaturedImage.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/image/FeaturedImage.js new file mode 100644 index 00000000..de2fe759 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/image/FeaturedImage.js @@ -0,0 +1,41 @@ +import Link from "next/link"; +import Image from "next/image"; + +export function FeaturedImage({ + post, + classNames = "h-48 my-9 relative", + uri = false, + title = "", +}) { + if (!post.featuredImage?.node?.sourceUrl) { + return ""; + } + + return ( +
+ {typeof uri === "string" && uri.trim() !== "" ? ( + + {post.featuredImage.node.altText + + ) : ( + {post.featuredImage.node.altText + )} +
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/layout/Footer.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/layout/Footer.js new file mode 100644 index 00000000..bd7d8fda --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/layout/Footer.js @@ -0,0 +1,96 @@ +import React from "react"; +import Link from "next/link"; + +const Footer = () => { + { + /* + Note: Currently the default theme of Twenty Twenty Five does not have menu locations + Therefore you cannot query menus out of the box with WPGraphQL. See - https://www.wpgraphql.com/docs/menus + */ + } + const menuItemClass = "my-4"; + const menuItemLinkClass = "hover:underline"; + return ( +
+
+
+
+

Our Company

+
    +
  • + + About Us + +
  • +
  • + + Bookings + +
  • +
  • + + Privacy Policy + +
  • +
+
+
+

Categories

+
    +
  • + + Lifestyle + +
  • +
  • + + Mental Health + +
  • +
  • + + Travel + +
  • +
+
+
+

Tags

+
    +
  • + + Mindfulness + +
  • +
  • + + Nutrition + +
  • +
  • + + Mindset + +
  • +
  • + + Wellness + +
  • +
+
+
+
+

+ © {new Date().getFullYear()} Your Company. All rights reserved. +

+
+
+
+ ); +}; + +export default Footer; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/layout/Header.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/layout/Header.js new file mode 100644 index 00000000..a481b524 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/layout/Header.js @@ -0,0 +1,35 @@ +import Link from "next/link"; + +export default function Header() { + // If you want to see how to fetch a blog title from one particular site, + // check out the /examples/next/client-app-router-fetch-data/example-app/src/components/layout/Header.js file + const blogTitle = "My Headless Sample Multisite"; + const menuItemClass = "text-lg hover:underline focus:underline"; + + return ( +
+
+

+ + {blogTitle} + +

+ + +
+
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Movie.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Movie.js new file mode 100644 index 00000000..8d79d697 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Movie.js @@ -0,0 +1,76 @@ +import { FeaturedImage } from "../image/FeaturedImage"; +import { Button } from "../button/Button"; + +export default function Movie({ data }) { + const { content, movieShowTimes, title, uri } = data; + const { daysOfTheWeek, screenTimes } = movieShowTimes || {}; + + const screenTimesArray = screenTimes + ? screenTimes.split(",").map((time) => time.trim()) + : []; + + return ( +
+
+

+ {title} +

+
+ + {daysOfTheWeek && ( +
+
+ + Showing on: + +
    + {daysOfTheWeek.map((day, index) => ( +
  • + {day} +
  • + ))} +
+
+
+ )} + + {daysOfTheWeek && screenTimesArray.length > 0 && ( +
+
+ + Screen Times: + +
    + {screenTimesArray.map((time, index) => ( +
  • + {time} +
  • + ))} +
+
+
+ )} + + + +
+ +
+
+
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Page.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Page.js new file mode 100644 index 00000000..46056d2b --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Page.js @@ -0,0 +1,17 @@ +export default function Page({ data }) { + const { title, content } = data ?? {}; + + return ( +
+
+

+ {title} +

+
+
+
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Post.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Post.js new file mode 100644 index 00000000..887bc60a --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/components/single/Post.js @@ -0,0 +1,94 @@ +"use client"; + +import { FeaturedImage } from "../image/FeaturedImage"; +import { formatDate } from "@/lib/utils"; +import Comments from "../comment/Comments"; +import CommentForm from "../comment/CommentForm"; +import { useState } from "react"; +import { fetchGraphQL } from "@/lib/client"; + +const AddCommentToPostMutation = ` +mutation AddCommentToPostQuery($author: String!, $authorEmail: String!, $commentOn: Int!, $content: String! = "") { + createComment(input: { author: $author, authorEmail: $authorEmail, commentOn: $commentOn, content: $content }) { + success + } +}`; + +export default function Post({ data, siteKey }) { + const { title, author, content, date, comments, databaseId } = data ?? {}; + const commentsList = comments?.edges; + + const [commentStatus, setCommentStatus] = useState({ + loading: false, + error: null, + success: false, + }); + + const addComment = async (inputs) => { + setCommentStatus({ loading: true, error: null, success: false }); + + try { + const result = await fetchGraphQL(AddCommentToPostMutation, siteKey, { + ...inputs, + commentOn: databaseId, + }); + + if (result.errors) { + throw new Error( + result.errors[0]?.message || "Error submitting comment", + ); + } + + setCommentStatus({ + loading: false, + error: null, + success: result?.createComment?.success, + }); + } catch (error) { + setCommentStatus({ + loading: false, + error: error.message, + success: false, + }); + } + }; + + return ( +
+
+

+ {title} +

+ +

+ {"by "} + + {author?.node?.name} + + {" on "} + +

+ + +
+
+ + + +
+ ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/client.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/client.js new file mode 100644 index 00000000..f9d413cb --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/client.js @@ -0,0 +1,48 @@ +export async function fetchGraphQL( + query, + siteKey, + variables = {}, + revalidate = null, +) { + try { + const endpoint = process.env.WORDPRESS_SITES + ? JSON.parse(process.env.WORDPRESS_SITES)[siteKey] + : null; + + if (!endpoint) { + throw new Error(`Endpoint for site "${siteKey}" not found.`); + } + + const fetchOptions = { + method: "POST", + headers: { + "Content-Type": "application/json", + }, + body: JSON.stringify({ + query, + variables, + }), + }; + + // Revalidate with ISR if revalidate is set + if (revalidate !== null) { + fetchOptions.next = { + revalidate: revalidate, + }; + } + + const response = await fetch(endpoint, fetchOptions); + + const result = await response.json(); + + if (result.errors) { + console.error("GraphQL Error:", result.errors); + throw new Error("Failed to fetch data from WordPress"); + } + + return result.data; + } catch (error) { + console.error("Error fetching from WordPress:", error); + throw error; + } +} diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/MovieListFragment.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/MovieListFragment.js new file mode 100644 index 00000000..f7cc852e --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/MovieListFragment.js @@ -0,0 +1,18 @@ +export const MovieListFragment = ` +fragment MovieListFragment on Movie { + id + title + uri + content + featuredImage { + node { + sourceUrl + altText + } + } + movieShowTimes { + daysOfTheWeek + screenTimes + } +} +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/PostListFragment.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/PostListFragment.js new file mode 100644 index 00000000..93997704 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/PostListFragment.js @@ -0,0 +1,23 @@ +export const PostListFragment = ` + fragment PostListFragment on Post { + id + title + uri + excerpt + date + featuredImage { + node { + sourceUrl + altText + } + } + author { + node { + name + avatar { + url + } + } + } + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SingleMovieFragment.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SingleMovieFragment.js new file mode 100644 index 00000000..be34222c --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SingleMovieFragment.js @@ -0,0 +1,18 @@ +export const SingleMovieFragment = ` + fragment SingleMovieFragment on Movie { + id + title + uri + content + featuredImage { + node { + sourceUrl + altText + } + } + movieShowTimes { + daysOfTheWeek + screenTimes + } + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SinglePageFragment.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SinglePageFragment.js new file mode 100644 index 00000000..a66f206b --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SinglePageFragment.js @@ -0,0 +1,6 @@ +export const SinglePageFragment = ` + fragment SinglePageFragment on Page { + title + content + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SinglePostFragment.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SinglePostFragment.js new file mode 100644 index 00000000..80f62e0a --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/fragments/SinglePostFragment.js @@ -0,0 +1,39 @@ +export const SinglePostFragment = ` + fragment Comment on Comment { + id + content + date + author { + node { + name + } + } + } + fragment SinglePostFragment on Post { + __typename + id + databaseId + date + uri + content + title + featuredImage { + node { + sourceUrl + altText + } + } + comments { + edges { + node { + ...Comment + } + } + } + author { + node { + name + } + } + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/CategoryListQuery.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/CategoryListQuery.js new file mode 100644 index 00000000..78c55063 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/CategoryListQuery.js @@ -0,0 +1,17 @@ +import { PostListFragment } from "@/lib/fragments/PostListFragment"; +export const CategoryListQuery = ` + ${PostListFragment} + query ListPostsForCategory($slug: String!, $after: String, $first: Int = 5) { + posts(where: { categoryName: $slug }, after: $after, first: $first) { + edges { + node { + ...PostListFragment + } + } + pageInfo { + hasNextPage + endCursor + } + } + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/CinemaListingsQuery.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/CinemaListingsQuery.js new file mode 100644 index 00000000..93f58ae0 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/CinemaListingsQuery.js @@ -0,0 +1,19 @@ +import { MovieListFragment } from "@/lib/fragments/MovieListFragment"; + +export const CinemaListingsQuery = ` +${MovieListFragment} +query GetCinemaListings($after: String, $first: Int = 5) { + movies(where: {status: PUBLISH}, after: $after, first: $first) { + edges { + node { + ...MovieListFragment + } + cursor + } + pageInfo { + hasNextPage + endCursor + } + } +} +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/HomeCinemaListingsQuery.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/HomeCinemaListingsQuery.js new file mode 100644 index 00000000..532b6230 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/HomeCinemaListingsQuery.js @@ -0,0 +1,27 @@ +export const HomeCinemaListingsQuery = ` +fragment MovieListFragment on Movie { + id + title + uri + featuredImage { + node { + sourceUrl + altText + } + } + movieShowTimes { + daysOfTheWeek + screenTimes + } +} +query GetCinemaListings($after: String, $first: Int = 5) { + movies(where: {status: PUBLISH}, after: $after, first: $first) { + edges { + node { + ...MovieListFragment + } + cursor + } + } +} +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/HomePostListQuery.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/HomePostListQuery.js new file mode 100644 index 00000000..89339f50 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/HomePostListQuery.js @@ -0,0 +1,31 @@ +export const HomePostListQuery = ` + fragment PostListFragment on Post { + id + title + uri + date + featuredImage { + node { + sourceUrl + altText + } + } + author { + node { + name + avatar { + url + } + } + } + } + query ListPosts($after: String, $first: Int = 5) { + posts(after: $after, first: $first) { + edges { + node { + ...PostListFragment + } + } + } + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/NodeByUriQuery.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/NodeByUriQuery.js new file mode 100644 index 00000000..22e732e2 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/NodeByUriQuery.js @@ -0,0 +1,37 @@ +import { SinglePageFragment } from "@/lib/fragments/SinglePageFragment"; +import { SinglePostFragment } from "@/lib/fragments/SinglePostFragment"; +import { SingleMovieFragment } from "@/lib/fragments/SingleMovieFragment"; + +// Important Note: As not all sites have the same CPT, making a query for a CPT which doesn't exist for a site, will result in an error +// So instead we have an object with the key matching the siteKey defined in next.config.mjs + +// Note: Also it probably isn't efficient to do a catch-all query for all post types. See - https://www.wpgraphql.com/docs/performance#performance-best-practices +// For this example we wanted to demonstrate how to use a catch all for different CPTs + +// See WPGraphQL docs on nodeByUri: https://www.wpgraphql.com/2021/12/23/query-any-page-by-its-path-using-wpgraphql +export const NodeByUriQuery = { + main: ` + ${SinglePageFragment} + ${SinglePostFragment} + query GetNodeByUri($uri: String!) { + nodeByUri(uri: $uri) { + __typename + ...SinglePageFragment + ...SinglePostFragment + } + } + `, + movie_site: ` + ${SinglePageFragment} + ${SinglePostFragment} + ${SingleMovieFragment} + query GetNodeByUri($uri: String!) { + nodeByUri(uri: $uri) { + __typename + ...SinglePageFragment + ...SinglePostFragment + ...SingleMovieFragment + } + } +`, +}; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/PostListQuery.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/PostListQuery.js new file mode 100644 index 00000000..d7149223 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/PostListQuery.js @@ -0,0 +1,17 @@ +import { PostListFragment } from "@/lib/fragments/PostListFragment"; +export const PostListQuery = ` + ${PostListFragment} + query ListPosts($after: String, $first: Int = 5) { + posts(after: $after, first: $first) { + edges { + node { + ...PostListFragment + } + } + pageInfo { + hasNextPage + endCursor + } + } + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/TagListQuery.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/TagListQuery.js new file mode 100644 index 00000000..c96dfe58 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/queries/TagListQuery.js @@ -0,0 +1,17 @@ +import { PostListFragment } from "@/lib/fragments/PostListFragment"; +export const TagListQuery = ` + ${PostListFragment} + query ListPostsForTag($slug: String!, $after: String, $first: Int = 5) { + posts(where: { tag: $slug }, after: $after, first: $first) { + edges { + node { + ...PostListFragment + } + } + pageInfo { + hasNextPage + endCursor + } + } + } +`; diff --git a/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/utils.js b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/utils.js new file mode 100644 index 00000000..0f6e98f6 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/example-app/src/lib/utils.js @@ -0,0 +1,58 @@ +import getConfig from "next/config"; +import { fetchGraphQL } from "../lib/client"; + +export function formatDate(dateString) { + const date = new Date(dateString); + return date.toLocaleDateString("en-US", { + year: "numeric", + month: "long", + day: "numeric", + }); +} + +export function capitalizeWords(str) { + if (!str) return ""; + return str + .toString() + .split("-") + .map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase()) + .join(" ") + .replace(/\b\w/g, (char) => char.toUpperCase()); +} + +export async function getPosts({ + query, + siteKey, + slug = "", + pageSize = 10, + after = null, + revalidate = false, +}) { + if (!slug) { + return await fetchGraphQL(query, siteKey, { + first: pageSize, + after, + }); + } + + const querySlug = typeof slug === "string" ? slug : String(slug); + return await fetchGraphQL(query, siteKey, { + slug: querySlug, + first: pageSize, + after, + revalidate, + }); +} + +export function getPostsPerPage() { + const { publicRuntimeConfig } = getConfig() || {}; + return publicRuntimeConfig?.wordPressDisplaySettings?.postsPerPage || 10; +} + +export function createExcerpt(content, length = 150) { + if (!content) return ""; + return ( + content.replace(/<[^>]*>/g, "").substring(0, length) + + (content.length > length ? "..." : "") + ); +} diff --git a/examples/next/client-multisite-app-router-fetch-data/llms.txt b/examples/next/client-multisite-app-router-fetch-data/llms.txt new file mode 100644 index 00000000..25935edd --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/llms.txt @@ -0,0 +1,110 @@ +# WP Engine Headless WordPress Multisite Example (Next.js App Router + WPGraphQL) + +This project demonstrates a headless WordPress multisite implementation using Next.js App Router and the fetch API for data retrieval through WPGraphQL. It showcases different data fetching strategies, state management techniques, and modern web development patterns in a real-world application context. + +## Key Features + +### Next.js Rendering Patterns +- Server-Side Rendering (SSR) for dynamic pages +- Static Site Generation (SSG) for static pages +- Client-Side Rendering (CSR) for blog settings +- Hybrid data fetching combining SSR and CSR + +### Multisite Integration +- Dynamic site management in next.config.mjs +- Site-key based data fetching from multiple WordPress instances +- Homepage aggregation of content from multiple sites in the network +- Catch-all template that searches across all sites for content + +### WordPress Content Handling +- Blog post listings with pagination +- Content retrieval using WPGraphQL's nodeByUri resolver +- Static page fetching at build time +- Comment system with submission functionality +- Dynamic header with blog title +- Featured image support +- Category and tag blog post filtering + +### Additional Template Features +- Reusable page templates +- Custom Post Type (CPT) templates for specialized content +- ACF (Advanced Custom Fields) integration for custom meta fields + +## Technical Implementation + +### Data Fetching Architecture +This example uses the native fetch API to retrieve data from WordPress via WPGraphQL. The multisite configuration allows fetching data from different sites using a site key defined in the Next.js configuration. + +### Site Configuration +The multisite setup is configured in next.config.mjs: +```javascript +// Example configuration +WORDPRESS_SITES: JSON.stringify({ + main: process.env.NEXT_PUBLIC_WORDPRESS_URL + "/graphql", + movie_site: process.env.NEXT_PUBLIC_MOVIE_WORDPRESS_URL + "/graphql", + // Additional sites as needed +}), +``` + +### Content Routing +The application implements: +- Site-specific routes and templates +- A catch-all route that searches across all sites +- Content type detection for appropriate component rendering + +### WordPress Configuration +The example integrates with a WordPress multisite installation configured with: +- WPGraphQL for API access +- Custom post types registered for specialized content +- ACF for extended meta fields + +## Getting Started + +### Prerequisites +- Node.js (v18+) +- pnpm package manager +- Docker for local WordPress development + +### Local Development Setup +1. Clone the repository +2. Install dependencies with `pnpm install` +3. Configure environment variables for WordPress URLs +4. Run the dev script with `pnpm example:build` + +### Environment Configuration +Create a .env file with the following variables: +``` +NEXT_PUBLIC_WORDPRESS_URL=http://localhost:8888 +NEXT_PUBLIC_MOVIE_WORDPRESS_URL=http://localhost:8888/movies +# Add additional sites as needed +``` + +## Expanding the Example + +### Adding New Sites +1. Add the site URL to your .env file +2. Update next.config.mjs with the new site key +3. Create templates that reference the site key for data fetching + +### Creating New Templates +Templates can be created for specific content types or sites by: +1. Creating a query file in lib/queries +2. Implementing a page component that uses the query +3. Referencing the appropriate site key for data retrieval + +## Best Practices + +### Performance Optimization +- Implement appropriate caching strategies based on content update frequency +- Use static generation for relatively stable content +- Implement pagination for large content collections + +### WordPress Configuration +- Use WPGraphQL fragments for optimized queries +- Configure CORS headers for cross-domain requests +- Set up proper cache headers for API responses + +### Frontend Development +- Create reusable components for content rendering +- Implement responsive designs for all templates +- Use proper SEO metadata for each page diff --git a/examples/next/client-multisite-app-router-fetch-data/package.json b/examples/next/client-multisite-app-router-fetch-data/package.json new file mode 100644 index 00000000..8da527c8 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/package.json @@ -0,0 +1,66 @@ +{ + "name": "hwptoolkit-example-multisite-app-router-fetch-data", + "version": "1.0.0", + "description": "An example multisite WordPress application using Next.js App Router and the fetch API to fetch data from WordPress using WPGraphQL. Designed with clear patterns for AI tool compatibility.", + "scripts": { + "// Setup Commands": "Commands for setting up and building the example", + "example:build": "pnpm run wp:images:unzip && pnpm run example:dev:install && pnpm run wp:start && pnpm run wp:db:import && pnpm run example:start", + "example:dev:install": "cd example-app && npm install && cd ..", + "example:start": "pnpm run wp:start && pnpm run wp:multisite:set:variables && pnpm run example:dev", + "example:dev": "pnpm --dir ./example-app dev", + + "// WordPress Environment Commands": "Commands for managing the WordPress environment", + "wp:start": "pnpm wp-env start", + "wp:stop": "wp-env stop", + "wp:destroy": "wp-env destroy --config ./wp-env/wp-env.json", + "example:stop": "pnpm run wp:stop", + "example:prune": "wp-env destroy && pnpm run example:build && pnpm run example:start", + + "// WordPress Multisite Configuration": "Commands for configuring WordPress multisite", + "wp:multisite:set:variables": "wp-env run cli -- wp config set WP_ALLOW_MULTISITE true --raw && wp-env run cli -- wp config set MULTISITE true --raw && wp-env run cli -- wp config set SUBDOMAIN_INSTALL false --raw && wp-env run cli -- wp config set DOMAIN_CURRENT_SITE localhost:8888 && wp-env run cli -- wp config set PATH_CURRENT_SITE / && wp-env run cli -- wp config set SITE_ID_CURRENT_SITE 1 --raw && wp-env run cli -- wp config set BLOG_ID_CURRENT_SITE 1 --raw", + + "// Database Management": "Commands for managing the WordPress database", + "wp:db:query": "wp-env run cli -- wp db query", + "wp:db:export": "wp-env run cli -- wp db export /var/www/html/db/database.sql", + "wp:db:import": "wp-env run cli -- wp db import /var/www/html/db/database.sql", + + "// Asset Management": "Commands for managing WordPress uploads and assets", + "wp:images:unzip": "rm -rf wp-env/uploads/ && unzip wp-env/uploads.zip -d wp-env;", + "wp:images:zip": "zip -r wp-env/uploads.zip wp-env/uploads" + }, + "keywords": [ + "headless", + "wordpress", + "nextjs", + "fetch", + "fullstack", + "headless-cms", + "wpgraphql", + "rest-api", + "headless-wordpress", + "nextjs-app-router", + "nextjs-data-fetching", + "wordpress-headless-starter", + "wp-env-configuration", + "local-development", + "fullstack-example", + "wordpress-api", + "wordpress-database", + "ai-friendly", + "llm-compatible", + "code-assistant-ready", + "multisite", + "wordpress-multisite", + "structured-data" + ], + "author": "hwptoolkit", + "license": "BSD-3-Clause", + "dependencies": { + "@wordpress/env": "^10.20.0" + }, + "repository": { + "type": "git", + "url": "https://github.com/wpengine/hwptoolkit.git" + }, + "documentationUrl": "https://github.com/wpengine/hwptoolkit/tree/main/examples/next/client-multisite-app-router-fetch-data#readme" +} \ No newline at end of file diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/db/database.sql b/examples/next/client-multisite-app-router-fetch-data/wp-env/db/database.sql new file mode 100644 index 00000000..00a8620b --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/wp-env/db/database.sql @@ -0,0 +1,913 @@ +-- MariaDB dump 10.19 Distrib 10.6.10-MariaDB, for Linux (aarch64) +-- +-- Host: mysql Database: wordpress +-- ------------------------------------------------------ +-- Server version 11.7.2-MariaDB-ubu2404 + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +/*!40101 SET NAMES utf8 */; +/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; +/*!40103 SET TIME_ZONE='+00:00' */; +/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + +-- +-- Table structure for table `wp_2_commentmeta` +-- + +DROP TABLE IF EXISTS `wp_2_commentmeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_commentmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `comment_id` (`comment_id`), + KEY `meta_key` (`meta_key`(191)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_commentmeta` +-- + +LOCK TABLES `wp_2_commentmeta` WRITE; +/*!40000 ALTER TABLE `wp_2_commentmeta` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_2_commentmeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_comments` +-- + +DROP TABLE IF EXISTS `wp_2_comments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_comments` ( + `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT 0, + `comment_author` tinytext NOT NULL, + `comment_author_email` varchar(100) NOT NULL DEFAULT '', + `comment_author_url` varchar(200) NOT NULL DEFAULT '', + `comment_author_IP` varchar(100) NOT NULL DEFAULT '', + `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_content` text NOT NULL, + `comment_karma` int(11) NOT NULL DEFAULT 0, + `comment_approved` varchar(20) NOT NULL DEFAULT '1', + `comment_agent` varchar(255) NOT NULL DEFAULT '', + `comment_type` varchar(20) NOT NULL DEFAULT 'comment', + `comment_parent` bigint(20) unsigned NOT NULL DEFAULT 0, + `user_id` bigint(20) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`comment_ID`), + KEY `comment_post_ID` (`comment_post_ID`), + KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), + KEY `comment_date_gmt` (`comment_date_gmt`), + KEY `comment_parent` (`comment_parent`), + KEY `comment_author_email` (`comment_author_email`(10)) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_comments` +-- + +LOCK TABLES `wp_2_comments` WRITE; +/*!40000 ALTER TABLE `wp_2_comments` DISABLE KEYS */; +INSERT INTO `wp_2_comments` VALUES (1,1,'A WordPress Commenter','wapuu@wordpress.example','http://localhost:8888/','','2025-03-25 18:23:51','2025-03-25 18:23:51','Hi, this is a comment.\nTo get started with moderating, editing, and deleting comments, please visit the Comments screen in the dashboard.\nCommenter avatars come from Gravatar.',0,'1','','comment',0,0); +/*!40000 ALTER TABLE `wp_2_comments` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_links` +-- + +DROP TABLE IF EXISTS `wp_2_links`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_links` ( + `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `link_url` varchar(255) NOT NULL DEFAULT '', + `link_name` varchar(255) NOT NULL DEFAULT '', + `link_image` varchar(255) NOT NULL DEFAULT '', + `link_target` varchar(25) NOT NULL DEFAULT '', + `link_description` varchar(255) NOT NULL DEFAULT '', + `link_visible` varchar(20) NOT NULL DEFAULT 'Y', + `link_owner` bigint(20) unsigned NOT NULL DEFAULT 1, + `link_rating` int(11) NOT NULL DEFAULT 0, + `link_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `link_rel` varchar(255) NOT NULL DEFAULT '', + `link_notes` mediumtext NOT NULL, + `link_rss` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`link_id`), + KEY `link_visible` (`link_visible`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_links` +-- + +LOCK TABLES `wp_2_links` WRITE; +/*!40000 ALTER TABLE `wp_2_links` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_2_links` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_options` +-- + +DROP TABLE IF EXISTS `wp_2_options`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_options` ( + `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `option_name` varchar(191) NOT NULL DEFAULT '', + `option_value` longtext NOT NULL, + `autoload` varchar(20) NOT NULL DEFAULT 'yes', + PRIMARY KEY (`option_id`), + UNIQUE KEY `option_name` (`option_name`), + KEY `autoload` (`autoload`) +) ENGINE=InnoDB AUTO_INCREMENT=189 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_options` +-- + +LOCK TABLES `wp_2_options` WRITE; +/*!40000 ALTER TABLE `wp_2_options` DISABLE KEYS */; +INSERT INTO `wp_2_options` VALUES (1,'siteurl','http://localhost:8888/movies','on'),(2,'home','http://localhost:8888/movies','on'),(3,'blogname','Sample Cinema Listings Headless Site','on'),(4,'blogdescription','This is an example site for https://github.com/wpengine/hwptoolkit','on'),(5,'users_can_register','0','on'),(6,'admin_email','wordpress@example.com','on'),(7,'start_of_week','1','on'),(8,'use_balanceTags','0','on'),(9,'use_smilies','1','on'),(10,'require_name_email','1','on'),(11,'comments_notify','1','on'),(12,'posts_per_rss','10','on'),(13,'rss_use_excerpt','0','on'),(14,'mailserver_url','mail.example.com','on'),(15,'mailserver_login','login@example.com','on'),(16,'mailserver_pass','','on'),(17,'mailserver_port','110','on'),(18,'default_category','1','on'),(19,'default_comment_status','open','on'),(20,'default_ping_status','open','on'),(21,'default_pingback_flag','1','on'),(22,'posts_per_page','10','on'),(23,'date_format','F j, Y','on'),(24,'time_format','g:i a','on'),(25,'links_updated_date_format','F j, Y g:i a','on'),(26,'comment_moderation','','on'),(27,'moderation_notify','1','on'),(28,'permalink_structure','/%postname%/','on'),(30,'hack_file','0','on'),(31,'blog_charset','UTF-8','on'),(32,'moderation_keys','','off'),(33,'active_plugins','a:6:{i:0;s:37:\"advanced-custom-fields-6.3.12/acf.php\";i:1;s:41:\"wordpress-importer/wordpress-importer.php\";i:2;s:55:\"wp-graphql-content-blocks/wp-graphql-content-blocks.php\";i:3;s:25:\"wp-graphql/wp-graphql.php\";i:4;s:31:\"wpgraphql-acf/wpgraphql-acf.php\";i:5;s:31:\"wpgraphql-ide/wpgraphql-ide.php\";}','on'),(34,'category_base','','on'),(35,'ping_sites','http://rpc.pingomatic.com/','on'),(36,'comment_max_links','2','on'),(37,'gmt_offset','0','on'),(38,'default_email_category','1','on'),(39,'recently_edited','','off'),(40,'template','twentytwentyfive','on'),(41,'stylesheet','twentytwentyfive','on'),(42,'comment_registration','','on'),(43,'html_type','text/html','on'),(44,'use_trackback','0','on'),(45,'default_role','subscriber','on'),(46,'db_version','58975','on'),(47,'uploads_use_yearmonth_folders','1','on'),(48,'upload_path','','on'),(49,'blog_public','1','on'),(50,'default_link_category','2','on'),(51,'show_on_front','page','on'),(52,'tag_base','','on'),(53,'show_avatars','1','on'),(54,'avatar_rating','G','on'),(55,'upload_url_path','','on'),(56,'thumbnail_size_w','150','on'),(57,'thumbnail_size_h','150','on'),(58,'thumbnail_crop','1','on'),(59,'medium_size_w','300','on'),(60,'medium_size_h','300','on'),(61,'avatar_default','mystery','on'),(62,'large_size_w','1024','on'),(63,'large_size_h','1024','on'),(64,'image_default_link_type','none','on'),(65,'image_default_size','','on'),(66,'image_default_align','','on'),(67,'close_comments_for_old_posts','','on'),(68,'close_comments_days_old','14','on'),(69,'thread_comments','1','on'),(70,'thread_comments_depth','5','on'),(71,'page_comments','','on'),(72,'comments_per_page','50','on'),(73,'default_comments_page','newest','on'),(74,'comment_order','asc','on'),(75,'sticky_posts','a:0:{}','on'),(76,'widget_categories','a:0:{}','on'),(77,'widget_text','a:0:{}','on'),(78,'widget_rss','a:0:{}','on'),(79,'uninstall_plugins','a:0:{}','off'),(80,'timezone_string','','on'),(81,'page_for_posts','0','on'),(82,'page_on_front','2','on'),(83,'default_post_format','0','on'),(84,'link_manager_enabled','0','on'),(85,'finished_splitting_shared_terms','1','on'),(86,'site_icon','0','on'),(87,'medium_large_size_w','768','on'),(88,'medium_large_size_h','0','on'),(89,'wp_page_for_privacy_policy','0','on'),(90,'show_comments_cookies_opt_in','1','on'),(91,'admin_email_lifespan','1758479031','on'),(92,'disallowed_keys','','off'),(93,'comment_previously_approved','1','on'),(94,'auto_plugin_theme_update_emails','a:0:{}','off'),(95,'auto_update_core_dev','enabled','on'),(96,'auto_update_core_minor','enabled','on'),(97,'auto_update_core_major','enabled','on'),(98,'wp_force_deactivated_plugins','a:0:{}','on'),(99,'wp_attachment_pages_enabled','0','on'),(100,'WPLANG','','on'),(101,'wp_2_user_roles','a:5:{s:13:\"administrator\";a:2:{s:4:\"name\";s:13:\"Administrator\";s:12:\"capabilities\";a:62:{s:13:\"switch_themes\";b:1;s:11:\"edit_themes\";b:1;s:16:\"activate_plugins\";b:1;s:12:\"edit_plugins\";b:1;s:10:\"edit_users\";b:1;s:10:\"edit_files\";b:1;s:14:\"manage_options\";b:1;s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:6:\"import\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:8:\"level_10\";b:1;s:7:\"level_9\";b:1;s:7:\"level_8\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:12:\"delete_users\";b:1;s:12:\"create_users\";b:1;s:17:\"unfiltered_upload\";b:1;s:14:\"edit_dashboard\";b:1;s:14:\"update_plugins\";b:1;s:14:\"delete_plugins\";b:1;s:15:\"install_plugins\";b:1;s:13:\"update_themes\";b:1;s:14:\"install_themes\";b:1;s:11:\"update_core\";b:1;s:10:\"list_users\";b:1;s:12:\"remove_users\";b:1;s:13:\"promote_users\";b:1;s:18:\"edit_theme_options\";b:1;s:13:\"delete_themes\";b:1;s:6:\"export\";b:1;s:18:\"manage_graphql_ide\";b:1;}}s:6:\"editor\";a:2:{s:4:\"name\";s:6:\"Editor\";s:12:\"capabilities\";a:34:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;}}s:6:\"author\";a:2:{s:4:\"name\";s:6:\"Author\";s:12:\"capabilities\";a:10:{s:12:\"upload_files\";b:1;s:10:\"edit_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;s:22:\"delete_published_posts\";b:1;}}s:11:\"contributor\";a:2:{s:4:\"name\";s:11:\"Contributor\";s:12:\"capabilities\";a:5:{s:10:\"edit_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;}}s:10:\"subscriber\";a:2:{s:4:\"name\";s:10:\"Subscriber\";s:12:\"capabilities\";a:2:{s:4:\"read\";b:1;s:7:\"level_0\";b:1;}}}','on'),(102,'post_count','1','on'),(103,'widget_block','a:6:{i:2;a:1:{s:7:\"content\";s:19:\"\";}i:3;a:1:{s:7:\"content\";s:154:\"

Recent Posts

\";}i:4;a:1:{s:7:\"content\";s:227:\"

Recent Comments

\";}i:5;a:1:{s:7:\"content\";s:146:\"

Archives

\";}i:6;a:1:{s:7:\"content\";s:150:\"

Categories

\";}s:12:\"_multiwidget\";i:1;}','auto'),(104,'sidebars_widgets','a:4:{s:19:\"wp_inactive_widgets\";a:0:{}s:9:\"sidebar-1\";a:3:{i:0;s:7:\"block-2\";i:1;s:7:\"block-3\";i:2;s:7:\"block-4\";}s:9:\"sidebar-2\";a:2:{i:0;s:7:\"block-5\";i:1;s:7:\"block-6\";}s:13:\"array_version\";i:3;}','auto'),(105,'cron','a:9:{i:1742928327;a:4:{s:34:\"wp_privacy_delete_old_export_files\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}s:19:\"wp_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:25:\"delete_expired_transients\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:30:\"wp_scheduled_auto_draft_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1742928387;a:1:{s:28:\"wp_update_comment_type_batch\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1742995723;a:1:{s:27:\"acf_update_site_health_data\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1742996048;a:1:{s:30:\"wp_delete_temp_updater_backups\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1742996835;a:1:{s:29:\"wp-graphql_tracker_send_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1742996838;a:1:{s:32:\"wpgraphql-acf_tracker_send_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1743014727;a:1:{s:30:\"wp_site_health_scheduled_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1743083720;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"9009088b2ab6f9f0dd1e36df2da38ce7\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:13;}}}}s:7:\"version\";i:2;}','on'),(106,'widget_pages','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(107,'widget_calendar','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(108,'widget_archives','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(109,'widget_media_audio','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(110,'widget_media_image','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(111,'widget_media_gallery','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(112,'widget_media_video','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(113,'widget_meta','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(114,'widget_search','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(115,'widget_recent-posts','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(116,'widget_recent-comments','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(117,'widget_tag_cloud','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(118,'widget_nav_menu','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(119,'widget_custom_html','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(120,'_transient_doing_cron','1743531724.4736840724945068359375','on'),(123,'_transient_timeout_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3','1743545620','off'),(124,'_transient_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3','1743502420','off'),(127,'_transient_timeout_feed_mod_d117b5738fbd35bd8c0391cda1f2b5d9','1743545621','off'),(128,'_transient_feed_mod_d117b5738fbd35bd8c0391cda1f2b5d9','1743502421','off'),(134,'_transient_wp_core_block_css_files','a:2:{s:7:\"version\";s:5:\"6.7.2\";s:5:\"files\";a:540:{i:0;s:23:\"archives/editor-rtl.css\";i:1;s:27:\"archives/editor-rtl.min.css\";i:2;s:19:\"archives/editor.css\";i:3;s:23:\"archives/editor.min.css\";i:4;s:22:\"archives/style-rtl.css\";i:5;s:26:\"archives/style-rtl.min.css\";i:6;s:18:\"archives/style.css\";i:7;s:22:\"archives/style.min.css\";i:8;s:20:\"audio/editor-rtl.css\";i:9;s:24:\"audio/editor-rtl.min.css\";i:10;s:16:\"audio/editor.css\";i:11;s:20:\"audio/editor.min.css\";i:12;s:19:\"audio/style-rtl.css\";i:13;s:23:\"audio/style-rtl.min.css\";i:14;s:15:\"audio/style.css\";i:15;s:19:\"audio/style.min.css\";i:16;s:19:\"audio/theme-rtl.css\";i:17;s:23:\"audio/theme-rtl.min.css\";i:18;s:15:\"audio/theme.css\";i:19;s:19:\"audio/theme.min.css\";i:20;s:21:\"avatar/editor-rtl.css\";i:21;s:25:\"avatar/editor-rtl.min.css\";i:22;s:17:\"avatar/editor.css\";i:23;s:21:\"avatar/editor.min.css\";i:24;s:20:\"avatar/style-rtl.css\";i:25;s:24:\"avatar/style-rtl.min.css\";i:26;s:16:\"avatar/style.css\";i:27;s:20:\"avatar/style.min.css\";i:28;s:21:\"button/editor-rtl.css\";i:29;s:25:\"button/editor-rtl.min.css\";i:30;s:17:\"button/editor.css\";i:31;s:21:\"button/editor.min.css\";i:32;s:20:\"button/style-rtl.css\";i:33;s:24:\"button/style-rtl.min.css\";i:34;s:16:\"button/style.css\";i:35;s:20:\"button/style.min.css\";i:36;s:22:\"buttons/editor-rtl.css\";i:37;s:26:\"buttons/editor-rtl.min.css\";i:38;s:18:\"buttons/editor.css\";i:39;s:22:\"buttons/editor.min.css\";i:40;s:21:\"buttons/style-rtl.css\";i:41;s:25:\"buttons/style-rtl.min.css\";i:42;s:17:\"buttons/style.css\";i:43;s:21:\"buttons/style.min.css\";i:44;s:22:\"calendar/style-rtl.css\";i:45;s:26:\"calendar/style-rtl.min.css\";i:46;s:18:\"calendar/style.css\";i:47;s:22:\"calendar/style.min.css\";i:48;s:25:\"categories/editor-rtl.css\";i:49;s:29:\"categories/editor-rtl.min.css\";i:50;s:21:\"categories/editor.css\";i:51;s:25:\"categories/editor.min.css\";i:52;s:24:\"categories/style-rtl.css\";i:53;s:28:\"categories/style-rtl.min.css\";i:54;s:20:\"categories/style.css\";i:55;s:24:\"categories/style.min.css\";i:56;s:19:\"code/editor-rtl.css\";i:57;s:23:\"code/editor-rtl.min.css\";i:58;s:15:\"code/editor.css\";i:59;s:19:\"code/editor.min.css\";i:60;s:18:\"code/style-rtl.css\";i:61;s:22:\"code/style-rtl.min.css\";i:62;s:14:\"code/style.css\";i:63;s:18:\"code/style.min.css\";i:64;s:18:\"code/theme-rtl.css\";i:65;s:22:\"code/theme-rtl.min.css\";i:66;s:14:\"code/theme.css\";i:67;s:18:\"code/theme.min.css\";i:68;s:22:\"columns/editor-rtl.css\";i:69;s:26:\"columns/editor-rtl.min.css\";i:70;s:18:\"columns/editor.css\";i:71;s:22:\"columns/editor.min.css\";i:72;s:21:\"columns/style-rtl.css\";i:73;s:25:\"columns/style-rtl.min.css\";i:74;s:17:\"columns/style.css\";i:75;s:21:\"columns/style.min.css\";i:76;s:33:\"comment-author-name/style-rtl.css\";i:77;s:37:\"comment-author-name/style-rtl.min.css\";i:78;s:29:\"comment-author-name/style.css\";i:79;s:33:\"comment-author-name/style.min.css\";i:80;s:29:\"comment-content/style-rtl.css\";i:81;s:33:\"comment-content/style-rtl.min.css\";i:82;s:25:\"comment-content/style.css\";i:83;s:29:\"comment-content/style.min.css\";i:84;s:26:\"comment-date/style-rtl.css\";i:85;s:30:\"comment-date/style-rtl.min.css\";i:86;s:22:\"comment-date/style.css\";i:87;s:26:\"comment-date/style.min.css\";i:88;s:31:\"comment-edit-link/style-rtl.css\";i:89;s:35:\"comment-edit-link/style-rtl.min.css\";i:90;s:27:\"comment-edit-link/style.css\";i:91;s:31:\"comment-edit-link/style.min.css\";i:92;s:32:\"comment-reply-link/style-rtl.css\";i:93;s:36:\"comment-reply-link/style-rtl.min.css\";i:94;s:28:\"comment-reply-link/style.css\";i:95;s:32:\"comment-reply-link/style.min.css\";i:96;s:30:\"comment-template/style-rtl.css\";i:97;s:34:\"comment-template/style-rtl.min.css\";i:98;s:26:\"comment-template/style.css\";i:99;s:30:\"comment-template/style.min.css\";i:100;s:42:\"comments-pagination-numbers/editor-rtl.css\";i:101;s:46:\"comments-pagination-numbers/editor-rtl.min.css\";i:102;s:38:\"comments-pagination-numbers/editor.css\";i:103;s:42:\"comments-pagination-numbers/editor.min.css\";i:104;s:34:\"comments-pagination/editor-rtl.css\";i:105;s:38:\"comments-pagination/editor-rtl.min.css\";i:106;s:30:\"comments-pagination/editor.css\";i:107;s:34:\"comments-pagination/editor.min.css\";i:108;s:33:\"comments-pagination/style-rtl.css\";i:109;s:37:\"comments-pagination/style-rtl.min.css\";i:110;s:29:\"comments-pagination/style.css\";i:111;s:33:\"comments-pagination/style.min.css\";i:112;s:29:\"comments-title/editor-rtl.css\";i:113;s:33:\"comments-title/editor-rtl.min.css\";i:114;s:25:\"comments-title/editor.css\";i:115;s:29:\"comments-title/editor.min.css\";i:116;s:23:\"comments/editor-rtl.css\";i:117;s:27:\"comments/editor-rtl.min.css\";i:118;s:19:\"comments/editor.css\";i:119;s:23:\"comments/editor.min.css\";i:120;s:22:\"comments/style-rtl.css\";i:121;s:26:\"comments/style-rtl.min.css\";i:122;s:18:\"comments/style.css\";i:123;s:22:\"comments/style.min.css\";i:124;s:20:\"cover/editor-rtl.css\";i:125;s:24:\"cover/editor-rtl.min.css\";i:126;s:16:\"cover/editor.css\";i:127;s:20:\"cover/editor.min.css\";i:128;s:19:\"cover/style-rtl.css\";i:129;s:23:\"cover/style-rtl.min.css\";i:130;s:15:\"cover/style.css\";i:131;s:19:\"cover/style.min.css\";i:132;s:22:\"details/editor-rtl.css\";i:133;s:26:\"details/editor-rtl.min.css\";i:134;s:18:\"details/editor.css\";i:135;s:22:\"details/editor.min.css\";i:136;s:21:\"details/style-rtl.css\";i:137;s:25:\"details/style-rtl.min.css\";i:138;s:17:\"details/style.css\";i:139;s:21:\"details/style.min.css\";i:140;s:20:\"embed/editor-rtl.css\";i:141;s:24:\"embed/editor-rtl.min.css\";i:142;s:16:\"embed/editor.css\";i:143;s:20:\"embed/editor.min.css\";i:144;s:19:\"embed/style-rtl.css\";i:145;s:23:\"embed/style-rtl.min.css\";i:146;s:15:\"embed/style.css\";i:147;s:19:\"embed/style.min.css\";i:148;s:19:\"embed/theme-rtl.css\";i:149;s:23:\"embed/theme-rtl.min.css\";i:150;s:15:\"embed/theme.css\";i:151;s:19:\"embed/theme.min.css\";i:152;s:19:\"file/editor-rtl.css\";i:153;s:23:\"file/editor-rtl.min.css\";i:154;s:15:\"file/editor.css\";i:155;s:19:\"file/editor.min.css\";i:156;s:18:\"file/style-rtl.css\";i:157;s:22:\"file/style-rtl.min.css\";i:158;s:14:\"file/style.css\";i:159;s:18:\"file/style.min.css\";i:160;s:23:\"footnotes/style-rtl.css\";i:161;s:27:\"footnotes/style-rtl.min.css\";i:162;s:19:\"footnotes/style.css\";i:163;s:23:\"footnotes/style.min.css\";i:164;s:23:\"freeform/editor-rtl.css\";i:165;s:27:\"freeform/editor-rtl.min.css\";i:166;s:19:\"freeform/editor.css\";i:167;s:23:\"freeform/editor.min.css\";i:168;s:22:\"gallery/editor-rtl.css\";i:169;s:26:\"gallery/editor-rtl.min.css\";i:170;s:18:\"gallery/editor.css\";i:171;s:22:\"gallery/editor.min.css\";i:172;s:21:\"gallery/style-rtl.css\";i:173;s:25:\"gallery/style-rtl.min.css\";i:174;s:17:\"gallery/style.css\";i:175;s:21:\"gallery/style.min.css\";i:176;s:21:\"gallery/theme-rtl.css\";i:177;s:25:\"gallery/theme-rtl.min.css\";i:178;s:17:\"gallery/theme.css\";i:179;s:21:\"gallery/theme.min.css\";i:180;s:20:\"group/editor-rtl.css\";i:181;s:24:\"group/editor-rtl.min.css\";i:182;s:16:\"group/editor.css\";i:183;s:20:\"group/editor.min.css\";i:184;s:19:\"group/style-rtl.css\";i:185;s:23:\"group/style-rtl.min.css\";i:186;s:15:\"group/style.css\";i:187;s:19:\"group/style.min.css\";i:188;s:19:\"group/theme-rtl.css\";i:189;s:23:\"group/theme-rtl.min.css\";i:190;s:15:\"group/theme.css\";i:191;s:19:\"group/theme.min.css\";i:192;s:21:\"heading/style-rtl.css\";i:193;s:25:\"heading/style-rtl.min.css\";i:194;s:17:\"heading/style.css\";i:195;s:21:\"heading/style.min.css\";i:196;s:19:\"html/editor-rtl.css\";i:197;s:23:\"html/editor-rtl.min.css\";i:198;s:15:\"html/editor.css\";i:199;s:19:\"html/editor.min.css\";i:200;s:20:\"image/editor-rtl.css\";i:201;s:24:\"image/editor-rtl.min.css\";i:202;s:16:\"image/editor.css\";i:203;s:20:\"image/editor.min.css\";i:204;s:19:\"image/style-rtl.css\";i:205;s:23:\"image/style-rtl.min.css\";i:206;s:15:\"image/style.css\";i:207;s:19:\"image/style.min.css\";i:208;s:19:\"image/theme-rtl.css\";i:209;s:23:\"image/theme-rtl.min.css\";i:210;s:15:\"image/theme.css\";i:211;s:19:\"image/theme.min.css\";i:212;s:29:\"latest-comments/style-rtl.css\";i:213;s:33:\"latest-comments/style-rtl.min.css\";i:214;s:25:\"latest-comments/style.css\";i:215;s:29:\"latest-comments/style.min.css\";i:216;s:27:\"latest-posts/editor-rtl.css\";i:217;s:31:\"latest-posts/editor-rtl.min.css\";i:218;s:23:\"latest-posts/editor.css\";i:219;s:27:\"latest-posts/editor.min.css\";i:220;s:26:\"latest-posts/style-rtl.css\";i:221;s:30:\"latest-posts/style-rtl.min.css\";i:222;s:22:\"latest-posts/style.css\";i:223;s:26:\"latest-posts/style.min.css\";i:224;s:18:\"list/style-rtl.css\";i:225;s:22:\"list/style-rtl.min.css\";i:226;s:14:\"list/style.css\";i:227;s:18:\"list/style.min.css\";i:228;s:22:\"loginout/style-rtl.css\";i:229;s:26:\"loginout/style-rtl.min.css\";i:230;s:18:\"loginout/style.css\";i:231;s:22:\"loginout/style.min.css\";i:232;s:25:\"media-text/editor-rtl.css\";i:233;s:29:\"media-text/editor-rtl.min.css\";i:234;s:21:\"media-text/editor.css\";i:235;s:25:\"media-text/editor.min.css\";i:236;s:24:\"media-text/style-rtl.css\";i:237;s:28:\"media-text/style-rtl.min.css\";i:238;s:20:\"media-text/style.css\";i:239;s:24:\"media-text/style.min.css\";i:240;s:19:\"more/editor-rtl.css\";i:241;s:23:\"more/editor-rtl.min.css\";i:242;s:15:\"more/editor.css\";i:243;s:19:\"more/editor.min.css\";i:244;s:30:\"navigation-link/editor-rtl.css\";i:245;s:34:\"navigation-link/editor-rtl.min.css\";i:246;s:26:\"navigation-link/editor.css\";i:247;s:30:\"navigation-link/editor.min.css\";i:248;s:29:\"navigation-link/style-rtl.css\";i:249;s:33:\"navigation-link/style-rtl.min.css\";i:250;s:25:\"navigation-link/style.css\";i:251;s:29:\"navigation-link/style.min.css\";i:252;s:33:\"navigation-submenu/editor-rtl.css\";i:253;s:37:\"navigation-submenu/editor-rtl.min.css\";i:254;s:29:\"navigation-submenu/editor.css\";i:255;s:33:\"navigation-submenu/editor.min.css\";i:256;s:25:\"navigation/editor-rtl.css\";i:257;s:29:\"navigation/editor-rtl.min.css\";i:258;s:21:\"navigation/editor.css\";i:259;s:25:\"navigation/editor.min.css\";i:260;s:24:\"navigation/style-rtl.css\";i:261;s:28:\"navigation/style-rtl.min.css\";i:262;s:20:\"navigation/style.css\";i:263;s:24:\"navigation/style.min.css\";i:264;s:23:\"nextpage/editor-rtl.css\";i:265;s:27:\"nextpage/editor-rtl.min.css\";i:266;s:19:\"nextpage/editor.css\";i:267;s:23:\"nextpage/editor.min.css\";i:268;s:24:\"page-list/editor-rtl.css\";i:269;s:28:\"page-list/editor-rtl.min.css\";i:270;s:20:\"page-list/editor.css\";i:271;s:24:\"page-list/editor.min.css\";i:272;s:23:\"page-list/style-rtl.css\";i:273;s:27:\"page-list/style-rtl.min.css\";i:274;s:19:\"page-list/style.css\";i:275;s:23:\"page-list/style.min.css\";i:276;s:24:\"paragraph/editor-rtl.css\";i:277;s:28:\"paragraph/editor-rtl.min.css\";i:278;s:20:\"paragraph/editor.css\";i:279;s:24:\"paragraph/editor.min.css\";i:280;s:23:\"paragraph/style-rtl.css\";i:281;s:27:\"paragraph/style-rtl.min.css\";i:282;s:19:\"paragraph/style.css\";i:283;s:23:\"paragraph/style.min.css\";i:284;s:35:\"post-author-biography/style-rtl.css\";i:285;s:39:\"post-author-biography/style-rtl.min.css\";i:286;s:31:\"post-author-biography/style.css\";i:287;s:35:\"post-author-biography/style.min.css\";i:288;s:30:\"post-author-name/style-rtl.css\";i:289;s:34:\"post-author-name/style-rtl.min.css\";i:290;s:26:\"post-author-name/style.css\";i:291;s:30:\"post-author-name/style.min.css\";i:292;s:26:\"post-author/editor-rtl.css\";i:293;s:30:\"post-author/editor-rtl.min.css\";i:294;s:22:\"post-author/editor.css\";i:295;s:26:\"post-author/editor.min.css\";i:296;s:25:\"post-author/style-rtl.css\";i:297;s:29:\"post-author/style-rtl.min.css\";i:298;s:21:\"post-author/style.css\";i:299;s:25:\"post-author/style.min.css\";i:300;s:33:\"post-comments-form/editor-rtl.css\";i:301;s:37:\"post-comments-form/editor-rtl.min.css\";i:302;s:29:\"post-comments-form/editor.css\";i:303;s:33:\"post-comments-form/editor.min.css\";i:304;s:32:\"post-comments-form/style-rtl.css\";i:305;s:36:\"post-comments-form/style-rtl.min.css\";i:306;s:28:\"post-comments-form/style.css\";i:307;s:32:\"post-comments-form/style.min.css\";i:308;s:27:\"post-content/editor-rtl.css\";i:309;s:31:\"post-content/editor-rtl.min.css\";i:310;s:23:\"post-content/editor.css\";i:311;s:27:\"post-content/editor.min.css\";i:312;s:26:\"post-content/style-rtl.css\";i:313;s:30:\"post-content/style-rtl.min.css\";i:314;s:22:\"post-content/style.css\";i:315;s:26:\"post-content/style.min.css\";i:316;s:23:\"post-date/style-rtl.css\";i:317;s:27:\"post-date/style-rtl.min.css\";i:318;s:19:\"post-date/style.css\";i:319;s:23:\"post-date/style.min.css\";i:320;s:27:\"post-excerpt/editor-rtl.css\";i:321;s:31:\"post-excerpt/editor-rtl.min.css\";i:322;s:23:\"post-excerpt/editor.css\";i:323;s:27:\"post-excerpt/editor.min.css\";i:324;s:26:\"post-excerpt/style-rtl.css\";i:325;s:30:\"post-excerpt/style-rtl.min.css\";i:326;s:22:\"post-excerpt/style.css\";i:327;s:26:\"post-excerpt/style.min.css\";i:328;s:34:\"post-featured-image/editor-rtl.css\";i:329;s:38:\"post-featured-image/editor-rtl.min.css\";i:330;s:30:\"post-featured-image/editor.css\";i:331;s:34:\"post-featured-image/editor.min.css\";i:332;s:33:\"post-featured-image/style-rtl.css\";i:333;s:37:\"post-featured-image/style-rtl.min.css\";i:334;s:29:\"post-featured-image/style.css\";i:335;s:33:\"post-featured-image/style.min.css\";i:336;s:34:\"post-navigation-link/style-rtl.css\";i:337;s:38:\"post-navigation-link/style-rtl.min.css\";i:338;s:30:\"post-navigation-link/style.css\";i:339;s:34:\"post-navigation-link/style.min.css\";i:340;s:28:\"post-template/editor-rtl.css\";i:341;s:32:\"post-template/editor-rtl.min.css\";i:342;s:24:\"post-template/editor.css\";i:343;s:28:\"post-template/editor.min.css\";i:344;s:27:\"post-template/style-rtl.css\";i:345;s:31:\"post-template/style-rtl.min.css\";i:346;s:23:\"post-template/style.css\";i:347;s:27:\"post-template/style.min.css\";i:348;s:24:\"post-terms/style-rtl.css\";i:349;s:28:\"post-terms/style-rtl.min.css\";i:350;s:20:\"post-terms/style.css\";i:351;s:24:\"post-terms/style.min.css\";i:352;s:24:\"post-title/style-rtl.css\";i:353;s:28:\"post-title/style-rtl.min.css\";i:354;s:20:\"post-title/style.css\";i:355;s:24:\"post-title/style.min.css\";i:356;s:26:\"preformatted/style-rtl.css\";i:357;s:30:\"preformatted/style-rtl.min.css\";i:358;s:22:\"preformatted/style.css\";i:359;s:26:\"preformatted/style.min.css\";i:360;s:24:\"pullquote/editor-rtl.css\";i:361;s:28:\"pullquote/editor-rtl.min.css\";i:362;s:20:\"pullquote/editor.css\";i:363;s:24:\"pullquote/editor.min.css\";i:364;s:23:\"pullquote/style-rtl.css\";i:365;s:27:\"pullquote/style-rtl.min.css\";i:366;s:19:\"pullquote/style.css\";i:367;s:23:\"pullquote/style.min.css\";i:368;s:23:\"pullquote/theme-rtl.css\";i:369;s:27:\"pullquote/theme-rtl.min.css\";i:370;s:19:\"pullquote/theme.css\";i:371;s:23:\"pullquote/theme.min.css\";i:372;s:39:\"query-pagination-numbers/editor-rtl.css\";i:373;s:43:\"query-pagination-numbers/editor-rtl.min.css\";i:374;s:35:\"query-pagination-numbers/editor.css\";i:375;s:39:\"query-pagination-numbers/editor.min.css\";i:376;s:31:\"query-pagination/editor-rtl.css\";i:377;s:35:\"query-pagination/editor-rtl.min.css\";i:378;s:27:\"query-pagination/editor.css\";i:379;s:31:\"query-pagination/editor.min.css\";i:380;s:30:\"query-pagination/style-rtl.css\";i:381;s:34:\"query-pagination/style-rtl.min.css\";i:382;s:26:\"query-pagination/style.css\";i:383;s:30:\"query-pagination/style.min.css\";i:384;s:25:\"query-title/style-rtl.css\";i:385;s:29:\"query-title/style-rtl.min.css\";i:386;s:21:\"query-title/style.css\";i:387;s:25:\"query-title/style.min.css\";i:388;s:20:\"query/editor-rtl.css\";i:389;s:24:\"query/editor-rtl.min.css\";i:390;s:16:\"query/editor.css\";i:391;s:20:\"query/editor.min.css\";i:392;s:19:\"quote/style-rtl.css\";i:393;s:23:\"quote/style-rtl.min.css\";i:394;s:15:\"quote/style.css\";i:395;s:19:\"quote/style.min.css\";i:396;s:19:\"quote/theme-rtl.css\";i:397;s:23:\"quote/theme-rtl.min.css\";i:398;s:15:\"quote/theme.css\";i:399;s:19:\"quote/theme.min.css\";i:400;s:23:\"read-more/style-rtl.css\";i:401;s:27:\"read-more/style-rtl.min.css\";i:402;s:19:\"read-more/style.css\";i:403;s:23:\"read-more/style.min.css\";i:404;s:18:\"rss/editor-rtl.css\";i:405;s:22:\"rss/editor-rtl.min.css\";i:406;s:14:\"rss/editor.css\";i:407;s:18:\"rss/editor.min.css\";i:408;s:17:\"rss/style-rtl.css\";i:409;s:21:\"rss/style-rtl.min.css\";i:410;s:13:\"rss/style.css\";i:411;s:17:\"rss/style.min.css\";i:412;s:21:\"search/editor-rtl.css\";i:413;s:25:\"search/editor-rtl.min.css\";i:414;s:17:\"search/editor.css\";i:415;s:21:\"search/editor.min.css\";i:416;s:20:\"search/style-rtl.css\";i:417;s:24:\"search/style-rtl.min.css\";i:418;s:16:\"search/style.css\";i:419;s:20:\"search/style.min.css\";i:420;s:20:\"search/theme-rtl.css\";i:421;s:24:\"search/theme-rtl.min.css\";i:422;s:16:\"search/theme.css\";i:423;s:20:\"search/theme.min.css\";i:424;s:24:\"separator/editor-rtl.css\";i:425;s:28:\"separator/editor-rtl.min.css\";i:426;s:20:\"separator/editor.css\";i:427;s:24:\"separator/editor.min.css\";i:428;s:23:\"separator/style-rtl.css\";i:429;s:27:\"separator/style-rtl.min.css\";i:430;s:19:\"separator/style.css\";i:431;s:23:\"separator/style.min.css\";i:432;s:23:\"separator/theme-rtl.css\";i:433;s:27:\"separator/theme-rtl.min.css\";i:434;s:19:\"separator/theme.css\";i:435;s:23:\"separator/theme.min.css\";i:436;s:24:\"shortcode/editor-rtl.css\";i:437;s:28:\"shortcode/editor-rtl.min.css\";i:438;s:20:\"shortcode/editor.css\";i:439;s:24:\"shortcode/editor.min.css\";i:440;s:24:\"site-logo/editor-rtl.css\";i:441;s:28:\"site-logo/editor-rtl.min.css\";i:442;s:20:\"site-logo/editor.css\";i:443;s:24:\"site-logo/editor.min.css\";i:444;s:23:\"site-logo/style-rtl.css\";i:445;s:27:\"site-logo/style-rtl.min.css\";i:446;s:19:\"site-logo/style.css\";i:447;s:23:\"site-logo/style.min.css\";i:448;s:27:\"site-tagline/editor-rtl.css\";i:449;s:31:\"site-tagline/editor-rtl.min.css\";i:450;s:23:\"site-tagline/editor.css\";i:451;s:27:\"site-tagline/editor.min.css\";i:452;s:26:\"site-tagline/style-rtl.css\";i:453;s:30:\"site-tagline/style-rtl.min.css\";i:454;s:22:\"site-tagline/style.css\";i:455;s:26:\"site-tagline/style.min.css\";i:456;s:25:\"site-title/editor-rtl.css\";i:457;s:29:\"site-title/editor-rtl.min.css\";i:458;s:21:\"site-title/editor.css\";i:459;s:25:\"site-title/editor.min.css\";i:460;s:24:\"site-title/style-rtl.css\";i:461;s:28:\"site-title/style-rtl.min.css\";i:462;s:20:\"site-title/style.css\";i:463;s:24:\"site-title/style.min.css\";i:464;s:26:\"social-link/editor-rtl.css\";i:465;s:30:\"social-link/editor-rtl.min.css\";i:466;s:22:\"social-link/editor.css\";i:467;s:26:\"social-link/editor.min.css\";i:468;s:27:\"social-links/editor-rtl.css\";i:469;s:31:\"social-links/editor-rtl.min.css\";i:470;s:23:\"social-links/editor.css\";i:471;s:27:\"social-links/editor.min.css\";i:472;s:26:\"social-links/style-rtl.css\";i:473;s:30:\"social-links/style-rtl.min.css\";i:474;s:22:\"social-links/style.css\";i:475;s:26:\"social-links/style.min.css\";i:476;s:21:\"spacer/editor-rtl.css\";i:477;s:25:\"spacer/editor-rtl.min.css\";i:478;s:17:\"spacer/editor.css\";i:479;s:21:\"spacer/editor.min.css\";i:480;s:20:\"spacer/style-rtl.css\";i:481;s:24:\"spacer/style-rtl.min.css\";i:482;s:16:\"spacer/style.css\";i:483;s:20:\"spacer/style.min.css\";i:484;s:20:\"table/editor-rtl.css\";i:485;s:24:\"table/editor-rtl.min.css\";i:486;s:16:\"table/editor.css\";i:487;s:20:\"table/editor.min.css\";i:488;s:19:\"table/style-rtl.css\";i:489;s:23:\"table/style-rtl.min.css\";i:490;s:15:\"table/style.css\";i:491;s:19:\"table/style.min.css\";i:492;s:19:\"table/theme-rtl.css\";i:493;s:23:\"table/theme-rtl.min.css\";i:494;s:15:\"table/theme.css\";i:495;s:19:\"table/theme.min.css\";i:496;s:24:\"tag-cloud/editor-rtl.css\";i:497;s:28:\"tag-cloud/editor-rtl.min.css\";i:498;s:20:\"tag-cloud/editor.css\";i:499;s:24:\"tag-cloud/editor.min.css\";i:500;s:23:\"tag-cloud/style-rtl.css\";i:501;s:27:\"tag-cloud/style-rtl.min.css\";i:502;s:19:\"tag-cloud/style.css\";i:503;s:23:\"tag-cloud/style.min.css\";i:504;s:28:\"template-part/editor-rtl.css\";i:505;s:32:\"template-part/editor-rtl.min.css\";i:506;s:24:\"template-part/editor.css\";i:507;s:28:\"template-part/editor.min.css\";i:508;s:27:\"template-part/theme-rtl.css\";i:509;s:31:\"template-part/theme-rtl.min.css\";i:510;s:23:\"template-part/theme.css\";i:511;s:27:\"template-part/theme.min.css\";i:512;s:30:\"term-description/style-rtl.css\";i:513;s:34:\"term-description/style-rtl.min.css\";i:514;s:26:\"term-description/style.css\";i:515;s:30:\"term-description/style.min.css\";i:516;s:27:\"text-columns/editor-rtl.css\";i:517;s:31:\"text-columns/editor-rtl.min.css\";i:518;s:23:\"text-columns/editor.css\";i:519;s:27:\"text-columns/editor.min.css\";i:520;s:26:\"text-columns/style-rtl.css\";i:521;s:30:\"text-columns/style-rtl.min.css\";i:522;s:22:\"text-columns/style.css\";i:523;s:26:\"text-columns/style.min.css\";i:524;s:19:\"verse/style-rtl.css\";i:525;s:23:\"verse/style-rtl.min.css\";i:526;s:15:\"verse/style.css\";i:527;s:19:\"verse/style.min.css\";i:528;s:20:\"video/editor-rtl.css\";i:529;s:24:\"video/editor-rtl.min.css\";i:530;s:16:\"video/editor.css\";i:531;s:20:\"video/editor.min.css\";i:532;s:19:\"video/style-rtl.css\";i:533;s:23:\"video/style-rtl.min.css\";i:534;s:15:\"video/style.css\";i:535;s:19:\"video/style.min.css\";i:536;s:19:\"video/theme-rtl.css\";i:537;s:23:\"video/theme-rtl.min.css\";i:538;s:15:\"video/theme.css\";i:539;s:19:\"video/theme.min.css\";}}','on'),(135,'theme_mods_twentytwentyfive','a:1:{s:18:\"custom_css_post_id\";i:-1;}','auto'),(136,'_transient_wp_styles_for_blocks','a:2:{s:4:\"hash\";s:32:\"6a64f06d5174183821b9e5e1b0e89c36\";s:6:\"blocks\";a:52:{s:11:\"core/button\";s:0:\"\";s:14:\"core/site-logo\";s:0:\"\";s:18:\"core/post-template\";s:0:\"\";s:12:\"core/columns\";s:769:\":root :where(.wp-block-columns-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-columns-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-flow) > *{margin-block-start: var(--wp--preset--spacing--50);margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-columns-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-constrained) > *{margin-block-start: var(--wp--preset--spacing--50);margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-flex){gap: var(--wp--preset--spacing--50);}:root :where(.wp-block-columns-is-layout-grid){gap: var(--wp--preset--spacing--50);}\";s:14:\"core/pullquote\";s:306:\":root :where(.wp-block-pullquote){font-size: var(--wp--preset--font-size--xx-large);font-weight: 300;line-height: 1.2;padding-top: var(--wp--preset--spacing--30);padding-bottom: var(--wp--preset--spacing--30);}:root :where(.wp-block-pullquote p:last-of-type){margin-bottom: var(--wp--preset--spacing--30);}\";s:32:\"c48738dcb285a3f6ab83acff204fc486\";s:106:\":root :where(.wp-block-pullquote cite){font-size: var(--wp--preset--font-size--small);font-style: normal;}\";s:11:\"core/avatar\";s:57:\":root :where(.wp-block-avatar img){border-radius: 100px;}\";s:12:\"core/buttons\";s:665:\":root :where(.wp-block-buttons-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-buttons-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-flow) > *{margin-block-start: 16px;margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > *{margin-block-start: 16px;margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-flex){gap: 16px;}:root :where(.wp-block-buttons-is-layout-grid){gap: 16px;}\";s:9:\"core/code\";s:427:\":root :where(.wp-block-code){background-color: var(--wp--preset--color--accent-5);color: var(--wp--preset--color--contrast);font-family: var(--wp--preset--font-family--fira-code);font-size: var(--wp--preset--font-size--medium);font-weight: 300;padding-top: var(--wp--preset--spacing--40);padding-right: var(--wp--preset--spacing--40);padding-bottom: var(--wp--preset--spacing--40);padding-left: var(--wp--preset--spacing--40);}\";s:24:\"core/comment-author-name\";s:169:\":root :where(.wp-block-comment-author-name){color: var(--wp--preset--color--accent-4);font-size: var(--wp--preset--font-size--small);margin-top: 5px;margin-bottom: 0px;}\";s:32:\"c0002c260f8238c4212f3e4c369fc4f7\";s:143:\":root :where(.wp-block-comment-author-name a:where(:not(.wp-element-button))){color: var(--wp--preset--color--accent-4);text-decoration: none;}\";s:32:\"1e7c38b45537b325dbbbaec17a301676\";s:112:\":root :where(.wp-block-comment-author-name a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:20:\"core/comment-content\";s:178:\":root :where(.wp-block-comment-content){font-size: var(--wp--preset--font-size--medium);margin-top: var(--wp--preset--spacing--30);margin-bottom: var(--wp--preset--spacing--30);}\";s:17:\"core/comment-date\";s:127:\":root :where(.wp-block-comment-date){color: var(--wp--preset--color--contrast);font-size: var(--wp--preset--font-size--small);}\";s:32:\"c83ca7b3e52884c70f7830c54f99b318\";s:114:\":root :where(.wp-block-comment-date a:where(:not(.wp-element-button))){color: var(--wp--preset--color--contrast);}\";s:22:\"core/comment-edit-link\";s:90:\":root :where(.wp-block-comment-edit-link){font-size: var(--wp--preset--font-size--small);}\";s:32:\"41d70710612536a90e368c12bcb0efea\";s:119:\":root :where(.wp-block-comment-edit-link a:where(:not(.wp-element-button))){color: var(--wp--preset--color--contrast);}\";s:23:\"core/comment-reply-link\";s:91:\":root :where(.wp-block-comment-reply-link){font-size: var(--wp--preset--font-size--small);}\";s:32:\"13c96340dbf37700add1f4c5cae19f3e\";s:120:\":root :where(.wp-block-comment-reply-link a:where(:not(.wp-element-button))){color: var(--wp--preset--color--contrast);}\";s:23:\"core/post-comments-form\";s:565:\":root :where(.wp-block-post-comments-form){font-size: var(--wp--preset--font-size--medium);padding-top: var(--wp--preset--spacing--40);padding-bottom: var(--wp--preset--spacing--40);}:root :where(.wp-block-post-comments-form textarea, .wp-block-post-comments-form input:not([type=submit])){border-radius:.25rem; border-color: var(--wp--preset--color--accent-6) !important;}:root :where(.wp-block-post-comments-form input[type=checkbox]){margin:0 .2rem 0 0 !important;}:root :where(.wp-block-post-comments-form label){font-size: var(--wp--preset--font-size--small);}\";s:24:\"core/comments-pagination\";s:182:\":root :where(.wp-block-comments-pagination){font-size: var(--wp--preset--font-size--medium);margin-top: var(--wp--preset--spacing--40);margin-bottom: var(--wp--preset--spacing--40);}\";s:29:\"core/comments-pagination-next\";s:98:\":root :where(.wp-block-comments-pagination-next){font-size: var(--wp--preset--font-size--medium);}\";s:32:\"core/comments-pagination-numbers\";s:101:\":root :where(.wp-block-comments-pagination-numbers){font-size: var(--wp--preset--font-size--medium);}\";s:33:\"core/comments-pagination-previous\";s:102:\":root :where(.wp-block-comments-pagination-previous){font-size: var(--wp--preset--font-size--medium);}\";s:14:\"core/post-date\";s:124:\":root :where(.wp-block-post-date){color: var(--wp--preset--color--accent-4);font-size: var(--wp--preset--font-size--small);}\";s:32:\"ac0d4e00f5ec22d14451759983e5bd43\";s:133:\":root :where(.wp-block-post-date a:where(:not(.wp-element-button))){color: var(--wp--preset--color--accent-4);text-decoration: none;}\";s:32:\"0ae6ffd1b886044c2da62d75d05ab13d\";s:102:\":root :where(.wp-block-post-date a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:25:\"core/post-navigation-link\";s:94:\":root :where(.wp-block-post-navigation-link){font-size: var(--wp--preset--font-size--medium);}\";s:15:\"core/post-terms\";s:158:\":root :where(.wp-block-post-terms){font-size: var(--wp--preset--font-size--small);font-weight: 600;}:root :where(.wp-block-post-terms a){white-space: nowrap;}\";s:15:\"core/post-title\";s:0:\"\";s:32:\"bb496d3fcd9be3502ce57ff8281e5687\";s:92:\":root :where(.wp-block-post-title a:where(:not(.wp-element-button))){text-decoration: none;}\";s:32:\"12380ab98fdc81351bb32a39bbfc9249\";s:103:\":root :where(.wp-block-post-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:10:\"core/quote\";s:1315:\":root :where(.wp-block-quote){border-color: currentColor;border-width: 0 0 0 2px;border-style: solid;font-size: var(--wp--preset--font-size--large);font-weight: 300;margin-right: 0;margin-left: 0;padding-top: var(--wp--preset--spacing--30);padding-right: var(--wp--preset--spacing--40);padding-bottom: var(--wp--preset--spacing--30);padding-left: var(--wp--preset--spacing--40);}:root :where(.wp-block-quote-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-quote-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-flow) > *{margin-block-start: var(--wp--preset--spacing--30);margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-quote-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-constrained) > *{margin-block-start: var(--wp--preset--spacing--30);margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-flex){gap: var(--wp--preset--spacing--30);}:root :where(.wp-block-quote-is-layout-grid){gap: var(--wp--preset--spacing--30);}:root :where(.wp-block-quote.has-text-align-right ){border-width: 0 2px 0 0;}:root :where(.wp-block-quote.has-text-align-center ){border-width: 0;border-inline: 0; padding-inline: 0;}\";s:32:\"1de7a22e22013106efc5be82788cb6c0\";s:176:\":root :where(.wp-block-quote cite){font-size: var(--wp--preset--font-size--small);font-style: normal;font-weight: 300;}:root :where(.wp-block-quote cite sub){font-size: 0.65em}\";s:21:\"core/query-pagination\";s:107:\":root :where(.wp-block-query-pagination){font-size: var(--wp--preset--font-size--medium);font-weight: 500;}\";s:11:\"core/search\";s:380:\":root :where(.wp-block-search .wp-block-search__label, .wp-block-search .wp-block-search__input, .wp-block-search .wp-block-search__button){font-size: var(--wp--preset--font-size--medium);line-height: 1.6;}:root :where(.wp-block-search .wp-block-search__input){border-radius:3.125rem;padding-left:1.5625rem;padding-right:1.5625rem;border-color:var(--wp--preset--color--accent-6);}\";s:32:\"14fa6a3d0cfbde171cbc0fb04aa8a6cf\";s:138:\":root :where(.wp-block-search .wp-element-button,.wp-block-search .wp-block-button__link){border-radius: 3.125rem;margin-left: 1.125rem;}\";s:32:\"05993ee2f3de94b5d1350998a7e9b6b0\";s:130:\":root :where(.wp-block-search .wp-element-button:hover,.wp-block-search .wp-block-button__link:hover){border-color: transparent;}\";s:14:\"core/separator\";s:148:\":root :where(.wp-block-separator){border-color: currentColor;border-width: 0 0 1px 0;border-style: solid;color: var(--wp--preset--color--accent-6);}\";s:17:\"core/site-tagline\";s:86:\":root :where(.wp-block-site-tagline){font-size: var(--wp--preset--font-size--medium);}\";s:15:\"core/site-title\";s:75:\":root :where(.wp-block-site-title){font-weight: 700;letter-spacing: -.5px;}\";s:32:\"f513d889cf971b13995cc3fffed2f39b\";s:92:\":root :where(.wp-block-site-title a:where(:not(.wp-element-button))){text-decoration: none;}\";s:32:\"22c37a317cc0ebd50155b5ad78564f37\";s:103:\":root :where(.wp-block-site-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:21:\"core/term-description\";s:90:\":root :where(.wp-block-term-description){font-size: var(--wp--preset--font-size--medium);}\";s:15:\"core/navigation\";s:84:\":root :where(.wp-block-navigation){font-size: var(--wp--preset--font-size--medium);}\";s:32:\"25289a01850f5a0264ddb79a9a3baf3d\";s:92:\":root :where(.wp-block-navigation a:where(:not(.wp-element-button))){text-decoration: none;}\";s:32:\"026c04da08398d655a95047f1f235d97\";s:103:\":root :where(.wp-block-navigation a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:9:\"core/list\";s:52:\":root :where(.wp-block-list li){margin-top: 0.5rem;}\";s:12:\"core/heading\";s:0:\"\";s:14:\"core/paragraph\";s:0:\"\";s:10:\"core/group\";s:0:\"\";s:11:\"core/column\";s:0:\"\";}}','on'),(143,'recently_activated','a:0:{}','off'),(144,'acf_first_activated_version','6.3.12','on'),(145,'acf_site_health','{\"event_first_activated\":1742995723,\"last_updated\":1742996156,\"event_first_created_post_type\":1742995902,\"event_first_created_field_group\":1742996156}','off'),(146,'acf_version','6.3.12','auto'),(147,'wp_graphql_version','2.1.1','auto'),(148,'graphql_general_settings','','auto'),(149,'wpgraphql_ide_capabilities','66867b6d9cfe967eef8f8026bfe52701','auto'),(150,'graphql_ide_settings','','auto'),(151,'rewrite_rules','a:110:{s:11:\"^wp-json/?$\";s:22:\"index.php?rest_route=/\";s:14:\"^wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:21:\"^index.php/wp-json/?$\";s:22:\"index.php?rest_route=/\";s:24:\"^index.php/wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:17:\"^wp-sitemap\\.xml$\";s:23:\"index.php?sitemap=index\";s:17:\"^wp-sitemap\\.xsl$\";s:36:\"index.php?sitemap-stylesheet=sitemap\";s:23:\"^wp-sitemap-index\\.xsl$\";s:34:\"index.php?sitemap-stylesheet=index\";s:48:\"^wp-sitemap-([a-z]+?)-([a-z\\d_-]+?)-(\\d+?)\\.xml$\";s:75:\"index.php?sitemap=$matches[1]&sitemap-subtype=$matches[2]&paged=$matches[3]\";s:34:\"^wp-sitemap-([a-z]+?)-(\\d+?)\\.xml$\";s:47:\"index.php?sitemap=$matches[1]&paged=$matches[2]\";s:10:\"graphql/?$\";s:22:\"index.php?graphql=true\";s:47:\"category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:42:\"category/(.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:23:\"category/(.+?)/embed/?$\";s:46:\"index.php?category_name=$matches[1]&embed=true\";s:35:\"category/(.+?)/page/?([0-9]{1,})/?$\";s:53:\"index.php?category_name=$matches[1]&paged=$matches[2]\";s:17:\"category/(.+?)/?$\";s:35:\"index.php?category_name=$matches[1]\";s:44:\"tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:39:\"tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:20:\"tag/([^/]+)/embed/?$\";s:36:\"index.php?tag=$matches[1]&embed=true\";s:32:\"tag/([^/]+)/page/?([0-9]{1,})/?$\";s:43:\"index.php?tag=$matches[1]&paged=$matches[2]\";s:14:\"tag/([^/]+)/?$\";s:25:\"index.php?tag=$matches[1]\";s:45:\"type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:40:\"type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:21:\"type/([^/]+)/embed/?$\";s:44:\"index.php?post_format=$matches[1]&embed=true\";s:33:\"type/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?post_format=$matches[1]&paged=$matches[2]\";s:15:\"type/([^/]+)/?$\";s:33:\"index.php?post_format=$matches[1]\";s:33:\"movie/[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:43:\"movie/[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:63:\"movie/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:58:\"movie/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:58:\"movie/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:39:\"movie/[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:22:\"movie/([^/]+)/embed/?$\";s:38:\"index.php?movie=$matches[1]&embed=true\";s:26:\"movie/([^/]+)/trackback/?$\";s:32:\"index.php?movie=$matches[1]&tb=1\";s:34:\"movie/([^/]+)/page/?([0-9]{1,})/?$\";s:45:\"index.php?movie=$matches[1]&paged=$matches[2]\";s:41:\"movie/([^/]+)/comment-page-([0-9]{1,})/?$\";s:45:\"index.php?movie=$matches[1]&cpage=$matches[2]\";s:30:\"movie/([^/]+)(?:/([0-9]+))?/?$\";s:44:\"index.php?movie=$matches[1]&page=$matches[2]\";s:22:\"movie/[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:32:\"movie/[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:52:\"movie/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:47:\"movie/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:47:\"movie/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:28:\"movie/[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:48:\".*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\\.php$\";s:18:\"index.php?feed=old\";s:20:\".*wp-app\\.php(/.*)?$\";s:19:\"index.php?error=403\";s:18:\".*wp-register.php$\";s:23:\"index.php?register=true\";s:32:\"feed/(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:27:\"(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:8:\"embed/?$\";s:21:\"index.php?&embed=true\";s:20:\"page/?([0-9]{1,})/?$\";s:28:\"index.php?&paged=$matches[1]\";s:27:\"comment-page-([0-9]{1,})/?$\";s:38:\"index.php?&page_id=2&cpage=$matches[1]\";s:41:\"comments/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:36:\"comments/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:17:\"comments/embed/?$\";s:21:\"index.php?&embed=true\";s:44:\"search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:39:\"search/(.+)/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:20:\"search/(.+)/embed/?$\";s:34:\"index.php?s=$matches[1]&embed=true\";s:32:\"search/(.+)/page/?([0-9]{1,})/?$\";s:41:\"index.php?s=$matches[1]&paged=$matches[2]\";s:14:\"search/(.+)/?$\";s:23:\"index.php?s=$matches[1]\";s:47:\"author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:42:\"author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:23:\"author/([^/]+)/embed/?$\";s:44:\"index.php?author_name=$matches[1]&embed=true\";s:35:\"author/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?author_name=$matches[1]&paged=$matches[2]\";s:17:\"author/([^/]+)/?$\";s:33:\"index.php?author_name=$matches[1]\";s:69:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:64:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:45:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/embed/?$\";s:74:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&embed=true\";s:57:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]\";s:39:\"([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$\";s:63:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]\";s:56:\"([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:51:\"([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:32:\"([0-9]{4})/([0-9]{1,2})/embed/?$\";s:58:\"index.php?year=$matches[1]&monthnum=$matches[2]&embed=true\";s:44:\"([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]\";s:26:\"([0-9]{4})/([0-9]{1,2})/?$\";s:47:\"index.php?year=$matches[1]&monthnum=$matches[2]\";s:43:\"([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:38:\"([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:19:\"([0-9]{4})/embed/?$\";s:37:\"index.php?year=$matches[1]&embed=true\";s:31:\"([0-9]{4})/page/?([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&paged=$matches[2]\";s:13:\"([0-9]{4})/?$\";s:26:\"index.php?year=$matches[1]\";s:27:\".?.+?/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\".?.+?/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\".?.+?/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"(.?.+?)/embed/?$\";s:41:\"index.php?pagename=$matches[1]&embed=true\";s:20:\"(.?.+?)/trackback/?$\";s:35:\"index.php?pagename=$matches[1]&tb=1\";s:40:\"(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:35:\"(.?.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:28:\"(.?.+?)/page/?([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&paged=$matches[2]\";s:35:\"(.?.+?)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&cpage=$matches[2]\";s:24:\"(.?.+?)(?:/([0-9]+))?/?$\";s:47:\"index.php?pagename=$matches[1]&page=$matches[2]\";s:27:\"[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\"[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\"[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\"[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\"[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"([^/]+)/embed/?$\";s:37:\"index.php?name=$matches[1]&embed=true\";s:20:\"([^/]+)/trackback/?$\";s:31:\"index.php?name=$matches[1]&tb=1\";s:40:\"([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:35:\"([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:28:\"([^/]+)/page/?([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&paged=$matches[2]\";s:35:\"([^/]+)/comment-page-([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&cpage=$matches[2]\";s:24:\"([^/]+)(?:/([0-9]+))?/?$\";s:43:\"index.php?name=$matches[1]&page=$matches[2]\";s:16:\"[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:26:\"[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:46:\"[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:41:\"[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:41:\"[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:22:\"[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";}','auto'),(152,'new_admin_email','wordpress@example.com','auto'),(161,'wp-graphql_allow_tracking','yes','auto'),(162,'wp-graphql_tracking_notice','hide','auto'),(163,'wp-graphql_tracking_last_send','1742996836','auto'),(164,'wpgraphql-acf_allow_tracking','yes','auto'),(165,'wpgraphql-acf_tracking_notice','hide','auto'),(166,'wpgraphql-acf_tracking_last_send','1742996839','auto'),(167,'category_children','a:0:{}','auto'),(170,'fresh_site','0','off'),(183,'_transient_timeout_feed_9bbd59226dc36b9b26cd43f15694c5c3','1743545620','off'),(184,'_transient_feed_9bbd59226dc36b9b26cd43f15694c5c3','a:6:{s:5:\"child\";a:1:{s:0:\"\";a:1:{s:3:\"rss\";a:1:{i:0;a:6:{s:4:\"data\";s:3:\"\n\n\n\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:7:\"version\";s:3:\"2.0\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:1:{s:7:\"channel\";a:1:{i:0;a:6:{s:4:\"data\";s:52:\"\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:8:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"WordPress News\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"https://wordpress.org/news\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:59:\"The latest news about WordPress and the WordPress community\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:13:\"lastBuildDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 13:21:47 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"language\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"en-US\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:9:\"generator\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"https://wordpress.org/?v=6.8-alpha-59827\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:5:\"image\";a:1:{i:0;a:6:{s:4:\"data\";s:11:\"\n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:5:{s:3:\"url\";a:1:{i:0;a:5:{s:4:\"data\";s:29:\"https://s.w.org/favicon.ico?2\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"WordPress News\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"https://wordpress.org/news\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:5:\"width\";a:1:{i:0;a:5:{s:4:\"data\";s:2:\"32\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:6:\"height\";a:1:{i:0;a:5:{s:4:\"data\";s:2:\"32\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}s:4:\"item\";a:10:{i:0;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"WordPress 6.8 Release Candidate 1\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"https://wordpress.org/news/2025/03/wordpress-6-8-release-candidate-1/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 16:19:41 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18639\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:267:\"WordPress 6.8 RC 1 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing over the next three weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:9280:\"\n

The first Release Candidate (“RC1”) for WordPress 6.8 is ready for download and testing!

\n\n\n\n

This version of the WordPress software is under development.  Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, it’s recommended that you evaluate RC1 on a test server and site.

\n\n\n\n

Reaching this phase of the release cycle is an important milestone.  While release candidates are considered ready for release, testing remains crucial to ensure that everything in WordPress 6.8 is the best it can be.

\n\n\n\n

You can test WordPress 6.8 RC1 in four ways:

\n\n\n\n
PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
Direct DownloadDownload the RC1 version (zip) and install it on a WordPress website.
Command LineUse the following WP-CLI command: wp core update --version=6.8-RC1
WordPress PlaygroundUse the 6.8 RC1 WordPress Playground instance (available within 35 minutes after the release is ready) to test the software directly in your browser without the need for a separate site or setup.
\n\n\n\n

The current target for the WordPress 6.8 release is April 15, 2025.  Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for further details.

\n\n\n\n

What’s in WordPress 6.8 RC1?

\n\n\n\n

Get a recap of WordPress 6.8’s highlighted features in the Beta 1 announcement.  For more technical information related to issues addressed since Beta 3, you can browse the following links:

\n\n\n\n\n\n\n\n

Want to look deeper into the details and technical notes for this release? These recent posts cover some of the latest updates:

\n\n\n\n\n\n\n\n

How you can contribute

\n\n\n\n

WordPress is open source software made possible by a passionate community of people collaborating on and contributing to its development.  The resources below outline various ways you can help the world’s most popular open source web platform, regardless of your technical expertise.

\n\n\n\n

Get involved in testing

\n\n\n\n

Testing for issues is critical to ensuring WordPress is performant and stable.  It’s also a meaningful way for anyone to contribute.  This detailed guide will walk you through testing features in WordPress 6.8.  For those new to testing, follow this general testing guide for more details on getting set up.

\n\n\n\n

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report.  You can also check your issue against a list of known bugs.

\n\n\n\n

Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

\n\n\n\n

Search for vulnerabilities

\n\n\n\n

From now until the final release of WordPress 6.8 (scheduled for April 15, 2025), the monetary reward for reporting new, unreleased security vulnerabilities is doubled.  Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

\n\n\n\n

Update your theme or plugin

\n\n\n\n

For plugin and theme authors, your products play an integral role in extending the functionality and value of WordPress for all users.

\n\n\n\n

Thanks for continuing to test your themes and plugins with the WordPress 6.8 beta releases.  With RC1, you’ll want to conclude your testing and update the “Tested up to” version in your plugin’s readme file to 6.8.

\n\n\n\n

If you find compatibility issues, please post detailed information to the support forum.

\n\n\n\n

Help translate WordPress

\n\n\n\n

Do you speak a language other than English?  ¿Español?  Français?  Русский?  日本語? हिन्दी? বাংলা? मराठी?  You can help translate WordPress into more than 100 languages.  This release milestone (RC1) also marks the hard string freeze point of the 6.8 release cycle.

\n\n\n\n

An RC1 haiku

\n\n\n\n

March fades, nearly there,
Six-eight hums—a steady beat,
RC greets the world.

\n\n\n\n

Thank you to the following contributors for collaborating on this post: @joemcgill @benjamin_zekavica @courane01 @mkrndmane @audrasjb @areziaal @ankit-k-gupta @krupajnanda @bph.

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18639\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:1;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"WordPress 6.8 Beta 3\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-3/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 15:35:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18634\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:289:\"WordPress 6.8 Beta 3 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next four weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:5627:\"\n

WordPress 6.8 Beta 3 is now ready for testing!

\n\n\n\n

This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, it is recommended you evaluate Beta 3 on a test server and site.

\n\n\n\n

You can test WordPress 6.8 Beta 3 in four ways:

\n\n\n\n
PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
Direct DownloadDownload the Beta 3 version (zip) and install it on a WordPress website.
Command LineUse the following WP-CLI command: wp core update --version=6.8-beta3
WordPress PlaygroundUse the 6.8 Beta 3 WordPress Playground instance to test the software directly in your browser without the need for a separate site or setup.
\n\n\n\n

The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

\n\n\n\n

Catch up on what’s new in WordPress 6.8: Read the Beta 1 and Beta 2 announcements for details and highlights.

\n\n\n\n

How to test this release

\n\n\n\n

Your help testing the WordPress 6.8 Beta 3 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important. This detailed guide will walk you through testing features in WordPress 6.8.

\n\n\n\n

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

\n\n\n\n

Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

\n\n\n\n

Vulnerability bounty doubles during Beta/RC

\n\n\n\n

Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

\n\n\n\n

Beta 3 updates and highlights

\n\n\n\n

WordPress 6.8 Beta 3 contains more than 3 Editor updates and fixes since the Beta 2 release, including 16 tickets for WordPress core.

\n\n\n\n

Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 3 using these links:

\n\n\n\n\n\n\n\n

A Beta 3 haiku

\n\n\n\n

Beta three refines,
WordPress shapes with steady hands,
Code grows into form.

\n\n\n\n

Props to @benjamin_zekavica @krupajnanda @ankit-k-gupta @joemcgill for proofreading and review.

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18634\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:2;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"WordPress 6.8 Beta 2\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-2/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 15:46:13 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18619\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:289:\"WordPress 6.8 Beta 2 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next five weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:5940:\"\n

WordPress 6.8 Beta 2 is now ready for testing!

\n\n\n\n

This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, you should evaluate Beta 2 on a test server and site.

\n\n\n\n

You can test WordPress 6.8 Beta 2 in four ways:

\n\n\n\n
PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. (Select the “Bleeding edge” channel and “Beta/RC Only” stream.)
Direct DownloadDownload the Beta 2 version (zip) and install it on a WordPress website.
Command LineUse this WP-CLI command: wp core update --version=6.8-beta2
WordPress PlaygroundUse the 6.8 Beta 2 WordPress Playground instance to test the software directly in your browser.  No setup is required–just click and go! 
\n\n\n\n

The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

\n\n\n\n

Catch up on what’s new in WordPress 6.8: Read the Beta 1 announcement for details and highlights.

\n\n\n\n

How to test this release

\n\n\n\n

Your help testing the WordPress 6.8 Beta 2 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important.  This detailed guide will walk you through testing features in WordPress 6.8.

\n\n\n\n

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

\n\n\n\n

Curious about testing releases in general? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

\n\n\n\n

Vulnerability bounty doubles during Beta/RC

\n\n\n\n

Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

\n\n\n\n

Beta 2 updates and highlights

\n\n\n\n

WordPress 6.8 Beta 2 contains more than 14 Editor updates and fixes since the Beta 1 release, including 21 tickets for WordPress core.

\n\n\n\n

Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 1 using these links:

\n\n\n\n\n\n\n\n

A Beta 2 haiku

\n\n\n\n

Second wave refines,
Lines of code like rivers flow,
WordPress finds its form.

\n\n\n\n

Props to @ankitkumarshah @vgnavada @krupajnanda @michelleames @audrasjb @marybaum @ecgan for proofreading and review.

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18619\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:3;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"WordPress 6.8 Beta 1\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-1/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 04 Mar 2025 17:09:45 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18582\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:288:\"WordPress 6.8 Beta 1 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next six weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:10596:\"\n

WordPress 6.8 Beta 1 is ready for download and testing!

\n\n\n\n

This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, set up a test environment or a local site to explore the new features.

\n\n\n\n

How to Test WordPress 6.8 Beta 1

\n\n\n\n

You can test this beta release in any of the following ways: 

\n\n\n\n
WordPress Beta Tester PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. Select the “Bleeding edge” channel and “Beta/RC Only” stream.
Direct DownloadDownload the Beta 1 version (zip) and install it on a WordPress website.
Command Line (WP-CLI)Use this WP-CLI command: wp core update --version=6.8-beta1
WordPress PlaygroundUse a 6.8 Beta 1 WordPress Playground instance to test the software directly in your browser. No setup required–-just click and go!
\n\n\n\n

The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next six weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.

\n\n\n\n

How important is your testing?

\n\n\n\n

Testing for issues is a critical part of developing any software, and it’s a meaningful way for anyone to contribute—whether or not you have experience.  Details on what to test in WordPress 6.8 are here.

\n\n\n\n

If you encounter an issue, please share it in the Alpha/Beta area of the support forums. If you are comfortable submitting a reproducible bug report, you can do so via WordPress Trac. You can also check your issue against this list of known bugs.

\n\n\n\n

Curious about testing releases in general and how to get started? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

\n\n\n\n

WordPress 6.8 will include many new features that were previously only available in the Gutenberg plugin. Learn more about Gutenberg updates since WordPress 6.7 in the What’s New in Gutenberg posts for versions 19.4, 19.5, 19.6, 19.7, 19.8, 19.9, 20.0, 20.1, 20.2, 20.3, and 20.4.

\n\n\n\n

What’s New in WordPress 6.8 Beta 1

\n\n\n\n

This is a polish release, with user enhancements throughout incorporated into the latest Gutenberg updates. WordPress 6.8 brings a luster and gloss that only a polish release can.

\n\n\n\n

WordPress 6.8 Beta 1 contains over 370 enhancements and 520 bug fixes for the editor, including design improvements, polishing the query loop, and more than 230 tickets for WordPress 6.8 Core. Here’s a glimpse of what’s coming:

\n\n\n\n

Editor improvements

\n\n\n\n

Easier ways to see your options in Data Views, and you can opt to ignore sticky posts in the Query Loop. Plus you’ll find lots of little improvements in the editor!

\n\n\n\n

The Style Book comes to Classic themes

\n\n\n\n

The Style Book now features a structured layout so you can preview site colors, typography, and block styles more easily. You can use the Style Book in classic themes with editor-styles or a theme.json file and includes clearer labels, and you can find them under Appearance > Design.

\n\n\n\n

Support for Speculation browser API

\n\n\n\n

WordPress 6.8 introduces native support for speculative loading, leveraging the Speculation Rules API to improve site performance with near-instant page loads. This feature prefetches or prerenders URLs based on user interactions, such as hovering over links, reducing load times for subsequent pages.

\n\n\n\n

By default, WordPress 6.8 applies a conservative prefetching strategy, balancing performance gains with resource efficiency. Developers can customize speculative loading behavior using new filters, since the API does not include UI-based controls. The existing Speculative Loading feature plugin will adapt to the core implementation, allowing deeper customization.  Please test this feature in supported browsers (currently Chrome 108+ and Edge 108+, with more browsers evaluating) and provide feedback on #62503 to help refine its implementation.

\n\n\n\n

Major security boost

\n\n\n\n

WordPress 6.8 will use bcrypt for password hashing, which significantly hardens WordPress. Other hashing is getting hardened, too, throughout the security apparatus. You won’t have to change anything in your daily workflow.

\n\n\n\n

The features included in this first beta may change before the final release of WordPress 6.8, based on what testers like you find.

\n\n\n\n

Get an overview of the 6.8 release cycle and check the Make WordPress Core blog for 6.8-related posts in the next few weeks for further details.

\n\n\n\n

Caveat on testing 6.8 Beta 1 in versions older than 5.1

\n\n\n\n

Due to an update made to the upgrade routine during this release, (see r59803), any upgrade from versions older than 5.1 will fail. Folks are working to resolve this specific issue, so please hold off on reporting on this while testing the Beta 1 release.

\n\n\n\n

Vulnerability bounty doubles during Beta & Release Candidate

\n\n\n\n

The WordPress community sponsors a monetary reward for reporting new, unreleased security vulnerabilities. This reward doubles during the period between Beta 1 on March 4, 2025 and the final Release Candidate (RC) scheduled for April 15, 2025.  Please follow responsible disclosure practices as detailed in the project’s security practices and policies. You can find those on the HackerOne page and in the security white paper.

\n\n\n\n

Just for you: a Beta 1 haiku

\n\n\n\n

March winds shift the tide.
Hands unite in open source;
WordPress moves ahead.

\n\n\n\n

Props to @audrasjb @marybaum @mamaduka @michelleames @bph @jorbin @joemcgill @krupajnanda @desrosj @benjamin_zekavica @lysyjan87 for reviewing and collaborating on this post!

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18582\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:4;a:6:{s:4:\"data\";s:60:\"\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:38:\"Shaping Tomorrow at WordCamp Asia 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://wordpress.org/news/2025/02/shaping-tomorrow-at-wordcamp-asia-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 22 Feb 2025 15:04:04 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:2:{i:0;a:5:{s:4:\"data\";s:6:\"Events\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"WordCamp\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18515\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:394:\"Over 1,400 attendees from 71 countries gathered at the Philippine International Convention Center in Manila, and nearly 15,000 more joined online, for WordCamp Asia 2025. It’s the people. It’s the friendships and the stories. Matt Mullenweg, WordPress Cofounder The flagship WordPress event started with a dedicated Contributor Day, followed by two days of engaging talks, […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Nicholas Garofalo\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:56717:\"\n
\"WordCamp
\n\n\n\n

Over 1,400 attendees from 71 countries gathered at the Philippine International Convention Center in Manila, and nearly 15,000 more joined online, for WordCamp Asia 2025.

\n\n\n\n
\n

It’s the people. It’s the friendships and the stories.

Matt Mullenweg, WordPress Cofounder
\n
\n\n\n\n

The flagship WordPress event started with a dedicated Contributor Day, followed by two days of engaging talks, panels, hands-on workshops, and networking. Notable guests included WordPress Cofounder Matt Mullenweg and Gutenberg Lead Architect Matías Ventura, who were joined by a diverse lineup of speakers and panelists.

\n\n\n\n

Throughout the event, the sponsor hall buzzed with activity as companies from across the WordPress ecosystem showcased their latest products, engaged with attendees, and offered live demos and giveaways. Each day, attendees refueled with diverse food offerings featuring Filipino favorites, turning meals into a prime networking opportunity where new connections were made and ideas were exchanged.

\n\n\n\n

New Ways to Engage

\n\n\n\n

This year’s event introduced several new programs to the schedule:

\n\n\n\n
    \n
  • Solutions Spotlight—a series of dynamic 10-minute lightning talks that gave an inside look at innovative products, cutting-edge strategies, and real-world solutions from top-tier sponsors, all designed to help attendees succeed in the WordPress ecosystem. These fast-paced sessions offered a unique opportunity to discover how leading brands are solving challenges, empowering users, and shaping the future of WordPress.
  • \n\n\n\n
  • YouthCamp, a dedicated event for kids and teens ages 8-17, offered a full day of free, hands-on sessions designed to spark creativity and introduce the world of WordPress and open source. Through interactive workshops covering web basics, design, and development, participants gained practical skills while exploring the power of building online. 
  • \n\n\n\n
  • The new Career and Social Corners enhanced networking, fostered meaningful connections, and created new opportunities for those within the WordPress community. Career Corner was the go-to space for attendees exploring career opportunities, connecting with sponsors, and discovering exciting new roles. Meanwhile, Social Corner offered a relaxed, lounge-style environment where attendees could engage in informal discussions over refreshments.
  • \n
\n\n\n\n

Contributor Day

\n\n\n\n

WordCamp Asia kicked off with an incredible Contributor Day, bringing together almost 800 contributors, many of them new, to collaborate, share knowledge, and give back to WordPress. With 37 dedicated table leads and 16 experts from the Human Library guiding the way, participants of all experience levels engaged in meaningful discussions, tackled important tasks, and made a lasting impact on the WordPress project.

\n\n\n\n\n\n\n\n

Key contributions included resolving a critical media bug, advancing vertical text editing in Gutenberg, and refining the editing experience with dozens of issue closures. Performance optimizations and accessibility improvements abounded, joined by seven fresh patterns, and over 44,000 newly translated strings.

\n\n\n\n

New tools and workflows were explored to enhance testing and development. The day also saw meaningful conversations between hosting providers and users, improvements to event organizing processes, and hands-on training.

\n\n\n\n

With innovative ideas, new faces, and significant progress across multiple areas, Contributor Day reinforced the spirit of open source collaboration that drives WordPress forward.

\n\n\n\n

The Future is WordPress

\n\n\n\n

On the first full conference day, attendees gathered to celebrate the power of open source collaboration and innovation. Opening remarks from global and local event leads reflected on the incredible journey of WordCamp Asia, tracing its roots back to the first Southeast Asian WordCamp in Manila in 2008. This full-circle moment underscored how the WordPress community has flourished over the years, driven by shared knowledge and a commitment to an open web. The excitement continued with a highly anticipated opening keynote from Matías Ventura, who shared insights into the future of Gutenberg and WordPress, inspiring attendees to embrace the next wave of innovation and creativity in content publishing.

\n\n\n\n
\n\n
\n\n\n\n

The day then began in earnest. Talks highlighted new ways to integrate WordPress with external applications, opening possibilities for more interactive and scalable digital experiences. Simultaneously, content strategists and marketers explored evolving best practices in SEO, learning how to optimize their sites for visibility, engagement, and long-term growth. These sessions emphasized the importance of adaptability in a constantly evolving digital landscape, ensuring that WordPress users stay ahead of industry trends.

\n\n\n\n

Workshops throughout the day provided hands-on learning experiences tailored to a wide range of skill levels. Developers refined their expertise, gaining practical knowledge they could apply to their own projects. Accessibility advocates led discussions on designing for inclusivity, showcasing strategies to make WordPress-powered websites more navigable and user-friendly for people of all abilities.

\n\n\n\n

As the conference continued into the afternoon, conversations expanded to performance optimization and emerging technologies shaping the future of WordPress. A dedicated session explored AI-driven workflows, demonstrating how artificial intelligence can enhance site performance, automate repetitive tasks, and create more personalized user experiences. These discussions showcased the evolving role of WordPress as a versatile platform that extends beyond traditional publishing.

\n\n\n\n

The first day culminated in a thought-provoking keynote panel, WordPress in 2030, where industry leaders explored the future of the platform. The discussion covered the expanding open source community, emerging technologies, and the role of education and mentorship. Panelists shared their perspectives on the opportunities and challenges ahead, encouraging attendees to actively shape the future of WordPress by contributing, innovating, and advocating for an open web.

\n\n\n\n
\"Panelists
\n\n\n\n

Returning for the final day of WordCamp Asia 2025, attendees explored a new set of sessions designed to push the boundaries of web development and strategy. Technical discussions on advanced Gutenberg block development highlighted innovative ways to build more dynamic and interactive content experiences, while another session examined performance optimization strategies to enhance site speed, accessibility, and overall user engagement. Content creators and marketers gained valuable insights into audience growth, effective storytelling, and data-driven content strategies to maximize impact.

\n\n\n\n

The final sessions of the conference reinforced WordPress’s adaptability and innovation, equipping attendees with new skills and strategies.

\n\n\n\n

Q&A

\n\n\n\n

As the final day drew to a close, Matt shared historic photos from WordCamp Davao 2008 in the Philippines, and then answered questions from the audience.

\n\n\n\n
\n\n
\n\n\n\n

Questions covered a variety of topics, incluiding: publishing on the open web, AI, headless WordPress, education, and Matt’s personal motivations. It was clear throughout the Q&A that the future of WordPress is as bright as the island-themed attire at the event’s after-party.

\n\n\n\n

Closing

\n\n\n\n

Thank you to all the hard-working organizers who made this event possible, the speakers who took the stage, the visitors who ventured to Manila, and everyone who tuned in from around the world. Our hope is that every WordCamp attendee leaves with new knowledge, new friends, and new inspiration to build a better web.

\n\n\n\n\n\n\n\n

Be sure to mark your calendars for other major WordPress events in 2025: WordCamp Europe (Basel, Switzerland) and WordCamp US (Portland, Oregon, USA). Then join us in Mumbai, India for WordCamp Asia 2026!

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18515\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:5;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:25:\"Report: WordPress in 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:60:\"https://wordpress.org/news/2025/02/wordpress-in-2025-report/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 15 Feb 2025 03:19:09 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:7:\"General\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18475\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:379:\"This year is set to be transformative for WordPress, yet many decision-makers risk overlooking the immense opportunities ahead. Our new “WordPress in 2025” report highlights why WordPress should be a cornerstone of your long-term strategy. Stay ahead of the curve—read the report now to see how WordPress can drive growth and innovation for your business in the […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:9:\"Noel Tock\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:3721:\"\n

This year is set to be transformative for WordPress, yet many decision-makers risk overlooking the immense opportunities ahead. Our new “WordPress in 2025” report highlights why WordPress should be a cornerstone of your long-term strategy. Stay ahead of the curve—read the report now to see how WordPress can drive growth and innovation for your business in the years to come.

\n\n\n\n
\"\"
\n\n\n\n

Some of the key points we explore: 

\n\n\n\n
    \n
  • As proprietary “next-gen” CMS hype fizzles out and enterprise budgets shift priorities, open-source CMSs like WordPress are primed to gain ground in the commoditized CMS space. WordPress’ maturity and extensibility provide a high starting point for innovation.
  • \n\n\n\n
  • WordPress’ Block Editor has seen tremendous investment, amassing over 34,000 commits – more than entire competing CMS projects. New capabilities like Full Site Editing (FSE) give enterprises unprecedented ability to enable no-code site building.
  • \n\n\n\n
  • Just as being the first user-friendly publishing tool propelled WordPress’ initial growth, AI presents a similar opportunity. WordPress’ contributor community can build not just AI features, but an exciting multi-agent, LLM-agnostic ecosystem representing an intelligent content operating system.
  • \n\n\n\n
  • Pure-play headless vendors are working backwards to add no-code editing, while WordPress has long supported robust headless capabilities alongside its mature editor. For complex sites, hybrid architectures leveraging both are the pragmatic path forward.
  • \n
\n\n\n\n

Download the full WordPress in 2025 (PDF) report directly to learn more.

\n\n\n\n

Don’t miss WP:25, the virtual event.

\n\n\n\n

Save your spot at our free event, WP:25, exploring the future of WordPress and featuring key people working with many of the ideas discussed in the report.

\n\n\n\n
\n\n\n\n

About the report’s author, Noel Tock — Having built his first website back in 1995, Noel has long been watching the evolution of the CMS space. As a co-owner at one of the leading enterprise WordPress agencies, Human Made, his belief in the power of open source is as great as ever. Human Made is a WordPress VIP Gold Partner specializing in DXP, headless, AI and more.

\n\n\n\n

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18475\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:6;a:6:{s:4:\"data\";s:60:\"\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"WordCamp Asia 2025: Manila Magic\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"https://wordpress.org/news/2025/02/wordcamp-asia-2025-manila-magic/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 14 Feb 2025 16:04:45 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:2:{i:0;a:5:{s:4:\"data\";s:6:\"Events\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"WordCamp\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18482\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:409:\"The first major WordCamp of the year is here! WordCamp Asia 2025 lands in Manila, Philippines, from February 20-22, bringing together open source enthusiasts, developers, and WordPress professionals from across the region—and the world. With three packed days of learning, networking, and collaboration, this year’s event promises fresh insights, dynamic discussions, and plenty of opportunities […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Bernard Meyer\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:4844:\"\n
\"WordCamp
\n\n\n\n

The first major WordCamp of the year is here! WordCamp Asia 2025 lands in Manila, Philippines, from February 20-22, bringing together open source enthusiasts, developers, and WordPress professionals from across the region—and the world.

\n\n\n\n

With three packed days of learning, networking, and collaboration, this year’s event promises fresh insights, dynamic discussions, and plenty of opportunities to connect.

\n\n\n\n

Solutions spotlight

\n\n\n\n

Throughout the conference days, multiple presentations will focus on the solutions provided by our amazing sponsors. This is a great opportunity to learn more about their initiatives and solutions.

\n\n\n\n\n\n\n\n

Keynotes, panels, and deep dives

\n\n\n\n

The main conference, which will be held on February 21-22, will feature a lineup of notable keynote speakers, including digital innovation leaders and open-source advocates. Attendees can expect diverse sessions on business strategy, development of best practices, and technical advancements.

\n\n\n\n

For those looking to sharpen their skills, presentations will dive deep into topics like SEO for WordPress, performance optimization, and AI-powered content creation. Plus, don’t miss the electrifying WordPress Speed Build Battle, where developers race to create stunning sites in record time.

\n\n\n\n

YouthCamp

\n\n\n\n

On February 22, WordCamp Asia 2025 will host YouthCamp, a pre-registered event designed to introduce young minds to WordPress and its endless possibilities. This initiative aims to engage the next generation of WordPress users, developers, and contributors through hands-on activities and interactive sessions

\n\n\n\n

Closing Q&A with Matt Mullenweg

\n\n\n\n

WordPress Cofounder Matt Mullenweg will wrap up the event with a live Q&A session on February 22. Whether attending in person or tuning in online, you can catch his insights live on the WordPress YouTube channel at 4:00 p.m. Philippine Time (08:00 UTC).

\n\n\n\n

After party

\n\n\n\n

As the sun sets on WordCamp Asia 2025, the excitement continues with the After Party (theme: Island Vibe)! Get ready to experience the vibrant spirit of the Philippines with a lively gathering at The Forum at PICC. Expect a night filled with great conversations, music, and a celebration of the WordPress community.

\n\n\n\n

Get WordCamp-ready

\n\n\n\n\n\n\n\n

As always, be part of the conversation! Whether you’re attending in Manila or following along online, share your experiences using #WCAsia and #WordPress.

\n\n\n\n

Manila is calling—see you at WordCamp Asia 2025!

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18482\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:7;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"WordPress 6.7.2 Maintenance Release\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"https://wordpress.org/news/2025/02/wordpress-6-7-2-maintenance-release/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Feb 2025 16:52:23 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18445\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:371:\"WordPress 6.7.2 is now available! This minor release includes 35 bug fixes, addressing issues affecting multiple components including the block editor, HTML API, and Customize. WordPress 6.7.2 is a short-cycle release. The next major release will be version 6.8 planned for April 15, 2025. If you have sites that support automatic background updates, the update […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Aaron Jorbin\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:8487:\"\n

WordPress 6.7.2 is now available!

\n\n\n\n

This minor release includes 35 bug fixes, addressing issues affecting multiple components including the block editor, HTML API, and Customize.

\n\n\n\n

WordPress 6.7.2 is a short-cycle release. The next major release will be version 6.8 planned for April 15, 2025.

\n\n\n\n

If you have sites that support automatic background updates, the update process will begin automatically.

\n\n\n\n

You can download WordPress 6.7.2 from WordPress.org, or visit your WordPress Dashboard, click “Updates”, and then click “Update Now”. For more information on this release, please visit the HelpHub site.

\n\n\n\n

Thank you to these WordPress contributors

\n\n\n\n

This release was led by Aaron Jorbin.

\n\n\n\n

WordPress 6.7.2 would not have been possible without the contributions of the following people. Their asynchronous coordination to deliver maintenance fixes into a stable release is a testament to the power and capability of the WordPress community.

\n\n\n\n

Aaron Jorbin, Alex Lende, Alexandre Buffet, Andreas Pedersen, Andrew Ozz, Ankit Kumar Shah, apermo, Benedikt Ledl, bernhard-reiter, Brian Alexander, Carlos Bravo, Carolina Nymark, Cyrille, Daniel Post, darerodz, David Calhoun, David Smith, Dennis Snell, dhewercorus, Dion Hulse, Doug Wollison, Ella, Eshaan Dabasiya, Fabian Kägy, Fabian Todt, Felix Arntz, Felix Renicks, Francis Cabusas, Frank B., George Mamadashvili, ghinamt, Glynn Quelch, Greg Ziółkowski, James Koster, Jarda Snajdr, Jb Audras, jdnd, jeryj, Joe Dolson, Joe McGill, Jon Surrell, Jonathan Desrosiers, juanwp22, Juliette Reinders Folmer, Karthick, Kazuto Takeshita, Kelly Choyce-Dwan, Ketan Niruke, Lena Morita, levskipg, Maciej Ma?kowiak, Mario Santos, Matthew Boynes, Mayank Tripathi, Michal Czaplinski, Miguel Fonseca, Mitchell Austin, mreishus, Mukesh Panchal, Nadir Seghir a11n, Narendra Sishodiya, Naresh Bheda, neotrope, Nick Diego, Olga Gleckler, Parth vataliya, Pascal Birchler, paullb, Peter Wilson, Pitam Dey, redkite, Rishav Dutta, robertstaddon, rvoigt, Sagar Tamang, Sainath Poojary, seanlanglands, Sergey Biryukov, Scott Reilly, Shyam Kariya, smerriman, Stephen Bernhardt, Sukhendu Sekhar Guria, TobiasBg, Tonya Mork, Vishy Moghan, Weston Ruter, wongjn, Yogesh Bhutkar, zaoyao

\n\n\n\n

How to contribute

\n\n\n\n

To get involved in WordPress core development, head over to Trac, pick a ticket, and join the conversation in the #core and #6-8-release-leads channels. Need help? Check out the Core Contributor Handbook.

\n\n\n\n

Props to @joedolson, @joemcgill and @audrasjb for proofreading.

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18445\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:8;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:16:\"Joost/Karim Fork\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://wordpress.org/news/2025/01/jkpress/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 11 Jan 2025 02:06:06 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Meta\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18394\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:319:\"Making great software, great product that stands the test of time and not just survives but thrives through monumental technological shifts is incredibly hard. That challenge is part of the reason I love doing it. There is never a dull day, and the reward of seeing the code you wrote used by the most amazing […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:9904:\"\n

Making great software, great product that stands the test of time and not just survives but thrives through monumental technological shifts is incredibly hard. That challenge is part of the reason I love doing it. There is never a dull day, and the reward of seeing the code you wrote used by the most amazing creators in the world is an indescribable pleasure. When I see what people create with WordPress, some days I feel like I’m grinding pigment for Leonardo da Vinci or slitting a quill for Beethoven.

\n\n\n\n

In open source, one thing that makes it even harder to ship great software is bringing together disparate groups of contributors who may have entirely different incentives or missions or philosophies about how to make great work. Working together on a team is such a delicate balance, and even one person rowing in the wrong direction can throw everyone else off.

\n\n\n\n

That’s why periodically I think it is very healthy for open source projects to fork, it allows for people to try out and experiment with different forms of governance, leadership, decision-making, and technical approaches. As I’ve said, forking is beautiful, and forks have my full support and we’ll even link and promote them.

\n\n\n\n

Joost is a self-proclaimed leader in the SEO space, an industry known for making the web better. He asked for and I gave him WordPress marketing leadership responsibility in January 2019 and he stepped down in June of 2019, I think we would both agree in those 5 months he was not effective at leading the marketing team or doing the work himself.

\n\n\n\n

Karim leads a small WordPress agency called Crowd Favorite which counts clients such as Lexus and ABC and employs ~50 people.

\n\n\n\n

Both are men I have shared meals with and consider of the highest integrity. I would trust them to watch any of my 15 godchildren for a day. These are good humans. Now go do the work. It probably won’t happen on day one, but Joost and Karim’s fork, which I’ll call JKPress until they come up with a better name, has a number of ideas they want to try out around governance and architecture. While Joost and Karim will be unilaterally in charge in the beginning, it sounds like they want to set up:

\n\n\n\n
    \n
  1. A non-profit foundation, with a broad board to control their new project.
  2. \n\n\n\n
  3. A website owned by that foundation which hosts community resources like a plugin directory, forums, etc.
  4. \n\n\n\n
  5. No more centralized and moderated plugin and theme directories with security guidelines or restrictions are what plugins are allowed to do like putting banners in your admin or gathering data, everything done in a federated/distributed manner.
  6. \n\n\n\n
  7. The trademarks for their new project will either be public domain or held by their foundation.
  8. \n\n\n\n
  9. “Modernization” of the technology stack, perhaps going a Laravel-like approach or changing how WordPress’ architecture works.
  10. \n\n\n\n
  11. Teams and committees to make decisions for everything, so no single person has too much power or authority.
  12. \n
\n\n\n\n

Karim has a similar post. Joost says he has the time and energy to lead:

\n\n\n\n
\n

So @photomatt – I saw the post by @automattic.

I'm ready to lead the next releases. I am sure plenty of people and companies are willing to help me and we've got plenty of ideas on what we should be doing.#WordPress

— Joost de Valk (@jdevalk) January 10, 2025
\n
\n\n\n\n

Now, as core committer Jb Audras (not employed by me or Automattic) points out, within WordPress we have a process in which people earn the right to lead a release:

\n\n\n\n
\n

Before leading any major release of WordPress, please start with leading a minor one @jdevalk. Then, apply to be Triage Lead or Coordination Lead Deputy for a major release. These are the steps everyone in our community should follow before claiming to run « the next releases ».

— Jb Audras (@AudrasJb) January 10, 2025
\n
\n\n\n\n

However in Joost and Karim’s new project, they don’t need to follow our process or put in the hours to prove their worth within the WordPress.org ecosystem, they can just lead by example by shipping code and product to people that they can use, evaluate, and test out for themselves. If they need financial or hosting support is sounds like WP Engine wants to support their fork:

\n\n\n\n
\n

We appreciate @jdevalk and @karimmarucchi thoughtful call for constructive conversation, change and evolved leadership within the WordPress community. Moments of disruption challenge all of us to reflect and to act.

WordPress’s success as the most widely used CMS is not the…

— WP Engine (@wpengine) December 20, 2024
\n
\n\n\n\n

Awesome! (Maybe it’s so successful they rebrand as JK Engine in the future.) WP Engine, with its half a billion in revenue and 1,000+ employees, has more than enough resources to support and maintain a legitimate fork of WordPress. And they are welcome to use all the GPL code myself and others have created to do so, including many parts of WordPress.org that are open source released under the GPL, and Gutenberg which is GPL + MPL.

\n\n\n\n

Joost also is a major investor (owner?) in Post Status (which he tried to sell to me a few months ago, and I declined to buy, perhaps kicking off his consternation with me), so they have a news media site and Slack instance already ready to go. He also is an investor in PatchStack and appears to be trying to create a new business around something called Progress Planner, both of which could be incorporated into the new non-profit project to give them some competitive distinctions from WordPress.

\n\n\n\n

To make this easy and hopefully give this project the push it needs to get off the ground, I’m deactivating the .org accounts of Joost, Karim, Se Reed, Heather Burns, and Morten Rand-Hendriksen. I strongly encourage anyone who wants to try different leadership models or align with WP Engine to join up with their new effort.

\n\n\n\n

In the meantime, on top of my day job running a 1,700+ person company with 25+ products, which I typically work 60-80 hours a week on, I’ll find time on nights and weekends to work on WordPress 6.8 and beyond. Myself and other “non-sponsored” contributors have been doing this a long time and while we may need to reduce scope a bit I think we can put out a solid release in March.

\n\n\n\n

Joost and Karim have a number of bold and interesting ideas, and I’m genuinely curious to see how they work out. The beauty of open source is they can take all of the GPL code in WordPress and ship their vision. You don’t need permission, you can just do things. If they create something that’s awesome, we may even merge it back into WordPress, that ability for code and ideas to freely flow between projects is part of what makes open source such an engine for innovation. I propose that in a year we do a WordPress + JKPress summit, look at what we’ve shipped and learned in the process, which I’d be happy to host and sponsor in NYC next January 2026. The broader community will benefit greatly from this effort, as it’s giving us a true chance to try something different and see how it goes.

\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18394\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:9;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"WordPress Themes Need More Weird: A Call for Creative Digital Homes\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:102:\"https://wordpress.org/news/2025/01/wordpress-themes-need-more-weird-a-call-for-creative-digital-homes/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 02 Jan 2025 18:53:06 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:6:\"Design\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18358\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:409:\"The modern web has gradually shifted from a vibrant tapestry of personal expression to a landscape of identical designs, where millions of websites share not just similar structures, but identical visual language, spacing, and interaction patterns. As we collectively gravitate toward the same “proven” layouts and “conversion-optimized” designs, we’re not just losing visual diversity – […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:10:\"Nick Hamze\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:7673:\"\n

The modern web has gradually shifted from a vibrant tapestry of personal expression to a landscape of identical designs, where millions of websites share not just similar structures, but identical visual language, spacing, and interaction patterns. As we collectively gravitate toward the same “proven” layouts and “conversion-optimized” designs, we’re not just losing visual diversity – we’re ceding control over how we present ourselves to the world. This matters because genuine self-expression online isn’t just about aesthetics – it’s about maintaining spaces where authentic voices can flourish. 

\n\n\n\n

When every blog has the same hero section, when every portfolio follows the same grid, when every restaurant site looks interchangeable, we create an echo chamber of sameness. The cost isn’t just visual monotony – it’s the slow erosion of the web’s ability to surprise, delight, and showcase truly individual perspectives. WordPress, with its emphasis on complete ownership and control, offers an opportunity to break free from this convergence of design, allowing creators to build digital spaces that truly reflect their unique voice and vision.

\n\n\n\n

Think of WordPress themes like album covers. They should have personality and create an immediate visual impact. The web has become too sanitized, with everyone chasing the same minimal, “professional” look.

\n\n\n\n

Great themes should:

\n\n\n\n
    \n
  • Have a strong point of view – like how Kubrick (the classic WordPress theme) defined an era with its distinctive header gradient. Don’t try to be everything to everyone.
  • \n\n\n\n
  • Embrace specific aesthetics boldly – whether that’s brutalist design, pixel art, hand-drawn elements, or distinctive typography. Create themes that excite people rather than just working for everyone.
  • \n\n\n\n
  • Design for specific use cases – like a theme for photographers that’s all about full-bleed images or a theme for writers that treats typography as art or a theme for musicians that feels like an album cover.
  • \n\n\n\n
  • Break some rules thoughtfully – because not every theme needs a hamburger menu. Not every theme needs to be mobile-first. Sometimes constraints create character.
  • \n
\n\n\n\n

We need more themes that make people say “Wow!” or “That’s different!” rather than “That’s clean and professional.” The web needs more personality, more risk-taking, more fun.

\n\n\n\n

After spending countless hours digging through the WordPress theme repository, searching for designs that break the mold and spark excitement, I came up nearly empty-handed. Don’t get me wrong – there are plenty of well-built themes out there. But where’s the daring? The personality? The unexpected?

\n\n\n\n

If you’ve got a wild theme idea burning in your mind – that portfolio theme that looks like a vintage trading card collection, that blog theme inspired by zine culture, that restaurant theme that feels like a hand-drawn menu – now’s the time to build it. WordPress desperately needs your creativity, your weird ideas, your willingness to break the visual rules. The future of the web shouldn’t be a monochrome landscape of identical layouts. Let’s make WordPress themes exciting again. Let’s make the web weird again.

\n\n\n\n\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18358\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}s:27:\"http://www.w3.org/2005/Atom\";a:1:{s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:0:\"\";s:7:\"attribs\";a:1:{s:0:\"\";a:3:{s:4:\"href\";s:32:\"https://wordpress.org/news/feed/\";s:3:\"rel\";s:4:\"self\";s:4:\"type\";s:19:\"application/rss+xml\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:44:\"http://purl.org/rss/1.0/modules/syndication/\";a:2:{s:12:\"updatePeriod\";a:1:{i:0;a:5:{s:4:\"data\";s:9:\"\n hourly \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:15:\"updateFrequency\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"\n 1 \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:4:\"site\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"14607090\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}}}}}}s:4:\"type\";i:128;s:7:\"headers\";O:48:\"WpOrg\\Requests\\Utility\\CaseInsensitiveDictionary\":1:{s:7:\"\0*\0data\";a:12:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Tue, 01 Apr 2025 10:13:40 GMT\";s:12:\"content-type\";s:34:\"application/rss+xml; charset=UTF-8\";s:4:\"vary\";s:37:\"Accept-Encoding, accept, content-type\";s:25:\"strict-transport-security\";s:12:\"max-age=3600\";s:6:\"x-olaf\";s:3:\"⛄\";s:13:\"last-modified\";s:29:\"Tue, 25 Mar 2025 16:26:23 GMT\";s:4:\"link\";s:63:\"; rel=\"https://api.w.org/\"\";s:15:\"x-frame-options\";s:10:\"SAMEORIGIN\";s:16:\"content-encoding\";s:2:\"br\";s:7:\"alt-svc\";s:19:\"h3=\":443\"; ma=86400\";s:4:\"x-nc\";s:9:\"HIT ord 1\";}}s:5:\"build\";i:1743023515;s:21:\"cache_expiration_time\";i:1743545620;s:23:\"__cache_expiration_time\";i:1743545620;}','off'),(185,'_transient_timeout_feed_d117b5738fbd35bd8c0391cda1f2b5d9','1743545621','off'),(186,'_transient_feed_d117b5738fbd35bd8c0391cda1f2b5d9','a:6:{s:5:\"child\";a:1:{s:0:\"\";a:1:{s:3:\"rss\";a:1:{i:0;a:6:{s:4:\"data\";s:3:\"\n\n\n\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:7:\"version\";s:3:\"2.0\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:1:{s:7:\"channel\";a:1:{i:0;a:6:{s:4:\"data\";s:61:\"\n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:16:\"WordPress Planet\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://planet.wordpress.org/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"language\";a:1:{i:0;a:5:{s:4:\"data\";s:2:\"en\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:47:\"WordPress Planet - http://planet.wordpress.org/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"item\";a:50:{i:0;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"Do The Woo Community: Engaging Young People in the WordPress Community\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=88452\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://dothewoo.io/blog/engaging-young-people-in-the-wordpress-community/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:248:\"The WordPress community must engage younger generations by simplifying onboarding, providing education, promoting career opportunities, and fostering connections, ensuring sustainable contributions to the platform’s future development and growth.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 31 Mar 2025 09:10:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:1;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:123:\"Gutenberg Times: Field Guide, No-Code Theme, Pattern Library, why you might not need a Custom Block — Weekend Edition 323\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=38176\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:127:\"https://gutenbergtimes.com/field-guide-no-code-theme-pattern-library-why-you-might-not-need-a-custom-block-weekend-edition-323/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:18955:\"

Hi,

\n\n\n\n

Spring is here. On the weekend I saw Forsythia bushes in full bloom all over the city. Yesterday, I passed the National Museum and saw their Magnolia trees blooming as well. The temperatures are still too low for my taste, but not for long. ?️

\n\n\n\n\"\"\n\n\n\n

“Isn’t this a WordPress newsletter”, you might think. I know, I know. Let’s get on with it, then. Carpe diem! ?

\n\n\n\n

Have a fabulous weekend!

\n\n\n\n

Yours, ?
Birgit

\n\n\n\n

PS: The links for mentioned people are now going to their Blue Sky profile, and if I couldn’t find them, it’s till their X (formerly known as Twitter) profile.

\n\n\n\n

Follow us on Bluesky @bph.social and @gutenbergtimes.com

\n\n\n\n\n\n\n\n
\n\n\n\n

The Page Builder summit 2025 is on the calendar now: Anchen le Roux and Nathan Wrigley announced the eighth edition of the virtual conference will take place from 12th to 16th of May 2025. Save the date, and add your name to the Waitlist, to receive info, when registration opens. “The summit is a 5-day event that will help WordPress developers, designers, freelancers, and agencies to build better websites faster and more efficient. As well as learn more about the page builders and the awesome things you can do with them. “, they wrote.

\n\n\n\n
\n\n\n\n

Web Agency Summit 2025 will happen April 7-11, 2025. “Learn proven strategies top agencies are using today to scale sustainably, streamline operations, attract high-value clients, and stay ahead of the curve.”

\n\n\n\n
\n\n\n\n

WordSesh returns May 13–15, 2025. It is a virtual conference for WordPress professionals. Its host, Brian Richards, is a seasoned virtual conference producer and WordPress educator. His speaker and session curation is top-notch. Sign up to receive updates on the next event.

\n\n\n\n

Developing Gutenberg and WordPress

\n\n\n\n

WordPress 6.8 Release Candidate 1 is now available for testing. Final release is scheduled for April 15, 2025

\n\n\n\n
    \n
  • You can check out the post Help Test WordPress 6.8 with detailed instructions and videos on selected features.
  • \n\n\n\n
  • The Field Guide holds relevant information for developers about the new version.
  • \n\n\n\n
  • The Source of Truth compliments with detailed information on block editor features for end users, plugin, and theme developers.
  • \n
\n\n\n\n

The latest Dev Notes for WordPress 6.8

\n\n\n\n\n\n\n\n
\n\n\n\n

Gutenberg 20.6

\n\n\n\n

George Mamadashvili released Gutenberg 20.6 RC 1 version, and it’s ready for testing. What to expect in this version?

\n\n\n\n
    \n
  • The Table of contents block received a new option to control the level of heading included. (69063)
  • \n\n\n\n
  • The Navigation block now sports a slider to control the transparency for submenu background. (69063)
  • \n\n\n\n
  • The RSS block now has an option to allow opening the links in a new tab and set the rel attribute. (69641)
  • \n
\n\n\n
\n \n
\n \n \n \n
\n\n\n
\n

?️ Latest episode: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia with special guest Jessica Lyschik.

\n\n\n\n\"Jessica\n
\n\n\n\n

Plugins, Themes, and Tools for #nocode site builders and owners

\n\n\n\n

Wes Theron created a video tutorial to teach you How to Build a WordPress Theme the No-Code Way. He shows you where to update your colors, choose your fonts, modify the Single page template and then use the Create block Theme plugin to save all the settings into a new theme’s file structure.

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

In this short video on X (former Twitter), Jamie Marsland shows us How to create a One-Pager website with WordPress, using the site editor, core blocks and some custom CSS.

\n\n\n\n
\n\n\n\n

MahdiAli Khanusiya, is the designer behind the PatternWP plugin that offers a big library of WordPress block patterns and full-page templates. Using it will instantly increase the range of designs and layout you can offer your customers, and streamline your production process. There is also a pro version available.

\n\n\n\n\"\"\n\n\n\n

Theme Development for Full Site Editing and Blocks

\n\n\n\n

Latest six block themes in the WordPress repository:

\n\n\n\n\n\n\n\n\"\"\n\n\n\n

 “Keeping up with Gutenberg – Index 2025” 
A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. The previous years are also available: 2020 | 2021 | 2022 | 2023 | 2024

\n\n\n\n

Building Blocks and Tools for the Block editor.

\n\n\n\n

In his post How to extend core WordPress blocks with Blocks API, Joel Olawanle, technical editor at Kinsta, introduced you to the basic extension methods like Block Styles and Block Variations with code examples and multiple ways to accomplish the tasks.

\n\n\n\n
\n\n\n\n

Alfredo Navas, web developer at WebDev Studios, wrote a tutorial on how to use the Block Bindings API and why you might not need a Custom Block. Navas walks you through registering a Custom Source, how to create a Block Variation with custom data and making it all work in the editor and on the front end.

\n\n\n\n
\n\n\n\n

In last week’s livestream, Ryan Welcher created a new WordPress block theme for the Block Developer Cookbook and gave it a new look. You can watch him turning change his color scheme and turn his existing theme into a style variation.

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

Brian Coords found a way to create Dynamic WordPress Playground Blueprints with Cloudflare Workers and shared in his video how he built a system to spin up demo WooCommerce stores. The code lives on GitHub

\n\n\n
\n
\n
\n
\n
\n\n\n

Need a plugin .zip from Gutenberg’s master branch?
Gutenberg Times provides daily build for testing and review.

\n\n\n\n

Now also available via WordPress Playground. There is no need for a test site locally or on a server. Have you been using it? Email me with your experience

\n\n\n\n

\"GitHub

\n\n\n\n

Questions? Suggestions? Ideas?
Don’t hesitate to send them via email or
send me a message on WordPress Slack or Twitter @bph.

\n\n\n\n
\n\n\n\n

For questions to be answered on the Gutenberg Changelog,
send them to changelog@gutenbergtimes.com

\n\n\n\n
\n\n\n\n

Featured Image:

\n\n\n\n
\n\n\n\n

Don’t want to miss the next Weekend Edition?

\n\n\n

We hate spam, too, and won’t give your email address to anyone
except Mailchimp to send out our Weekend Edition

Thanks for subscribing.
\n\n\n
\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 29 Mar 2025 09:21:31 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:2;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:83:\"Do The Woo Community: Christian Taylor Joins as Co-Host of the Creative Sparks Show\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93581\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"https://dothewoo.io/christian-taylor-joins-as-co-host-of-the-creative-sparks-show/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:96:\"BobWP announces new co-hosts for the Content Sparks show, video content expert Christian Taylor.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 28 Mar 2025 11:40:15 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:3;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: Do the Woo Friday Shares, March 28, 2025 v12\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93556\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"https://dothewoo.io/blog/do-the-woo-friday-shares-march-28-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:206:\"This content highlights our carefully selected information and resources from the Woo and WordPress community, aiming to provide valuable insights and updates for users and enthusiasts in the digital space.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 28 Mar 2025 08:42:11 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:4;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"Do The Woo Community: WordPress Flexibility and Simplicity: Building for Users with Ben Ritner\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93525\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:92:\"https://dothewoo.io/wordpress-flexibility-and-simplicity-building-for-users-with-ben-ritner/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:384:\"In today’s Woo ProductChat, co-hosts Katie Keith, founder and CEO at Barn2, and James Kemp, the core product manager at WooCommerce, sit down with Ben Ritner, the Senior Director of Product at StellarWP. They dive into the intricate balance between customizability and simplicity in WordPress products, particularly focusing on Ben’s work with the Cadence suite. […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 27 Mar 2025 16:39:33 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:5;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:78:\"Do The Woo Community: Leveling Out the Audio on a Podcast with Multiple Guests\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93358\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"https://dothewoo.io/blog/leveling-out-the-audio-on-a-podcast-with-multiple-guests/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:252:\"Podcasting requires managing sound levels effectively, especially during livestreams. Auphonic, with its Loudness Normalization feature, simplifies post-production, ensuring balanced audio quality and saving valuable time for creators, plus a lot more.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 27 Mar 2025 12:26:21 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:6;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:68:\"BuddyPress: BuddyPress 14.3.4, 12.5.3 & 11.4.4 Security Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"https://buddypress.org/?p=336835\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:81:\"https://buddypress.org/2025/03/buddypress-14-3-4-12-5-3-11-4-4-security-releases/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2347:\"

BuddyPress 14.3.4, BuddyPress 12.5.3, and BuddyPress 11.4.4 are all now available. This is a security release. Please update as soon as possible.

\n\n\n\n

14.3.4, 12.5.3 & 11.4.4 fixed two bugs:

\n\n\n\n
    \n
  • Restrict bulk notification management to owner. Many thanks to Brian Mungah for responsibly reporting the problem.
  • \n\n\n\n
  • Improve security of status update messages. Many thanks to mikemyers for responsibly reporting the issue.
  • \n
\n\n\n\n

For complete details, visit the 14.3.4 changelog.

\n\n\n\n
\n\n\n\n\n\n\n\n
\n\n\n\n

You can get the latest version by clicking on the above button, downloading it from the WordPress.org plugin directory or checking it out from our Subversion repository.

\n\n\n\n

Many thanks to our 14.3.4 contributors 

\n\n\n\n

emaralivejjj, and dcavins.

\n\n\n\n

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 27 Mar 2025 02:22:26 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"David Cavins\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:7;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:80:\"WPTavern: #162 – Jo Minney on Website Usability Testing for WordPress Projects\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=193251\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"https://wptavern.com/podcast/162-jo-minney-on-website-usability-testing-for-wordpress-projects\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:54757:\"Transcript
\n

[00:00:00] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.

\n\n\n\n

Jukebox is a podcast which is dedicated to all things WordPress, the people, the events, the plugins, the blocks, the themes, and in this case, the efficacy of website usability testing for WordPress projects.

\n\n\n\n

If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice. Or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

\n\n\n\n

If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

\n\n\n\n

Today I bring you the first in a mini series of podcasts I recorded in person at WordCamp Asia in Manila. This flagship WordPress event brought together hundreds of WordPress professionals, enthusiasts, and all manner of interested parties under one roof for a three day event. One contributor day, and two days of presentations.

\n\n\n\n

I tracked down several of the speakers and workshop organizers and recorded them speaking about the subject they were presenting upon. I hope that you enjoy what they had to say.

\n\n\n\n

So on the podcast today, we have the first of those conversations, and it’s with Jo Minney.

\n\n\n\n

Jo based in Perth, Australia, is passionate about user experience, data-driven decision making, cats, pockets, and travel. She’s a small business founder, and works with organizations creating digital platforms with WordPress. She also freelances as a UX consultant. She volunteers with Mission Digital to address social issues using technology, and is an ambassador for She Codes Australia, promoting tech accessibility for women. Recognized as a 2023 Shining Star by Women in Technology, Western Australia, Jo is an international speaker on topics like user experience, accessibility, and gender equality. She’s committed to ensuring a seamless user experience, and today shares her insights from practical, everyday usability testing.

\n\n\n\n

Joe’s presentation entitled, Budget Friendly Usability Testing for WordPress, helped attendees understand what usability testing is, and clarified why it differs from other testing methods. She shares examples from her work showing how small changes can significantly impact user experience, which is better for you, the website builder, and your client, the website owner.

\n\n\n\n

We also discuss how usability testing can transform a website’s effectiveness by improving conversions. Joe explains the importance of recruiting novice users for testing, and highlights how usability testing pushes for real, user-centered, improvements.

\n\n\n\n

Towards the end, Jo share’s practical advice on when and how to integrate usability testing into your process. Advocating for early and iterative testing to preemptively address potential issues.

\n\n\n\n

If you’re looking to gain a deeper understanding of usability testing and its benefits, this episode is for you.

\n\n\n\n

If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast where you’ll find all the other episodes as well.

\n\n\n\n

And so without further delay, I bring you Jo Minney.

\n\n\n\n

I am joined on the podcast by Jo Minney. Hello, Jo.

\n\n\n\n

[00:04:06] Jo Minney: Hi. It’s good to be back again Nathan.

\n\n\n\n

[00:04:08] Nathan Wrigley: Yeah, you’ve been on the podcast before. But this time it’s different because this time we’re actually facing each other. Last time we were doing it on, you know, something like Zoom or something like that, but here we are staring at each other because we’re at WordCamp Asia. We’re in the Philippines, Manila. It is the second day of the event, kind of. We had Contributor Day yesterday. Today is presentation day. It’s the first day of the presentations, and you are doing one.

\n\n\n\n

[00:04:29] Jo Minney: I’ve done one actually. I did it at 11 o’clock this morning.

\n\n\n\n

[00:04:33] Nathan Wrigley: How did it go?

\n\n\n\n

[00:04:34] Jo Minney: It went really well, I think. I had very good feedback from it. Half of the things on my slides didn’t work. I think that’s normal for a conference though, and I’m pretty experienced now at just winging it, and rolling with it anyway, so. It was really exciting because it’s a topic that I’m super passionate about and I haven’t had a chance to speak about it at a conference before. So, yeah, it was really nice to be able to share something that I do on a day-to-day basis and can stand up there and really confidently talk about.

\n\n\n\n

[00:04:58] Nathan Wrigley: I don’t think I’ve ever spoken about this subject before in any of the podcasts that I’ve done. That is quite nice, and it’s novel. I’ll just introduce the topic. The presentation that you gave was called Budget-Friendly Usability Testing for WordPress. And obviously that sort of sums it up. We’re going to talk about usability testing.

\n\n\n\n

But before we do that, Jo, just to nail your colours to the mast a bit, tell us about you. Where you’re from. What you do for a job, and anything that you think is relevant to this podcast.

\n\n\n\n

[00:05:22] Jo Minney: Okay, I really like cats and pockets.

\n\n\n\n

[00:05:25] Nathan Wrigley: I saw that in your show notes. Why pockets?

\n\n\n\n

[00:05:27] Jo Minney: Okay. So I think pockets are a great example of something that can be both a fantastic and a terrible user experience. You are like, oh yeah, maybe I know what you’re talking about. But, let me ask, do you live with a woman?

\n\n\n\n

[00:05:39] Nathan Wrigley: I do.

\n\n\n\n

[00:05:39] Jo Minney: I know that’s a very personal question, sorry Nathan. But, how many times on average a month does she complain about not having pockets in her clothing?

\n\n\n\n

[00:05:48] Nathan Wrigley: Never, she carries a bag.

\n\n\n\n

[00:05:50] Jo Minney: Yeah, but why do we have to carry a bag, right? She has to carry a bag because her clothing doesn’t have pockets. So I spoke at a conference late last year, and I asked this question. This has been a life goal of mine, was to speak about pockets at a conference. And I managed to do it. I asked all of the women in the audience, hands up if you’ve ever thrown out clothes or gotten rid of them because they didn’t have pockets in? And every single woman stood up and was like, yes, I’ve gotten rid of clothes because they didn’t have pockets in.

\n\n\n\n

Most of the people that were there were men. And I said, stand up if you don’t have pockets in your clothes right now. And 400 men stayed seated. But this is an example of something where, yes, there’s a subsection of the population that’s experiencing this problem, but it’s a big problem for us. It’s very frustrating. You’re at a conference, you don’t want to have to carry around a handbag. So, pockets. They’re a great example of user experience.

\n\n\n\n

[00:06:45] Nathan Wrigley: Okay, I get it. I understand now. Tell us a little bit about your sort of day-to-day work, though. You work with WordPress, I guess.

\n\n\n\n

[00:06:51] Jo Minney: I do. So I run a small agency. We’re what I usually call a micro agency, and we have only three of us that are working on the WordPress team. We do website development, but specifically for charities, nonprofits, cause-based organisations, so a lot of social enterprises and that sort of thing.

\n\n\n\n

On top of that, I also do consulting for user experience research. I’m not a designer. UX and UI often get lumped together. They’re very different. UI is about the interface and what people see, and UX is about user experience and how people use things. And they can’t be completely separated, but they’re also very different.

\n\n\n\n

So I am lucky because I work in the niche that I work in, that I’m able to do a lot of usability testing and it’s something that a lot of people don’t get the experience to do. And so I thought I would share what I’ve been able to learn over having this sort of unique opportunity to do so much usability testing, and share with people how they can do it more cost effectively, but also the benefit that it can have for a project.

\n\n\n\n

[00:07:54] Nathan Wrigley: Let’s dig into it and I’m going to actually crib the questions which you posed to the audience today. You put four questions surrounding your subject. And the first one is this. And I’m sure that the listeners to this podcast, if they’re anything like me, they’ll probably have some impression that usability testing is a thing that you could do. And I think the word there is could, as opposed to do, do.

\n\n\n\n

I imagine most people have an impression of what it is, but whether or not they do it is another thing altogether. But that would then lead to this. What even is it? So what is usability testing, and what are you actually testing for? So that was a question you posed to the audience and now I’m throwing it right back at you.

\n\n\n\n

[00:08:34] Jo Minney: Yeah, it’s a good question. It’s probably the sensible place to start. So usability testing is not the same as user testing, or user acceptance testing. And it’s focusing on, how do we identify what the problems are with something that we have created?

\n\n\n\n

So a lot of UX research is focused on what we call quantitative testing. So, meaning we’re looking for quantities of something. It could be the amount of time it takes someone to do an action. It could be using heat maps. So we have a thousand users, let’s see where their cursors most often are going. Let’s see how often they scroll down the page. And quantitative testing is really good at showing you comparisons of whether one thing or another thing works better, but it’s not actually good at identifying what the problem is, only that there is a problem.

\n\n\n\n

So you can do a lot of testing and still not know what the problem is. Usability testing is different because it’s what we call qualitative testing. So it means that we’re not looking for big numbers, we’re not looking for lots of data. We are looking for really deep user experience examples. And in a nutshell, the way that that works is you recruit some participants, usually five people per round is ideal. And often I get asked, well, how can you have statistically significant data with only five people? That’s not the point of qualitative testing. The point of qualitative testing is not to have statistically relevant data, it’s to have the actual user experiences.

\n\n\n\n

So you recruit your people, you come up with your research questions and that’s the problem that you’re trying to solve or the question you’re trying to get an answer to. So, an example might be, are users going to recognise this label that I’ve used in my navigation? Is this button going to get clicked if I put it in this location? It’s often a thing that, if you’re working with a customer to develop a website for them, what we find is that often the things that we are testing for in usability testing are things that the customer and I disagree on, or things where they weren’t sure when they made the decision in the first place. And they’re a great example of things that you want to test for.

\n\n\n\n

But the research questions are only the first part because if I say, the example I used in my talk today is that we had a support service directory. And this was for people who are experiencing family domestic violence. And they didn’t want to use the term directory because it’s a very harsh term. So they had called it support services, which sounds, on the surface like a good idea, but a lot of the people that are using their platform are not English first language. And they also tend to be in a really stressed out state as you can imagine.

\n\n\n\n

And so what we actually found is that when we said to them, can you imagine you’re helping someone, can you help them find a legal service that will enable them to get a restraining order or something like this? What we found is that repeatedly they didn’t go to support services to start with. The minute we changed that to service directory, they started to find the thing that we wanted them to click on.

\n\n\n\n

It’s such a small change, but it made a huge impact, the usability. Now, we found that out after the second test, which meant that we were able to change it after the second test, and then we had three more tests where we could show that every time they were able to find the thing that we wanted them to be looking for.

\n\n\n\n

So this is an example where the research question and the research task or the activity that we’re giving to the user, they’re not the same thing. If we said to them, find support services, find the service directory, if we use that language, obviously they’re going to look for that label. But instead we asked them to do an activity that would hopefully take them to the place we wanted them to go to.

\n\n\n\n

And then finally the last step is to iterate that and to actually take that data and make decisions, and make improvements to the project iteratively to try and make it better. That’s the goal, right? Is to find what the problems are and fix them. So we still have to work out how to fix them, but at least we know what the problems are and not just that people were not clicking on the button and we don’t know why.

\n\n\n\n

[00:12:27] Nathan Wrigley: I have a couple of follow up questions. First thing isn’t the question, it’s an observation. So that’s really cleared up in my head what it is, so that’s amazing. But one of the things that I want to know from that is, do you filter out people who, let’s say for example, you’ve got a website, the kind that you just described. Do you filter out people who are not the target audience? So in other words, I don’t know, maybe that’s not a perfect example. But let’s say, on some websites, would it be better to have really inexperienced users of the internet as your five candidates?

\n\n\n\n

[00:12:59] Jo Minney: That is exactly the ideal person.

\n\n\n\n

[00:13:02] Nathan Wrigley: So people who are just, I’ve never come across this before. You want people who are potentially bound to be confused. If somebody’s going to be confused, it’s you five.

\n\n\n\n

[00:13:10] Jo Minney: That is the ideal participant for a usability study. And often people say, I want to start learning how to do usability testing. Where should I start? And my advice to them is always the same, with your mum.

\n\n\n\n

Recruit a person that’s a generation older than you, because I can guarantee that in most cases, sorry to generalise, but they tend to be less efficient and less used to technology because they haven’t grown up with it. So for millennials and younger, we have had technology for all of our adult lives and most of our childhood.

\n\n\n\n

For my parents’ generation, they have had to learn that technology as an adult, and so their brains have a different mental model, and they don’t take for granted things that we take for granted. Like, when I click the logo, it will take me back to the homepage. I know that, you know that, your mum might not know that.

\n\n\n\n

And I think that is something that is really valuable is to understand the benefit of testing with people who aren’t as experienced with technology. Who don’t speak English as a first language. Who are experiencing some kind of accessibility challenge. Whether that’s using assistive technology, being colorblind. Things like that are really good things to try and get some cross-sectional representation in your testing participant pool.

\n\n\n\n

[00:14:25] Nathan Wrigley: So the idea then is that you’ve got these novice users who hopefully will immediately illustrate the point. And it’s driven by questions. So it’s not just, we are just going to stand over your shoulder and watch you browse the internet, and when you do something and describe, you’re looking for something and you can’t find it, that’s not how it’s done.

\n\n\n\n

It’s more, okay, here’s a defined task, do this thing and we’re going to ask you to do five things today, we want you to achieve them all and describe what you’re doing, but it’s more of that process.

\n\n\n\n

And then the idea is that you go from an imperfect website, slowly over time, iterating one problem after another towards a better website. The goal is never reached. It’s just an iterative process.

\n\n\n\n

[00:15:01] Jo Minney: That’s it. Perfection does not exist.

\n\n\n\n

[00:15:03] Nathan Wrigley: Okay, so that’s interesting. So we start with the novice. We’ve got a small cohort of people. We ask them specific questions, and we get feedback about those specific questions.

\n\n\n\n

So the other thing that I wanted to ask then is, when do you do it? Because it feels like you need to build the website first, then show it to people. So there’s got to be something. This isn’t process of discovery prior to the website. You need pixels on pages. Buttons that are potentially mislabeled or what have you. Is that the case? Build first, then usability test afterwards. There’s no usability testing prior to the initial build.

\n\n\n\n

[00:15:37] Jo Minney: It’s kind of a trick question because you can usability test at most stages. Probably the only stage you can’t usability test at is when you don’t yet have a site map. Having said that, my recommendation is, assuming you had unlimited budget and unlimited time, I would do at minimum two rounds of usability testing, and I would do one before you have any design, and I would do it just using wire frames.

\n\n\n\n

So we build interactive wire frames using WordPress. So for the demo that I did today, I spun one up. I used InstaWP. You can get like a seven day website or something through there. It took me 42 minutes to build out the website in just the block editor, with no design or anything, just the layout of it. And I was eating a loaded potato at the time. So if I can do that in 42 minutes, eating a loaded potato, and that’s not my job, I think it’s a pretty efficient and cost effective way of being able to do early usability testing.

\n\n\n\n

And often the thing that we’re testing for there is like, have I got the right navigation structure and hierarchy? Are the labels that I’m using sensible for people? Do they fit with the mental models of what our users are actually expecting? And the benefit of doing it that early is that when you don’t have a design applied, it’s a lot easier to identify problems.

\n\n\n\n

Because there is a thing that happens in human psychology, and there’s a lot of psychology in user experience. And there’s a thing that happens where if something’s pretty, we will say that it is easier to use. Our experience is that it’s easier to use because it’s nice to look at. And that’s great. That means that UI is really important, but it also means that, if you have a really nice UI, it can mask problems that you have in the background. It is great that things can be easier if they’re pretty, but imagine how much easier they would be if they worked well and were pretty, that’s what we should be aiming for.

\n\n\n\n

So typically we would do one round of usability testing when we just have a framework and just have the navigation. When someone lands on a page, sometimes we’ll just write a message on there and say, congratulations, you found the service directory where you can find this thing, this thing, this thing, this thing, and then we put a little button there. When they click it, it releases confetti on the page. So they get a dopamine hit and it’s like, yay, I completed the activity. You don’t have to have all of your content in place to be able to do testing, and identify early that you’ve got problems that you need to fix.

\n\n\n\n

[00:18:02] Nathan Wrigley: It sounds almost like an overly complicated design is the enemy of usability. We are drawn towards beautiful, but sometimes maybe beautiful just is overwhelming. You know, there’s lots of colors on the page, the buttons get hidden, there’s just too much text on there. Looks great, but it might be sort of masking the thing that you’re really trying to show. And it feels like there’s this tight rope act of trying to balance one thing against the other. Yeah, that’s really interesting.

\n\n\n\n

So, with the wire frame thing, in that case, you are really just testing, can the person find the thing? But I’m guessing once you’ve move beyond the wire frame stage and you’ve got a website, it’s literally out on the internet, it’s functional. It’s exactly what we hope would be the perfect version, then you’re drilling into more detail. You know, can a person find this resource? Do they know that this button is what we are intending them to click? Those kind of things.

\n\n\n\n

[00:18:49] Jo Minney: Yeah. So I think things like searchability and discoverability are much easier to test for in the early stages when you’re just doing, say, using like a wire frame or a prototype. And things like usability, you really do need to have the complete designed product to be able to test for them well. And I say that, there’s actually kind of four categories of the different types of tasks that we can do. I’ll give you the link to the blog post that I wrote that has all of this in detail because we do not have time to go deep into that today.

\n\n\n\n

But things like, does my search form work the way that I want it to? They’re the sorts of things that you do have to do some development to be able to get them working. So it’s not always practical to do that at the very early stages when you do want to start testing your navigation and stuff like that.

\n\n\n\n

Something that you can do is if you’ve only got enough budget, or enough time, to be able to do, say, five usability tests total, you could do two of them early, and then you could do three of them towards the end, after you have the majority of the design and the development work in place. Users are pretty forgiving when they’re doing a usability test. If you say, this is still a work in progress, there might be a couple of pages that look odd and aren’t quite ready to go live yet. If you get somewhere and you’re not sure, you can just go back, it’s okay.

\n\n\n\n

It’s not meant to be a perfect experience. The point is that you are getting their real time thoughts and feedback as they’re doing it. So it’s really important that you try and encourage them to follow the think aloud protocol, which is really outlining every single thing that goes through they’re head, just brain dump on me please. Like, I just want to hear all of your thoughts and thought processes.

\n\n\n\n

And the only thing as the facilitator that I will say during a usability test is, tell me what you’re thinking. And other than that, I am completely silent. So even when it comes to giving them the activity, so if I’m asking you to do an activity like help somebody find a legal service that they can use in this particular state. I would actually send that task to you via the chat or something like that.

\n\n\n\n

I would send the task to you via the chat, and then I would get you to read that task back to me, because I don’t want you to be thinking about how I’m saying it. I want you to be able to go back to that task and look at it, and think about it, and process everything inside your own head. But I want you to be telling me all of that.

\n\n\n\n

So often we’ll find people ask questions during that, like, what should I do next? And the answer to that is really hard to train yourself out of replying to them with anything other than, what would you do if I wasn’t here? And I think that’s the hardest thing about learning to facilitate a usability test.

\n\n\n\n

[00:21:24] Nathan Wrigley: Yeah, and in a sort of an ideal scenario, you wouldn’t even be in the room. But in some strange way, you’d be able to just get into their head and say, okay, now I want you to do this, but every time you’ve got problem, just figure figure it out, and we’ll watch. But you have to be there because you have to be able to listen to what they’re saying and what have you. Yeah, that’s curious.

\n\n\n\n

[00:21:40] Jo Minney: Yeah, and we do, at the end of each activity, we’ll then ask them for feedback on how they found it. If they had any suggestions or things that they didn’t say out loud while they were doing it that they wanted to share with us. How confident were they with the activity, and did they think that they were successful in it, which is a really good way of telling, I wasn’t really sure what the activity was meant to do. Or I wasn’t really sure if what I found really met the needs that I was looking for.

\n\n\n\n

Then we ask them, how certain are you with the answer that you just gave? And if they’re like, three out of five, you’re like, alright, this person didn’t understand what it was that I was asking them to do in the first place. Maybe the problem is actually with my question and not with the website.

\n\n\n\n

[00:22:18] Nathan Wrigley: Okay, so the whole process is, you’re not just asking for feedback about the website, there’s a whole process of asking for feedback about the process as well which is, that’s kind of curious. Meta, meta processing.

\n\n\n\n

[00:22:27] Jo Minney: Very meta, for sure.

\n\n\n\n

[00:22:29] Nathan Wrigley: We’re in an industry where at the moment everything is trying to be automated.

\n\n\n\n

[00:22:32] Jo Minney: Is this the AI question?

\n\n\n\n

[00:22:34] Nathan Wrigley: Well, no, this feels like it’s a very human thing. You need actual bodies on the ground. So it’s really a question of economics. Because I’m wondering if this often turns out to be a fairly expensive process. And because of that, I wonder if people push against it, because the budgets may not be there. If this is something that clients typically would say, well, okay, tell me how much that’s going to cost. It’s a nice idea but, okay, it’s going to cost us X thousand dollars because we’ve got to put five people in a room and we’ve got to pay for your time to moderate the event, and come up with the questions and so on.

\n\n\n\n

How do we manage that in an era of automation where everything is, the dollar cost of everything has got to be driven down. This feels like the dollar cost is going up because there’s humans involved.

\n\n\n\n

[00:23:14] Jo Minney: Yeah, it’s a great question. Have you ever run a Google ad before?

\n\n\n\n

[00:23:17] Nathan Wrigley: It’s expensive.

\n\n\n\n

[00:23:18] Jo Minney: It’s very expensive. It’s very expensive to get a new lead. It’s a lot more cost effective to convert a lead than it is to get a new one. And the point of usability testing is to improve conversion of people being able to do the thing that you want them to do on the website.

\n\n\n\n

So my first answer to that would be, look at the cost benefit analysis. It’s worth it in most cases to do usability testing. Something that we’ve found with positioning of usability testing is that if we offer it as an add-on, then people don’t want to do it because they don’t want to pay for it. They see the value in it necessarily. However, we don’t offer it as an add-on.

\n\n\n\n

We actually have it just as part of our proposal right from the start where we’re like, this is part of the point of difference between what you get when you build with us versus when you build with someone else. They’ll tell you what they think is the best way to do something. If we are unsure about the best way to do something or we disagree on it, it’s not going to ultimately be me making a decision or you making a decision. We’re going to test and we’re going to get real evidence from customers.

\n\n\n\n

And they’re the ones that are going to be developing it so you know that the final result that you get is going to be the best possible version of the website. And often we might be more expensive than our competitors, but people will go with us because we are not competing on price. We’re competing on offering a service that nobody else is offering. I asked today in the presentation who has done usability testing before and not a single person put their hand up.

\n\n\n\n

[00:24:42] Nathan Wrigley: That would’ve been my assumption actually.

\n\n\n\n

[00:24:44] Jo Minney: Yeah. And honestly, I don’t think any of the people that we’re competing against in the industry that I’m in are doing the same thing as what we’re doing. And so it is very much a point of difference. I think it’s not a well understood technique, but it’s so valuable that it is a really easy way to position yourself as being different, and really actually do a better job for your customers, for the people that you’re building websites for. Because ultimately you are going to have a better result at the end of it.

\n\n\n\n

[00:25:12] Nathan Wrigley: The interesting thing there is, when I say usability testing, somehow in my head there is a connection between that and accessibility. And that’s not where I’m going with this question, but there’s just something about it being unnecessary. And I’m not binding that to the word accessibility. What I’m saying is clients often think, I don’t need to do that. Obviously, we’re moving into an era where legislation says otherwise. But I can just leave it over there. I don’t need to worry about that, usability testing, not for me.

\n\n\n\n

However, the lever that you’ve just pulled, it completely changes the dynamic because you’ve pulled an economic lever, which is that if we can get everybody to follow this action, I don’t know, fill up the cart with widgets and then press the buy now button, and go through the checkout process. If that’s the thing that you’re usability testing, you’ve made direct line. You’ve joined up the dots of, okay, user, money.

\n\n\n\n

So it’s not just about it being a better website so that people can browse around it all day. It’s also about connecting the economics of it. So the usability is about people buying, converting, getting the resource. And so there might not be an economic transfer there, but it will be some benefit to your business. There might be downloading that valuable PDF that you want everybody to see or whatever.

\n\n\n\n

So that’s kind of interesting. That’s changed my thoughts about it a little bit. And it is more about that. It’s getting an understanding of what you want out the website, getting an understanding of what you think should be happening is actually possible and happening. Have I sort of summed that up about right?

\n\n\n\n

[00:26:40] Jo Minney: Yeah, I think that’s a really good summary it. I think the only thing I would add there is that a lot of the times the conversation around accessibility and the conversation around usability do have a lot of crossover. They are fundamentally different, but one of my favorite examples is actually something that I think applies to both.

\n\n\n\n

So two of the common problems that we find very early on in design is often to do with colour. And so one of them is colour contrast and the other one is colourblind accessibility. And I think it’s a great way to get people to change their thinking, and their perception of the way we have these conversations is, if you have an e-commerce website, Nathan, what would you say if I said to you, I can instantly get you 8% more customers?

\n\n\n\n

[00:27:23] Nathan Wrigley: Yeah, I’d say that’s great.

\n\n\n\n

[00:27:24] Jo Minney: And I’d be like, cool, change your buttons so that colourblind people can read them, because 8% of men are colourblind. So actually it’s only 4% of people because assuming half of them are men, then you’ve actually only got 4%. But still 8% of men are colourblind, that’s a big percentage of the population. So if your button is red and green, then you’re going to have a problem. People are not going to be able to find the thing that you want them to click to give you their money.

\n\n\n\n

Likewise, if you want people to be able to use your website when they’re outside and using their phone in sunlight, then you need to have good colour contrast on your website. So often this conversation is around, well, I don’t have people who are disabled, I’m not trying to cater to people that are using screen readers. It doesn’t matter because not very many people that are using my website are blind. And I’m like, well, I’m not blind but I still struggle when I’m looking at something where the text is too faint, and I’m looking at it on my phone, and I’m standing outside in the sun because we naturally don’t visualise as much contrast there.

\n\n\n\n

So I think being able to position it in a way where people can see the value to themselves. I want to use a website that has better contrast, and so it makes that conversation easier with a customer.

\n\n\n\n

[00:28:32] Nathan Wrigley: I hadn’t really drawn the line between accessibility and usability, but it seems like they’re partner topics, basically. There’s like a Venn diagram, accessibility over here, usability over here, with a massive overlap somewhere in the middle.

\n\n\n\n

[00:28:43] Jo Minney: A hundred percent. That’s why we always encourage having that sort of intersection between accessibility and usability in our testing pool. So we always try and have one person who experiences some kind of accessibility challenge, whether that’s being colourblind, hearing impaired, if we’ve got a lot of video on the site, for example. And I think that it can be a really valuable way of collecting multiple data points at one time.

\n\n\n\n

[00:29:04] Nathan Wrigley: When you have a client that comes to you and they’ve obviously, by the time that they’ve signed the contract with you, usability is already part of the deal it sounds like. How do you decide, what’s the thing in round one that we’re going to pick up on? Is there sort of like a copy book that you go through? Is it like, I don’t know, buttons or the checkout or colour or? Where do you go first? And sort of attached to that question a little bit, this process never ends, right? In theory, you could do usability testing each month. But I was wondering if you did it like on an annual cycle or something, yeah.

\n\n\n\n

[00:29:34] Jo Minney: If you’re not changing stuff super often, I would say, there’s probably more cost effective ways that you can collect information about it. Typically we encourage, long-term, have things like heat maps and stuff like that. They will help you identify if there is a problem. If you know that there is a problem, let’s say you’ve got a heat map and you’re like, why is nobody clicking on our buy now link? That is a good instance of where you would do some usability testing to figure out what the problem is.

\n\n\n\n

But if everything’s working and you’re getting conversions, then probably doing usability testing isn’t the most valuable thing that you can do. If you’re looking at making significant changes to the way that your website works, that’s another good time to introduce a round of usability testing. So we don’t do it just for the sake of doing it. We do it because we need to do it, and because there’s value in it for our customers.

\n\n\n\n

[00:30:18] Nathan Wrigley: Do you keep an eye on your customer’s websites so that you can sort of get ahead of that, if you know what I mean? So let’s say that you put heat maps in, very often that would then get handed over to the client and it’s somebody in the client’s company’s job is to check the heat maps. Or do you keep an eye on that and, oh look, curiously, we’ve seen over the last 12 months, yeah, look at that. There’s not much going on over at that very important button over there. Let’s go back to the client and discuss that. That could be another round of usability testing.

\n\n\n\n

[00:30:44] Jo Minney: Yeah, so I think we’re not uncommonly, a lot of agencies now do have some kind of retainer program where they will maintain communication and assistance for their clients. So we call them care plans. I know everyone has a different name for it. I think it’s pretty standard now in the WordPress ecosystem. It’s a very common thing to do.

\n\n\n\n

As part of our care plans we have scheduled meeting with our clients once every three months or six months or 12 months, depending on how big the site is. And one of the things that we’ll do at that time is review their analytics, review the heat maps, that sort of thing.

\n\n\n\n

Ask them, have they experienced any problems? Have they noticed a downturn in the people signing up for the memberships? Or have they noticed, have they had any complaints from people about something? Is there anything that they’re not sure about? Are they going to be changing the way that they operate soon, and introducing something new into their navigation that we need to consider where does that fit in the grand scheme of things?

\n\n\n\n

I find if we’re having those conversations early and we are the ones starting those conversations, then often we are coming to them with solutions instead of them coming to us with problems.

\n\n\n\n

[00:31:46] Nathan Wrigley: I think that’s the key bit, isn’t it? If you can prove to be the partner that comes with, we’ve got this intuition that there’s something that we can explore here. You are proactive, you’re going to them not, okay, anything you want? Is there anything we can help you with, you know? And the answer to that is always, not really.

\n\n\n\n

Whereas if you go and say, look, we’ve got this idea, based upon some data that we’ve seen, we’ve got heat maps and what have you, shall we explore that further? That seems much more credible. You are far likely, I think to have an economic wheel which keeps spinning if you adopt that approach, as opposed to the is there anything you want doing, kind of approach?

\n\n\n\n

[00:32:18] Jo Minney: Absolutely. I think every developer’s worst nightmare is having a customer come back to them and say, I’ve just noticed that I haven’t had anyone send through anything in my contact form for the last three weeks. And I’ve just noticed, when I went and tested it, that the contact form’s not working anymore.

\n\n\n\n

I’m sure I’ve had that nightmare at least once. And I think if you can avoid being in that situation where they’re coming to you with something like, oh my God, it’s broken, how do I fix it? If instead you can go to them and be proactive about it and just kind of keep your finger on the pulse.

\n\n\n\n

Yes, there’s a little bit of ongoing work, but like honestly, I jump on, I check all of the analytics maybe once every three months for my clients. I set aside one day to do it. Go and have a look through that. If I notice anything, I can usually fix it, make sure that we’re collecting the data again before it becomes a problem.

\n\n\n\n

And then that way when there is an issue, we’ve got data that we can back up and we can start from there and go, okay, yes, we’ve identified, here’s where we need to do more research. And then we can apply something like usability testing to that.

\n\n\n\n

[00:33:16] Nathan Wrigley: How much of your time on a monthly basis, let’s say as a percentage, do you spend on usability of existing clients? Is this something that is a lot of the work that you do? What I’m trying to figure out here is, for people listening, is this something that they can turn into a real engine of their business?

\n\n\n\n

Because you might get two days, three days work a week just on the usability of pre-existing clients. So in a sense, you’ve created interest and work out of thin air, because these clients already exist, they’re in your roster, but there’s a whole new thing that we can offer to them. So, how much do you spend doing it?

\n\n\n\n

[00:33:50] Jo Minney: Yeah, so it’s a great question. I would say it’s cyclical. I couldn’t really say like, I always spend this much amount of time. There might be entire weeks that go by where my whole life is usability testing, and there might be a month that goes by where I don’t do any. And it really does often depend on where our projects are in the life cycle at any particular time.

\n\n\n\n

So we’re often working on projects that will span over years. And because of that, they might introduce a completely new part of their project. And that’s a good time to reintroduce that usability testing. As I said, like you don’t really want to do it just for the sake of doing it, but at the same time, if you can show that there will be value in making a change, if you can show that there is a lost opportunity somewhere, then a hundred percent you can sell that, the value to them of, hey, you could spend $1,000 now, but you could be earning $5,000 more every month for the next several years. That’s a no-brainer, right?

\n\n\n\n

People are happy to make investment if they can see that there’s going to be a cost benefit for them in the future. Or if the thing that they’re trying to do is maybe their government website or something, and they’ve got a particular thing that they need to meet, they’ve got KPIs. If you can show that you are able to help them meet those KPIs, then they are going to invest in doing that thing that you’re trying to offer them.

\n\n\n\n

[00:35:02] Nathan Wrigley: We talked about the Venn diagram of accessibility and usability, and the fact that there’s a lot of an overlap. In the year 2025, this is a year where, in Europe at least anyway, accessibility, the legal cogs are turning and the screw is getting tighter. So accessibility is becoming mandated in many respects.

\n\n\n\n

And I was wondering about that, whether there was any kind of overlap in legislation on the usability side. The accessibility piece is obviously easier to sort of define in many ways, and it’s going to become less optional. But I was wondering if there was any usability legal requirements. I don’t know quite how that would be encapsulated.

\n\n\n\n

[00:35:41] Jo Minney: Sort of. An example that comes to mind is that there are a lot of practices that historically have been really prevalent on the internet, and they’ve been identified as being really bad for usability. And they’ve actually now been identified as being so bad that they’re almost evil. And they’ve started to crack down on those.

\n\n\n\n

And an example of that is, have you ever tried to unsubscribe from a gym? It’s basically impossible. And so now if you, at least in Australia, I know if you have a subscription on your site, you legally have to have a way of people being able to unsubscribe without having to call someone or send an email somewhere.

\n\n\n\n

And that is an example where that is actually usability. And I think there are definitely things where we are picking up on stuff that is maybe a shady way of working, and a shady way of developing websites. And those things are starting, we’re starting to cut down on them.

\n\n\n\n

I’m not sure if that is purely usability, or just like not being being a bad person. But I think that there is definitely, the only reason that we know that those things are a problem is because we have all had those bad experiences. And ultimately that’s all user experience is, it’s just how good or bad is experience of using a platform.

\n\n\n\n

[00:36:49] Nathan Wrigley: I share your frustration with those kind of things because I’ve been through that process. Not just canceling a subscription but, I don’t know, something that you’ve got yourself accidentally into and you don’t want to be on that email list anymore. Seemingly no way to get off it.

\n\n\n\n

[00:37:01] Jo Minney: They’ve changed the unsubscribe link so it doesn’t have the word unsubscribe in it. And now you just have to look for the word that’s not underlined, or highlighted in a different colour. That when you hover over it, something pops up and you’re like, oh, that’s the link. That thing that says manage preferences down the bottom, hidden in the wall of text. That is a shady practice. That is a poor user experience just as much as it’s just a bad thing to do.

\n\n\n\n

[00:37:23] Nathan Wrigley: I think it’s got the label of deceptive design now. It used to be called dark patterns, didn’t it? But deceptive design. This notion of doing things in such a way to just deliberately confuse the user so that the green big button, which is the exact opposite of what you want to click, is the one which is visible. And then there’s this tiny little bit of greyed out text, which is the one which, clearly, you’ve ended up at this page, that’s the one you want. That’s the enemy of usability in a way. But for the business, it may be exactly what they want because it keeps the economic engine rolling.

\n\n\n\n

Yeah, that’s interesting. I wonder if there’ll be more legislation to tighten those things up so that they’re not allowed. Yeah, that’s fascinating.

\n\n\n\n

Last question. We’re running out of time. Last question. And it refers to something that we talked about earlier. I’m guessing this really never ends. This is a journey which you begin, you tweak it, you do a little bit, you fix, and then you start again a little bit later and what have you. Is there ever a moment though where you go to a client and say, we did it? This site, as far as we’re concerned, is now perfect. Or is it never a goal? It’s a journey and never a destination.

\n\n\n\n

[00:38:23] Jo Minney: I think you’ll probably agree with me here, Nathan, that it’s basically impossible to be perfect, because ultimately someone is always going to have a different opinion. Someone’s always going to think that your shade of purple is too dark. Someone is always going to dislike the font that you chose, because it’s not loopy enough, or it’s too loopy, right?

\n\n\n\n

So I don’t think there is such a thing as perfect. But through doing five usability tests, five people, you can pick up at least 85% of the potential problems with your design. And I’m not aiming for perfect, but I know that for me, if I can confidently say to my customers that I’ve been able to identify 85% of the potential problems that they might experience in their project, then they can confidently go away and say, hey, we’re pretty happy with what we’ve got.

\n\n\n\n

We can definitely improve on that over time. But that is a huge milestone to be able to hit. And being able to have enough data, and enough research to confidently say that, I think is a really big win both for us and for our customers.

\n\n\n\n

[00:39:26] Nathan Wrigley: Sadly, Jo, time is the enemy, and I feel like we’ve just pulled back the lid a teeny tiny bit on the big subject of usability. Honestly, I reckon I could talk for another two hours on this at least. You know, because you’ve got into colours there and all sorts, and there’s just so many tendrils that we haven’t been able to explore. But we’ve prized it open a little bit, and so hopefully the listener to this has become curious. If they have, where would they find you? What’s a good place to discover you online?

\n\n\n\n

[00:39:53] Jo Minney: Yeah, so I think the best place is to hit up my personal blog, jominney.com. So it’s J O M I N N E Y .com. And I have a lot of stuff on there about usability, usability testing. I have a blog post that I wrote specifically for this talk that shares all of the resources that I used to put together the slides and everything. The talk itself will be on WordCamp TV. If you’re on socials and you want to hit me up, pretty much the only platforms I’m active on nowadays are LinkedIn and Bluesky, and I’m Jo Minney on both of them.

\n\n\n\n

[00:40:23] Nathan Wrigley: Jo Minney, thank you so much for chatting to me today. I really appreciate it.

\n\n\n\n

[00:40:27] Jo Minney: You’re most welcome, Nathan. Thanks for having me again.

\n
\n\n\n\n

Today, I bring you the first in a mini series of podcasts I recorded in person at WordCamp Asia in Manila. This flagship WordPress event brought together hundreds of WordPress professionals, enthusiasts and all manner of interested parties under one roof for a three day event – one contributor day, and two days of presentations.

\n\n\n\n

I tracked down several of the speakers and workshop organisers, and recorded them speaking about the subject they were presenting upon. I hope that you enjoy what they have to say.

\n\n\n\n

So on the podcast today we have the first of those conversations, and it’s with Jo Minney.

\n\n\n\n

Jo, based in Perth, Australia, is passionate about user experience, data-driven decision-making, cats, pockets and travel. She’s a small business founder, and works with organisations creating digital platforms with WordPress. She also freelances as a UX consultant. She volunteers with Mission Digital to address social issues using technology, and is an ambassador for She Codes Australia, promoting tech accessibility for women. Recognised as a 2023 Shining Star by Women in Technology Western Australia, Jo is an international speaker on topics like user experience, accessibility, and gender equality. She’s committed to ensuring a seamless user experience, and today shares her insights from practical, everyday usability testing.

\n\n\n\n

Jo’s presentation, entitled Budget-Friendly Usability Testing for WordPress helped attendees understand what usability testing is, x and clarified why it differs from other testing methods. She shares examples from her work, showing how small changes can significantly impact user experience, which is better for you, the website builder, and your client, the website owner.

\n\n\n\n

We also discuss how usability testing can transform a website’s effectiveness by improving conversions. Jo explains the importance of recruiting novice users for testing, and highlights how usability testing pushes for real, user-centered improvements.

\n\n\n\n

Towards the end, Jo shares practical advice on when and how to integrate usability testing into your process, advocating for early and iterative testing to preemptively address potential issues.

\n\n\n\n

If you’re looking to gain a deeper understanding of usability testing and its benefits, this episode is for you.

\n\n\n\n

Useful links

\n\n\n\n

WordCamp Asia in Manila

\n\n\n\n

Jo’s WordCamp Asia 2025 presentation: Budget-Friendly Usability Testing for WordPress

\n\n\n\n

InstaWP

\n\n\n\n

Think Aloud Protocol

\n\n\n\n

Jo Minney’s website

\n\n\n\n

Jo on Bluesky

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 18:37:05 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:8;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:102:\"Do The Woo Community: Building Trust and Converting Sales with Simple UX Decisions with Marc McDougall\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93465\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:101:\"https://dothewoo.io/building-trust-and-converting-sales-with-simple-ux-decisions-with-marc-mcdougall/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:198:\"In this episode of Woo DevChat, hosts discuss UX design and CRO with Marc McDougall, who shares insights on common misconceptions, mistakes, and the evolving role of AI in enhancing user experience.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 15:58:22 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:9;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"Do The Woo Community: Get Ready for the Atarim Web Agency Summit 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93450\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"https://dothewoo.io/blog/get-ready-for-the-atarim-web-agency-summit-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:359:\"The Atarim Web Agency Summit 2025, scheduled for April 7-11, is a free virtual event for web professionals. Featuring over 40 expert-led sessions, it offers actionable insights for agency growth, networking opportunities, and access to industry leaders. Registration is free, with replay options available, making it essential for anyone in the digital space.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 15:08:27 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:10;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:135:\"HeroPress: With open arms – friendships in the WordPress community – Su atviromis rankomis – draugystės WordPress bendruomenėje\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://heropress.com/?post_type=heropress-essays&p=7820\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:180:\"https://heropress.com/essays/with-open-arms-friendships-in-the-wordpress-community/#utm_source=rss&utm_medium=rss&utm_campaign=with-open-arms-friendships-in-the-wordpress-community\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:19273:\"\"Pull

Šį rašinį galima rasti ir lietuvių kalba.

\n\n\n\n

Truth be told, unlike my husband, I have never been the most social person. At a party, you’ll usually find me talking to the dog (or cat). Throughout my life, I’ve only had a few close friends, and I’d rather be reading a book than going to a concert. While WordPress has been a huge part of the growth of my business, I’d like to take this opportunity to discuss something much more important – the friendships that I have formed through this wonderful community.

\n\n\n\n
\n

Due to WordPress, I have some truly spectacular friends in my life.

\n
\n\n\n\n

While we may have started as strangers, we moved into attending each other’s weddings, laughing until we’re crying while packing hundreds of swag orders, holding hands in a hospital bed and being there for each other through thick and thin. Being a privacy lawyer, I won’t name any names here but you’ll probably be able to tell pretty quickly if I’m writing this about you. 

\n\n\n\n

A little backstory 

\n\n\n\n

When I was finishing up law school, I worked at a small web design agency in Chicago as their COO. I met my husband, Hans, who was the owner of a different agency when he came to buy us out. It was love at first sight (yes, really) and we have been inseparable ever since. We shared our struggles and annoyances over dinner one night – writing Privacy Policies for clients was monotonous for me and he had no idea what to do when a client asked him about website policies. So we created Termageddon – an auto-updating website policies solution for agencies and their clients. Since we started an agency partner program, we knew that we had to find agencies who would be willing to try our new product and that’s when we came across WordCamps and the WordPress community. 

\n\n\n\n

Our first WordCamp 

\n\n\n\n

WordPress has a huge community and going to a large WordCamp such as WordCamp US when you don’t know anyone can be really scary (especially for an introvert like me) so we thought that we’d get our feet wet with a smaller WordCamp nearby. Enter WordCamp Jackson, Michigan.

\n\n\n\n
\n

Driving into the most adorable small city that we have ever visited, we were very nervous – what if no one wanted to talk to us? 

\n
\n\n\n\n

These fears were quickly dispelled when we walked into a room with about 30 friendly faces. Even the mayor was in attendance! During a break, we all sat on couches and our new friends helped us come up with the design for our very first swag item: a t-shirt with a pirate asking “Arrrr you compliant?”. I still smile every time I put it on. The next thing we know, the informative presentations are over and we’re all piling into cars and going to an escape room. The friendships formed during that event have lasted many years. In fact, one of our friends from that very first WordCamp helped us build our chicken coop. 

\n\n\n\n

Come on over! 

\n\n\n\n

A while later, my husband went to London and met a friend through a non-WordPress event and they truly hit it off (seriously, they have a standing call twice per month for five years now). A few months later, it was time for our first WordCamp US and our friend flew from the UK to Chicago to stay with us and our plan was to take a road trip and drive from our home to the WordCamp. Well, it just so happened that his other friend who was also going to WordCamp (someone we haven’t met before), missed his flight. Our friend called us to explain the situation and asked whether he could change his flight to Chicago, stay with us and join our road trip. We said “come on over!” Well, that missed flight led to the best trip of all time and a lifelong friendship.

\n\n\n\n

I’ll always remember him walking me to the store to buy some tea on a cold evening, all of us posing for a picture next to the St. Louis arch, hanging out in various hotels and Airbnb’s throughout the years, sharing stories from our youth, marveling at the excitement and joy of growing families, and supporting each other’s business ventures. We’ve seen each other many times throughout the years on various trips and WordCamps and I think of us as our core group at these events – a safe space amidst all of the chaos. 

\n\n\n\n

Better together 

\n\n\n\n

When you start establishing yourself in an industry or a community, you may think of other people in the space as competitors. While it’s certainly not the best trait that humanity has to offer, I think that this happens more frequently than we would like to admit. When I was new in the WordPress community, there was an established privacy attorney who had been a part of that community for much longer than I have. Going to WordCamp US, I knew that she was going to be giving a speech on the California Consumer Privacy Act and how to comply with this privacy law. To be honest with myself and you, I was extremely nervous about meeting her. What if she thought that I was a competitor? What if she disliked me? What if there’s not enough room for two privacy lawyers at this event? Should I just hide throughout the entire event to make sure that she doesn’t see me? 

\n\n\n\n

It’s true that we create these extreme scenarios in our minds but reality is usually much different (and less scary). We quickly bonded over the fact that we were the only two people there who knew what CCPA even is and, by the end of the night, we were jammed together in an Uber going to a bar. Throughout the years, we have supported each other’s projects, participated in long evenings of conversations, shared our struggles and wins. Due to her kindness and welcoming nature, we did not head towards competition but are able to enjoy the benefits of a wonderful symbiosis and a true friendship. 

\n\n\n\n

Family for life 

\n\n\n\n

Hanging out with your friends at WordCamps is fun but it’s even more fun when your friendship progresses to the point where your friends fly over to hang out at your home. Well, in this case, we only got to hang out for one day before my friend got very sick. Not the “I have the flu” kind of sick, the over a week in the ICU and months in the hospital kind of sick. 

\n\n\n\n

Throughout that time, we met her family, who stayed with us for a while as we live very close to the hospital. While this time was certainly grueling for everyone involved, it also shed a new perspective on how friends get through tough times. Whether it was rides to the hospital, sitting together, crying together, making home cooked meals, celebrating every win, no matter how small, the friendship, the community, and the knowledge that we were there for each other let us make it through this difficult time. The day that she got out of the hospital was truly miraculous.

\n\n\n\n
\n

And now, we are most certainly not just WordCamp friends, we’re family – for life. 

\n
\n\n\n\n

The little things 

\n\n\n\n

Up to this point in my life, I have been a part of many communities – from school, to dance groups, to attorney associations, to my local neighborhood, each community has had something special to offer. However, I have never been involved with another community that is as welcoming or that has led to the formation of so many wonderful friendships as WordPress. From sharing a beer (or a boot of beer), to attending our wedding through Zoom (2020), to making a flower crown, to eating so much sushi that I could barely walk back to the Airbnb, to corn mazes and petting zoos, and touring a submarine together, I am truly thankful that the WordPress community has welcomed me with open arms and I hope that I can do the same for others! 

\n\n\n
\n\n
\n

Donata’s Work Environment

\n\n\n\n

We asked Donata for a view of her office this is what she sent!

\n\n\n
\n \"Donata\n
\n\n\n\n\n

HeroPress would like to thank Draw Attention for their donation of the plugin to make this interactive image!

\n
\n\n
\n\n\n\n\n

Su atviromis rankomis – draugystės WordPress bendruomenėje

\n\n\n\n

Tiesą sakant, kitaip nei mano vyras, niekada nebuvau pati socialiausia asmenybė. Vakarėlyje mane dažniausiai rastumėte kalbančią su šunimi (ar kate). Visą savo gyvenimą turėjau tik keletą artimų draugų, o knygos skaitymas man visada buvo malonesnis nei koncerto lankymas. Nors WordPress atliko didžiulį vaidmenį plėtojant mano verslą, norėčiau pasinaudoti šia proga ir pakalbėti apie kai ką daug svarbesnio – draugystes, kurias užmezgiau šioje nuostabioje bendruomenėje.

\n\n\n\n
\n

Dėl WordPress turiu iš tiesų nuostabių draugų savo gyvenime.

\n
\n\n\n\n

Nors pradėjome kaip svetimi, mes tapome tais, kurie dalyvauja vienas kito vestuvėse, juokiasi iki ašarų pakuodami šimtus reklaminių dovanų, laiko vienas kitam ranką ligonines lovoje ir būna kartu per storą ir ploną. Kadangi esu privatumo teisininkė, nemininesiu vardų, tačiau tikriausiai greitai suprasite, jei rašau apie jus.

\n\n\n\n

Trumpa istorija

\n\n\n\n

Kai baiginėjau teisės studijas, dirbau mažoje interneto dizaino agentūroje Čikagoje kaip COO. Ten sutikau savo vyrą Hansą, kuris buvo kitos agentūros savininkas, kai jis atvyko mus nupirkti. Tai buvo meilė iš pirmo žvilgsnio (taip, tikrai), ir nuo to laiko mes esame neatskiriami. Vieną vakarą dalinomės savo sunkumais ir nepasitenkinimais – man buvo nuobodu rašyti privatumo politikos dokumentus klientams, o jis net nežinojo, ką daryti, kai klientas paprašydavo interneto svetainės politikos. Taip gimė Termageddon – automatiškai atnaujinamas interneto svetainių politikos sprendimas agentūroms ir jų klientams. Kadangi pradėjome agentūrų partnerių programą, turėjome rasti agentūras, kurios būtų pasiruošusios išbandyti mūsų naują produktą, ir tada mes atradome WordCamps ir WordPress bendruomenę.

\n\n\n\n

Mūsų pirmasis WordCamp

\n\n\n\n

WordPress turi didžiulę bendruomenę, o vykstant į didelį WordCamp renginį, pavyzdžiui, WordCamp US, kai nieko nepažįsti, gali būti labai baisu (ypač tokiai intravertei kaip aš), todėl nusprendėme pradėti nuo mažesnio WordCamp netoli mūsų. Taip mes atsidūrėme WordCamp Jackson, Mičiganas.

\n\n\n\n
\n

Važiuodami į vieną mieliausių mažų miestelių, kokius tik esame matę, labai nervinomės – o kas bus jei niekas nenorės su mumis kalbėtis?

\n
\n\n\n\n

Šios baimės greitai išnyko, kai įėjome į kambarį su maždaug 30 draugiškų veidų. Netgi miesto meras dalyvavo! Per pertrauką visi susėdome ant sofų, o naujieji draugai padėjo mums sukurti mūsų pirmojo reklaminių dovanų daikto dizainą: marškinėlius su piratu, klausiančiu “Arrrr you compliant?” (Ar esate atitinkantys?). Vis dar šypsausi, kai juos apsivelku. Nespėjome apsidairyti, o jau po naudingų pranešimų visi susėdome į automobilius ir vykome į pabėgimo kambarį. Draugystės, užmezgtos šio renginio metu, tęsiasi jau daugelį metų. Tiesą sakant, vienas iš mūsų draugų iš to pirmojo WordCamp padėjo mums pastatyti vištų tvartą.

\n\n\n\n

Užeikit!

\n\n\n\n

Kiek vėliau mano vyras išvyko į Londoną ir susipažino su draugu per ne-WordPress renginį, ir jie tikrai susidraugavo (rimtai, jie kalbasi kas dvi savaites jau penkerius metus). Po kelių mėnesių atėjo metas mūsų pirmajam WordCamp US, ir mūsų draugas nuskrido iš JK į Čikagą, kad apsistotų pas mus, o mūsų planas buvo keliauti automobiliu nuo namų iki WordCamp. Tačiau nutiko taip, kad jo kitas draugas, kuris taip pat vyko į WordCamp (mes jo dar nebuvome sutikę), praleido savo skrydį. Mūsų draugas paskambino mums, paaiškino situaciją ir paklausė, ar jo draugas gali pakeisti skrydį į Čikagą, apsistoti pas mus ir prisijungti prie mūsų kelionės. Mes pasakėme: “Užeikit!” Tas praleistas skrydis privedė prie geriausios kelionės gyvenime ir viso gyvenimo draugystės.

\n\n\n\n

Aš visada prisiminsiu, kaip jis lydėjo mane į parduotuvę nusipirkti arbatos šaltą vakarą, kaip visi kartu pozavome nuotraukai prie Saint Louis arkinio paminklo, kaip per daugelį metų leisdavome laiką įvairiuose viešbučiuose ir Airbnb, dalijomės jaunystės istorijomis, stebėjomės augančių šeimų džiaugsmu ir jauduliu bei palaikėme vieni kitų verslo sumanymus. Per daugelį metų matėmės daugybę kartų įvairių kelionių ir WordCamp renginių metu, ir aš mus laikau pagrindine grupe šiuose renginiuose – saugia vieta viso šurmulio apsuptyje.

\n\n\n\n

Geriau kartu

\n\n\n\n

Kai pradedate įsitvirtinti tam tikroje pramonėje ar bendruomenėje, galite pagalvoti, kad kiti žmonės šioje srityje yra konkurentai. Nors tai tikrai nėra geriausia žmonijos savybė, manau, kad taip nutinka dažniau, nei norėtume pripažinti. Kai buvau naujokė WordPress bendruomenėje, buvo viena pripažinta privatumo teisininkė, kuri buvo šios bendruomenės dalis daug ilgiau nei aš. Važiuodama į WordCamp US,  žinojau kad ji ketina skaityti pranešimą apie Kalifornijos vartotojų privatumo įstatymą (CCPA) ir kaip laikytis šio privatumo įstatymo. Būsiu atvira – man buvo labai neramu ją sutikti. O kas, jei ji manytų, kad esu konkurentė? O jei jai nepatikčiau? O jei šiame renginyje nepakaktų vietos dviem privatumo teisininkėms? Gal man geriau viso renginio metu slėptis, kad tik ji manęs nepastebėtų?

\n\n\n\n

Tiesa ta, kad dažnai kuriame kraštutinius scenarijus savo galvose, bet realybė dažniausiai būna visai kitokia (ir mažiau bauginanti). Greitai susidraugavome, nes supratome, kad esame vienintelės dvi moterys renginyje, kurios iš viso žinojo kas yra CCPA. Vakaro pabaigoje jau spraudėmės kartu į Uber važiuodamos į barą. Per tuos metus palaikėme viena kitos projektus, dalijomės ilgais pokalbiais vakarais, kartu išgyvenome sunkumus ir džiaugėmės pasiekimais. Dėl jos geranoriškumo ir svetingumo nepasukome konkurencijos keliu, o galėjome džiaugtis nuostabia simbioze ir tikra draugyste.

\n\n\n\n

Šeima visam gyvenimui

\n\n\n\n

Leisti laiką su draugais „WordCamp“ renginiuose yra smagu, bet dar smagiau, kai draugystė tampa tokia stipri, kad draugai atskrenda pas jus tiesiog pabūti kartu. Na, šiuo atveju, mes spėjome pabūti tik vieną dieną, kol mano draugė labai susirgo. Ne „turiu gripą“ lygio susirgo, o taip, kad teko praleisti daugiau nei savaitę reanimacijoje ir kelis mėnesius ligoninėje.

\n\n\n\n

Tuo sunkiu metu susipažinome su jos šeima, kuri kurį laiką gyveno pas mus, nes gyvename labai arti ligoninės. Nors šis laikotarpis tikrai buvo alinantis visiems, jis taip pat suteikė naują perspektyvą, kaip draugai išgyvena sunkius laikus kartu. Nesvarbu, ar tai buvo kelionės į ligoninę, sėdėjimas kartu, verksmas kartu, naminiai patiekalai ar kiekvienos, net ir mažiausios pergalės šventimas – draugystė, bendruomenė ir žinojimas, kad esame vieni kitiems, padėjo mums išgyventi šį sunkų laikotarpį. Diena, kai ji išėjo iš ligoninės, buvo tikras stebuklas.

\n\n\n\n
\n

Dabar mes tikrai ne tik WordCamp draugės – mes šeima visam gyvenimui.

\n
\n\n\n\n

Mažos smulkmenos 

\n\n\n\n

Iki šiol mano gyvenime buvo daugybė bendruomenių – nuo mokyklos, šokių grupių, teisininkų asociacijų iki mano vietinės kaimynystės – kiekviena bendruomenė turėjo ką nors ypatingo. Tačiau niekada nebuvau dalis kitos bendruomenės, kuri būtų tokia svetinga ir kuri būtų padovanojusi tiek daug nuostabių draugysčių kaip WordPress. Nuo alaus bokalo (arba alaus bato) dalijimosi, iki mūsų vestuvių stebėjimo per Zoom (2020 m.), iki gėlių vainikų pynimo, iki tiek daug sušio valgymo, kad vos galėjau pareiti atgal į „Airbnb“, iki kukurūzų labirintų ir gyvūnų ūkių lankymo, ir net povandeninio laivo ekskursijos – esu nuoširdžiai dėkinga, kad WordPress bendruomenė mane priėmė atviromis rankomis, ir tikiuosi, kad galėsiu padaryti tą patį kitiems!

\n

The post With open arms – friendships in the WordPress community – Su atviromis rankomis – draugystės WordPress bendruomenėje appeared first on HeroPress.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 01:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"Donata Stroink-Skillrud\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:11;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"WordPress.org blog: WordPress 6.8 Release Candidate 1\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18639\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"https://wordpress.org/news/2025/03/wordpress-6-8-release-candidate-1/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:9140:\"

The first Release Candidate (“RC1”) for WordPress 6.8 is ready for download and testing!

\n\n\n\n

This version of the WordPress software is under development.  Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, it’s recommended that you evaluate RC1 on a test server and site.

\n\n\n\n

Reaching this phase of the release cycle is an important milestone.  While release candidates are considered ready for release, testing remains crucial to ensure that everything in WordPress 6.8 is the best it can be.

\n\n\n\n

You can test WordPress 6.8 RC1 in four ways:

\n\n\n\n
PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
Direct DownloadDownload the RC1 version (zip) and install it on a WordPress website.
Command LineUse the following WP-CLI command: wp core update --version=6.8-RC1
WordPress PlaygroundUse the 6.8 RC1 WordPress Playground instance (available within 35 minutes after the release is ready) to test the software directly in your browser without the need for a separate site or setup.
\n\n\n\n

You can test the RC1 version in four ways.

\n\n\n\n

The current target for the WordPress 6.8 release is April 15, 2025.  Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for further details.

\n\n\n\n

What’s in WordPress 6.8 RC1?

\n\n\n\n

Get a recap of WordPress 6.8’s highlighted features in the Beta 1 announcement.  For more technical information related to issues addressed since Beta 3, you can browse the following links:

\n\n\n\n\n\n\n\n

Want to look deeper into the details and technical notes for this release? These recent posts cover some of the latest updates:

\n\n\n\n\n\n\n\n

How you can contribute

\n\n\n\n

WordPress is open source software made possible by a passionate community of people collaborating on and contributing to its development.  The resources below outline various ways you can help the world’s most popular open source web platform, regardless of your technical expertise.

\n\n\n\n

Get involved in testing

\n\n\n\n

Testing for issues is critical to ensuring WordPress is performant and stable.  It’s also a meaningful way for anyone to contribute.  This detailed guide will walk you through testing features in WordPress 6.8.  For those new to testing, follow this general testing guide for more details on getting set up.

\n\n\n\n

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report.  You can also check your issue against a list of known bugs.

\n\n\n\n

Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

\n\n\n\n

Search for vulnerabilities

\n\n\n\n

From now until the final release of WordPress 6.8 (scheduled for April 15, 2025), the monetary reward for reporting new, unreleased security vulnerabilities is doubled.  Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

\n\n\n\n

Update your theme or plugin

\n\n\n\n

For plugin and theme authors, your products play an integral role in extending the functionality and value of WordPress for all users.

\n\n\n\n

Thanks for continuing to test your themes and plugins with the WordPress 6.8 beta releases.  With RC1, you’ll want to conclude your testing and update the “Tested up to” version in your plugin’s readme file to 6.8.

\n\n\n\n

If you find compatibility issues, please post detailed information to the support forum.

\n\n\n\n

Help translate WordPress

\n\n\n\n

Do you speak a language other than English?  ¿Español?  Français?  Русский?  日本語? हिन्दी? বাংলা? मराठी?  You can help translate WordPress into more than 100 languages.  This release milestone (RC1) also marks the hard string freeze point of the 6.8 release cycle.

\n\n\n\n

An RC1 haiku

\n\n\n\n

March fades, nearly there,
Six-eight hums—a steady beat,
RC greets the world.

\n\n\n\n

Thank you to the following contributors for collaborating on this post: @joemcgill @benjamin_zekavica @courane01 @mkrndmane @audrasjb @areziaal @ankit-k-gupta @krupajnanda.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 16:19:41 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:12;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"Do The Woo Community: A Continued Saga About the Life of Blog Posts\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93306\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"https://dothewoo.io/blog/a-continued-saga-about-the-life-of-blog-posts/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:225:\"BobWP chats about the importance of adding content instead of removing it, expressing commitment to producing more podcasts, videos, and blog posts despite claims of blog irrelevance, valuing audience engagement over metrics.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 13:01:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:13;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:89:\"Do The Woo Community: On the Floor at CloudFest 2025 with Adam Weeks and Christian Taylor\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93275\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:88:\"https://dothewoo.io/on-the-floor-at-cloudfest-2025-with-adam-weeks-and-christian-taylor/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:226:\"Adam Weeks and Christian Taylor explore CloudFest, assessing booth designs and marketing strategies. They discuss visual engagement, effective messaging, and the significance of interactive experiences in attracting attendees.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 07:46:41 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:14;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"Do The Woo Community: How AI is Reshaping Enterprise WordPress in 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=91953\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://dothewoo.io/blog/how-ai-is-reshaping-enterprise-wordpress-in-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:191:\"AI is transforming enterprise WordPress through coding tools and personalization, but poses risks requiring careful integration and oversight amidst evolving challenges and security concerns.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 24 Mar 2025 11:40:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:15;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:111:\"Gutenberg Times: Get ready for WordPress 6.8, Source of Truth, a book, and code with AI — Weekend Edition 322\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=38031\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:115:\"https://gutenbergtimes.com/get-ready-for-wordpress-6-8-source-of-truth-a-book-and-code-with-ai-weekend-edition-322/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:21353:\"

Hi, the spring is coming to Munich this weekend, or that’s what the forecast tells us. With temperatures around 18 °C / 64° F, I will spend a few hours outside on long walks in the Englisch Garden and possible get my bicycle working again. I am looking forward to getting away from the screens all together and having in-person conversations with my cousin and his wife. They are accomplished musicians and different kind of nerds.

\n\n\n
\n

? What kind of activities are in your future and are they also determined by the weather like mine? Hit reply and let me know.

\n
\n\n\n

Yours, ?
Birgit

\n\n\n\n

PS: I just started my travel preparation for WordCamp Europe. Want to meet me? bit.ly/WCEUMeetBirgit

\n\n\n\n\"\"\n\n\n\n\n\n\n\n

Developing Gutenberg and WordPress

\n\n\n\n

WordPress 6.8 Beta 3 was released on March 18, 2025, and it is ready for testing. If you need inspiration and instruction on how and what to test, the test team’s post is for you. Help Test WordPress 6.8.

\n\n\n\n
\n\n\n\n

Joe Dolson published the dev note on Changes to the .screen-reader-text class in WordPress 6.8 The .screen-reader-text class replaces the deprecated clip property with clip-path: inset(50%) for modern browser compatibility and accessibility improvements. Focus styles remain unchanged to ensure visibility during keyboard navigation. Developers should update themes and plugins using .screen-reader-text to align with these changes for future-proofing.

\n\n\n\n
\n\n\n\n

A group of contributors collaborated on the Source of Truth (WordPress 6.8). Learn everything about enhanced data views, query loops, and block interactions. Also about the more cohesive design experience through the Zoom Out editing approach, expanded style controls, and improved typography options. WordPress 6.8 is scheduled to be released on April 15, 2025

\n\n\n\n\"\"\n\n\n\n
\n\n\n\n

George Mamadashvili released Gutenberg 20.5 and the changelog is available on GitHub. Among the updates you’ll find

\n\n\n\n
    \n
  • the ability to create a new page from the button block added to a site navigation, (69368)
  • \n\n\n\n
  • the pages list in the site editor can now display hierarchical relationship similar to the current pages list page, (69550)
  • \n\n\n\n
  • developers can now control the modal size called via DataViews action functions (69302)
  • \n
\n\n\n\n
\n\n\n\n

Troy Chaplin published What’s new for developers? (March 2025) on the WordPress Developer blog. He covers Gutenberg 20.3 and 20.4 as well as updates around the WordPress 6.8 release cycle.

\n\n\n\n
\n\n\n\n

As one of the first to cover the upcoming major release, Nithin Sreeraj at WP-Content posted WordPress 6.8 Expected Features and Changes.

\n\n\n\n
\n

?️ Latest episode: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia with special guest Jessica Lyschik.

\n\n\n\n\"Jessica\n
\n\n\n\n

Plugins, Themes, and Tools for #nocode site builders and owners

\n\n\n\n

Bhargav (Bunty) Bhandari takes building in public quite literally. This time he created a Poll block for WordPress. It allows you to create interactive polls directly within the WordPress Block Editor, with design tools, voting options and results in real time. The code is available on GitHub until he submits it to the WordPress repository.

\n\n\n\n\"\"\n\n\n\n

Jamie Marsland runs an always friendly and welcoming WordPress Gutenberg Facebook group! The description read: “A community for Gutenberg users to learn, share, and explore tips on building WordPress websites using the Blocks Editor.” It’s a private group, too. Marsland wrote: “Whether you need help with WordPress editing or want to share your knowledge, we’d love to have you.”

\n\n\n\n\"\"\n\n\n\n

Theme Development for Full Site Editing and Blocks

\n\n\n\n

Some people like to learn via videos; other people prefer books.

\n\n\n\n

Koji Kuno, a web developer from Japan and contributor to WordPress, published a book called Creating a Website with Twenty-Twenty-Five in late 2024. This book is designed for beginners who want to learn how to create websites using WordPress 6.7 and its newest theme, Twenty-Twenty-Five.

\n\n\n\n

The book starts by explaining the basics of WordPress, including how its block themes, block editor, and site editor work. Once readers understand these concepts, Kuno dives deeper into the Twenty-Twenty-Five theme. He provides a detailed overview of the theme’s files, layout structures, style options for blocks and fonts, and how templates and patterns connect to each other.

\n\n\n\n

Kuno also includes step-by-step guides for building two types of websites: a blog site and a coffee shop site. He uses clear explanations and helpful graphics to make everything easy to follow, even for beginners. While most of the instructions focus on using WordPress’s site editor, Kuno also touches on the underlying code for certain features, such as supporting post formats.

\n\n\n\n

Overall, the book strikes a good balance between practical tutorials and technical insights. It’s an excellent resource for anyone looking to learn website design with WordPress in an approachable way.

\n\n\n\n\"\"Screenshot of Patterns and how they fit into the template structure of Twenty-Twenty-Five. (Page 44) \n\n\n\n
\n\n\n\n

Elliot Richmond experimented with Cursor AI to build a Block Theme. You can follow along on YouTube and see he is using Cursor AI for refactoring and code generation, about the challenges and results of AI-generated block themes, and some lesson learned turned into best practices .

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

In his post Additional Block Styles for Child Themes, Silvan Hagen shares how you can block styles by copying the relevant CSS file from the parent theme to the child theme and making adjustments. Hagen also provides a code snippet to append custom block styles from the child theme without overwriting the parent styles, by adding a function to the child theme’s functions.php file that enqueues the custom styles.

\n\n\n\n

 “Keeping up with Gutenberg – Index 2025” 
A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. The previous years are also available: 2020 | 2021 | 2022 | 2023 | 2024

\n\n\n\n

Building Blocks and Tools for the Block editor

\n\n\n\n

In his post, Local WordPress Development Workflows Using Studio , Nick Diego walks you through two development workflows using Studio by WordPress.com. He covers using Git Deployments to WordPress.com for your newly developed plugin or theme. In the second part of the article you’ll learn how to structure a complete website build, share a preview with clients and colleagues, and sync to a live site on WordPress.com.

\n\n\n\n\"Using\n\n\n\n
\n\n\n\n

Muhammad Muhsin, developer at Awesome Motive, used the WordPress Interactivity API to build a simple Stopwatch block. He is also working on a tutorial to go along with it. Meanwhile, you can study his code on GitHub next to the documentation of the Interactivity API.

\n\n\n\n
\n\n\n\n

In this week’s live stream, How to build incredible WordPress Blocks with Cursor AI, Ryan Welcher and Nick Diego explored how AI can help you create great WordPress blocks. They shared useful tips and cool AI tools to improve your block-building skills and make things easier. Don’t miss this chance to discover new possibilities for your WordPress site!

\n\n\n\n\"\"\n\n\n\n
\n\n\n\n

The @wordpress/data package introduces a data layer to the WordPress Block Editor, enabling efficient state management and interaction with the editor’s ecosystem.

\n\n\n\n

In two of his live streams, JuanMa Garrido embarked into the depth of the data package and discuss how to work with the data package. In Data in the Block Editor, part one, he explores the various stores, how to retrieve and update store data and dispatch actions. In Data In the Block Editor, part two, Garrido continues to work through the block editor documentation and the date layer course on learn.WordPress.org

\n\n\n
\n
\n
\n
\n
\n
\n
\n\n\n\n
\n
\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

In his live stream, Ryan Welcher walked his viewers through the work necessary to add tests to his Advanced Query Loop plugin so developers who want to extend on the plugin can test custom hooks.

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

On his video channel, Jon Bossenger streams on his adventure using AI for coding. You find out with him what works and what doesn’t. In his latest video Let’s Vibe, he wanted to find out what Vibe Coding is all about and if it actually can produce functional software.

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

Need a plugin .zip from Gutenberg’s master branch?
Gutenberg Times provides daily build for testing and review.

\n\n\n\n

Now also available via WordPress Playground. There is no need for a test site locally or on a server. Have you been using it? Email me with your experience

\n\n\n\n

\"GitHub

\n\n\n\n

Questions? Suggestions? Ideas?
Don’t hesitate to send them via email or
send me a message on WordPress Slack or Twitter @bph.

\n\n\n\n
\n\n\n\n

For questions to be answered on the Gutenberg Changelog,
send them to changelog@gutenbergtimes.com

\n\n\n\n
\n\n\n\n

Featured Image: Garage door and wall with rectangles of various colors painted on them for decoration Photo by Marcus Burnette found on WordPress.org/photos

\n\n\n\n
\n\n\n\n

Don’t want to miss the next Weekend Edition?

\n\n\n

We hate spam, too, and won’t give your email address to anyone
except Mailchimp to send out our Weekend Edition

Thanks for subscribing.
\n\n\n
\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 22 Mar 2025 05:29:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:16;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"Matt: Automattic Operating System\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140810\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"https://ma.tt/2025/03/aos/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5146:\"

I was interviewed by Inc magazine for almost two hours where we covered a lot of great topics for entrepreneurs but almost none of it made it into the weird hit piece they published, however since both the journalist and I had recording of the interview I’ve decided to adapt some parts of it into a series of blog posts, think of it as the Inc Article That Could Have Been. This bit talks about some of the meta-work that myself and the Bridge team at Automattic do.

At Automattic, the most important product I work on is the company itself. I’ve started referring to it as the “Automattic Operating System.” Not in the technical sense like Linux, but the meta layer the company runs on. The company isn’t WordPress.com or Beeper or Pocket Casts or any one thing. I’m responsible for the culture of the people who build those things, building the things that build those things. It’s our hiring, our HR processes, our expenses, the onboarding docs; it’s all of the details that make up the employee experience — all the stuff that shapes every employee’s day-to-day experience.

\n\n\n\n

Take expense reports. If you’ve got to spend two hours taking pictures of receipts and something like that, that’s a waste of time. You’re not helping a customer there. We switched to a system where everyone just gets a credit card. It does all the reporting and accounting stuff automatically. You just swipe the card and it just automatically files an expense report. Sometimes there’s an exception and you have to work with the accounting rules, but it just works and automates the whole process most of the time.

\n\n\n\n

Another commonly overlooked detail is the offer letter. We think so much about the design of our websites and our products. We have designers work on that and we put a lot of care and thought into it. But I realized we didn’t have the same attention to detail on our offer letter. When you think about it, getting an offer letter from a company and deciding to take it is a major life decision, something you only do a handful of times in your life.  This is one of the things that determines your life path. Our offer letter was just made by attorneys and HR. No designer had looked at it right. We hadn’t really thought about it from a product experience point of view. And so it was just this, generic document with bad typography and not great design. But it’s important, so one of the things we did was redesign it. Now it has a nice letterhead, great typography, and it’s designed for the end user.

I realized that the salary and stuff was buried in paragraph two. It was just a small thing in the document! Well, what’s key when you’re deciding whether to take a job? Start date, salary, you know, that sort of thing, so we put the important parts at the very top.

\n\n\n\n

And then there’s the legal language. All the legal stuff, which is different in every country. We have people in 90 countries, so there’s all the legal stuff that goes in there. And then it has this nudge inspired by the behavioral economics book, Predictably Irrational.

There’s the story about how, if you have an ethics statement above where you sign the test or something, people cheat less. So I thought, well, what’s our equivalent of that? We have the Automattic Creed. It’s an important part of our culture. So we put the creed in, it says

\n\n\n\n
\n

I will never stop learning. I won’t just work on things that are assigned to me. I know there’s no such thing as a status quo. I will build our business sustainably through passionate and loyal customers. I will never pass up an opportunity to help out a colleague, and I’ll remember the days before I knew everything. I am more motivated by impact than money, and I know that Open Source is one of the most powerful ideas of our generation. I will communicate as much as possible, because it’s the oxygen of a distributed company. I am in a marathon, not a sprint, and no matter how far away the goal is, the only way to get there is by putting one foot in front of another every day. Given time, there is no problem that’s insurmountable.

\n
\n\n\n\n

It’s not legally binding, but it’s written in the first person, you read it and you kind of identify with it and then you sign below that. We want people who work at the company who identify with our core values and our core values really are in the creed.

\n\n\n\n

These sorts of things are key to our culture. And they’re universal. Again, we have people from over 90 countries. These are very different cultures, yes, and very different historical backgrounds and cultural makeups. But what’s universal? We have our philosophies that we apply every day regardless of where you were born or where you work.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 22:15:05 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:17;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"Gravatar: Digital Business Card Examples With Professional Flair\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=3083\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:68:\"https://blog.gravatar.com/2025/03/21/digital-business-card-examples/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:19747:\"

Looking for digital business card examples that actually work? Networking has changed, but the need to make a strong first impression hasn’t, and business cards are a big part of it. So, if you’re looking for inspiration, we’ll show you real digital business cards from various industries that successfully blend professional presentation with practical functionality.

\n\n\n\n

Our list includes sleek corporate profiles and creative designs for artists and freelancers, each a great example of how to make your information accessible while maintaining your personal brand. 

\n\n\n\n

By the end of this article, you’ll have actionable ideas for creating your own digital business card. And the best part? You can set up a free, customizable digital business card in minutes using Gravatar – no coding or design skills required.

\n\n\n\n

Universal Digital Business Cards with Gravatar

\n\n\n\n\"Ronnie\n\n\n\n

Looking at my Gravatar profile, you can see how it functions as a complete digital business card that travels with me across the web. I’ve personally included a professional headshot, custom banner image, some interesting images, and verified links to all my social profiles. These sections are completely customizable, and what you include depends entirely on your goals. 

\n\n\n\n

What makes this especially useful for networking is the QR code functionality. When meeting someone at a conference or event, I can quickly pull up my Gravatar profile QR code from my phone’s digital wallet. With one quick scan, my new contact instantly has access to all my professional information.

\n\n\n\n\"Adding\n\n\n\n
\n

Anyone who scans my QR code can immediately connect with me through multiple channels – they can view my contact details, send me money, or browse through my featured photos for a more personal touch. No more fumbling with paper cards or manually typing contact info into phones.

\n
\n\n\n\n

As a technical professional, my Gravatar profile is quite literally the foundation of my online presence. When I contribute to GitHub, post on Stack Overflow, or communicate through Slack, my Gravatar profile appears automatically, helping me build a more recognizable personal brand.

\n\n\n\n\"Ronnie\n\n\n\n

The best part? I only need to update my information in one place. If I change roles or add new contact methods, updating my Gravatar profile instantly refreshes my presence across all integrated platforms – saving time and ensuring consistency.

\n\n\n\n

Want to create your own universal digital business card? Sign up at Gravatar.com using just your email address. It takes minutes to set up but provides lasting professional benefits everywhere you go online.

\n\n\n\n\"\"\n\n\n\n

Industry-Specific Showcases: Real Estate to Tech Professionals

\n\n\n\n

Real estate agents face unique networking challenges – they need to connect instantly with potential buyers and showcase properties efficiently. Digital business cards can help in this process by offering scannable QR codes that provide immediate connections with house hunters.

\n\n\n\n

Take Liz Nitz’s digital business card as an example. 

\n\n\n\n\"Liz\n\n\n\n

As a Bozeman-based real estate agent, her Gravatar profile functions as a powerful lead generation tool. When potential clients scan her QR code, they gain instant access to her contact information plus direct links to her real estate website, where current property listings are just a tap away. This approach eliminates friction in the buying process – no typing long URLs or searching for contact details.

\n\n\n\n

The benefits go beyond real estate into technical fields where showing your expertise is extremely important. Tech professionals use digital business cards to highlight their portfolios, technical skills, and ongoing projects.

\n\n\n\n

Simon Willison, founder of Datasette, demonstrates this approach effectively through his GitHub profile. 

\n\n\n\n\"Simon\n\n\n\n

His presence includes links to his technical blog and personal projects, creating a comprehensive snapshot of his expertise. Visitors can easily contact him while exploring his work samples – all from a single profile.

\n\n\n\n

What makes this especially powerful for tech professionals is GitHub’s integration with Gravatar. When developers update their Gravatar profile picture, those changes automatically appear on GitHub and ensure a consistent, professional presence without requiring multiple updates.

\n\n\n\n

For many industries, digital business cards eliminate the limitations of paper while adding dynamic elements like direct portfolio access, property listings, and instant contact options – turning a simple introduction into a potential business opportunity.

\n\n\n\n

Creative examples for freelancers and artists

\n\n\n\n

For creative professionals, first impressions matter tremendously. Digital business cards give artists and freelancers a powerful advantage – the ability to showcase their actual work during initial meetings rather than just talking about it.

\n\n\n\n

Jonathan H. Kantor’s digital business card perfectly demonstrates this advantage. 

\n\n\n\n\"Jonathan\n\n\n\n

As an illustrator at Talking Bull Games, his Gravatar profile displays samples of his artwork directly on the card itself. New contacts can immediately see his illustration style and quality before clicking through to his full portfolio website. This visual introduction creates an instant connection that paper cards simply cannot match.

\n\n\n\n

Similarly, Shannon Cutts uses her digital business card to establish her credibility as a freelance writer. 

\n\n\n\n\"Shannon\n\n\n\n

Her profile links directly to her writing samples and service pages, allowing potential clients to quickly assess her style and expertise. This immediate access to her work helps her stand out in competitive pitching situations.

\n\n\n\n

Both Jonathan and Shannon have enhanced their cards with integrated QR codes connected to payment systems. This smart addition means that when someone appreciates their work, they can commission or purchase it on the spot by sending payment directly to the artist’s designated eWallet. No invoicing delays or payment friction – just a seamless transaction from introduction to sale, all through a digital business card.

\n\n\n\n

Corporate digital cards that mean business

\n\n\n\n

Corporate professionals require business cards that convey expertise, professionalism, and comprehensive information. Thomas McCorry’s digital business card exemplifies this approach perfectly.

\n\n\n\n\"Thomas\n\n\n\n

His Gravatar profile is like a mini-CV, with a detailed bio section outlining his professional history and accomplishments. The card includes direct links to his personal website, portfolio of work, and LinkedIn profile – all organized in a clean, accessible format alongside professional photographs.

\n\n\n\n

This structured approach gives potential clients and contacts an immediate sense of Thomas’s experience and capabilities at a glance. Rather than trying to cram limited information onto a paper card, his digital version provides depth without overwhelming the viewer. Someone meeting Thomas can quickly understand his background and then access more detailed supporting materials about specific projects or expertise areas with a single tap.

\n\n\n\n

Charles Leisure takes corporate networking a step further by connecting a QR code to his digital business card. 

\n\n\n\n\"Charles\n\n\n\n

This practical addition allows him to instantly share his complete professional profile during meetings or conferences by simply opening the QR code stored in his Apple or Google Wallet. Contacts can scan the code with their smartphone and immediately have all his information saved – eliminating the traditional business card exchange and ensuring his information never gets lost in a pocket or briefcase.

\n\n\n\n

How to Create Your Perfect Digital Business Card with Gravatar

\n\n\n\n

Creating a professional digital business card doesn’t require design skills or technical expertise. Anyone can set up a functional, customizable card like the examples showcased in this article by signing up for a free Gravatar profile.

\n\n\n\n

Getting started takes just minutes, and the process is straightforward:

\n\n\n\n
    \n
  1. Sign up using your email address – Visit Gravatar.com and click “Get Started Now.” Enter your email address and follow the verification steps. If you already have a WordPress.com account, you can connect it to speed up the process.
  2. \n
\n\n\n\n\"Creating\n\n\n\n

\n\n\n\n
    \n
  1. Add a professional headshot – Upload a high-quality photo that represents you well. The image will be cropped to a square format, so choose one where your face is clearly visible. For business purposes, opt for good lighting and a neutral background.
  2. \n
\n\n\n\n\"Adding\n\n\n\n
    \n
  1. Insert verified links and social media profiles – Add your website, portfolio, and social media accounts. Gravatar verifies these connections, adding credibility to your profiles with a verification badge that builds trust with new contacts.
  2. \n
\n\n\n\n\"Adding\n\n\n\n
    \n
  1. Add a professional bio – Craft a concise, compelling description that highlights your expertise and unique value. Think of this as your elevator pitch in written form – clear, engaging, and focused on what makes you stand out.
  2. \n
\n\n\n\n\"Adding\n\n\n\n
    \n
  1. Add relevant images – Beyond your profile picture, you can add additional images that showcase your work, which is especially helpful for creative professionals wanting to display their portfolio directly on their card.
  2. \n
\n\n\n\n\"Adding\n\n\n\n
    \n
  1. Create a QR code for easy profile sharing – Once your profile is complete, you can generate a QR code that links directly to your digital business card. This code can be added to your Apple or Google Wallet for easy sharing during in-person networking events.
  2. \n
\n\n\n\n\"Generating\n\n\n\n
    \n
  1. Customize the style and feel – Personalize your digital business card with custom backgrounds, banner images, and button styles that align with your personal or corporate branding.
  2. \n
\n\n\n\n\"Customize\n\n\n\n

With these seven simple steps, you’ll have a professional digital business card that works across platforms and makes networking more efficient and effective.

\n\n\n\n

Customization features and design possibilities

\n\n\n\n

Gravatar offers extensive customization options that let you create a truly personalized digital business card:

\n\n\n\n
    \n
  • Background options: Add unique solid colors or image backgrounds that align with your personal aesthetic or company branding. 
  • \n\n\n\n
  • Custom header/banner images: Feature your logo, portfolio samples, or professional photography that represents your work. 
  • \n
\n\n\n\n\"Header\n\n\n\n
    \n
  • Button style customization: Match link buttons to your overall design theme for a cohesive, professional appearance. 
  • \n
\n\n\n\n\"Customizing\n\n\n\n
    \n
  • Section rearrangement: Position the most important elements (like payment options) at the top of your profile for better usability. 
  • \n
\n\n\n\n\"Rearranging\n\n\n\n
    \n
  • Custom domains: Transform your profile from username.gravatar.com to yourname.social (or other extensions like .bio, .contact, and more). 
  • \n
\n\n\n\n

Privacy is also thoughtfully integrated into the design system. Gravatar gives you control over which information remains public (like your avatar and display name) and which stays private (such as phone numbers or birth dates). 

\n\n\n\n\"Adjusting\n\n\n\n

When a new site or app requests access to your non-public information, Gravatar will ask for your confirmation first.

\n\n\n\n

This privacy-first approach highlights one of Gravatar’s main strengths – functioning as a universal profile. Update your information once, and those changes instantly sync across all integrated platforms like WordPress, GitHub, and Slack, making your digital business card both customizable and remarkably efficient.

\n\n\n\n

Start Building Your Professional Digital Presence

\n\n\n\n

A free Gravatar profile offers the perfect solution for professionals seeking to establish a consistent online presence. More than just a digital business card, it functions as your unified identity across the web, appearing automatically on compatible platforms whenever you interact.

\n\n\n\n

Getting started takes just minutes. Visit Gravatar.com, enter your email address, and follow the simple verification steps to create your profile. Add a professional photo, customize your information, and start connecting your social accounts. The process is straightforward and designed for users of all technical skill levels.

\n\n\n\n

What truly sets Gravatar apart is its automatic synchronization capability. Once set up, your digital business card will appear seamlessly across WordPress.com, GitHub, Stack Overflow, and numerous other integrated platforms. 

\n\n\n\n

Start building your professional digital presence with Gravatar today!

\n\n\n\n\"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 15:26:48 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:18;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:115:\"Do The Woo Community: Introducing the Content Sparks Hosting Team: Derek Hanson, Rae Morey, Robbie Adair and BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93144\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:110:\"https://dothewoo.io/introducing-the-content-sparks-hosting-team-derek-hanson-rae-morey-robbie-adair-and-bobwp/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:210:\"In the latest episode of Content Sparks, BobWP introduces three monthly hosts: Robbie Adair on content and AI, Rae Morey on all things media, and Derek Hansen on content management, promising valuable insights.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 13:24:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:19;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: Do the Woo Friday Shares, March 21, 2025 v11\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93186\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"https://dothewoo.io/blog/do-the-woo-friday-shares-march-21-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"Our curated content across the Woo and WordPress community and beyond.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 10:47:01 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:20;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:122:\"Do The Woo Community: Discovering the Impact of i2Coalition at Cloudfest with Christian Dawson, David Snead and James Webb\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93118\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:120:\"https://dothewoo.io/discovering-the-impact-of-i2coalition-at-cloudfest-with-christian-dawson-david-sneak-and-james-webb/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:232:\"At CloudFest 2025, experts from i2Coalition and BigScoots discuss the importance of collaboration in the hosting industry, addressing legislative challenges while emphasizing WordPress\'s role in supporting small businesses globally.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 09:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:21;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"Do The Woo Community: From Founding to Funding, Marieke van de Rakt’s Entrepreneurial Journey\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92989\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:90:\"https://dothewoo.io/from-founding-to-funding-marieke-van-de-rakts-entrepreneurial-journey/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:229:\"In this episode, Jonathan Wold and Tammy Lister chat with Marieke van de Rakt, co-founder of Progress Planner. They discuss her teaching, investment philosophy, and insights on e-commerce challenges and open source opportunities.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 20 Mar 2025 13:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:22;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:104:\"Do The Woo Community: Thoughts on CloudFest, Rollercoasters and WP Cloud’s Strategy with Elise Prather\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93074\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:99:\"https://dothewoo.io/thoughts-on-cloudfest-rollercoasters-and-wp-clouds-strategy-with-elise-prather/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:236:\"Elise Prather, VP at Automattic\'s WP Cloud, shares her immersive experience at CloudFest, highlighting its vast size, unique networking opportunities, and the customizable hosting solutions WP Cloud offers for companies and freelancers.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 20 Mar 2025 09:33:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:23;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:15:\"Matt: Radiohead\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140773\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"https://ma.tt/2025/03/radiohead/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:785:\"

It’s so funny that my random re-engagement with Radiohead re-emergence coincides with them doing a new entity that might mean something. I did a poll on Twitter and people preferred OK Computer to Kid A 78%!

\n\n\n\n

Grok told me: “The band has recently registered a new limited liability partnership (LLP) named RHEUK25, which includes all five members—Thom Yorke, Jonny Greenwood, Colin Greenwood, Ed O’Brien, and Philip Selway. This move is notable because Radiohead has historically created similar business entities before announcing new albums, tours, or reissues.”

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 19 Mar 2025 23:06:02 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:24;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:98:\"Do The Woo Community: Tara Claeys on the Benefits of Niching Down to School and Nonprofit Websites\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92779\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:97:\"https://dothewoo.io/tara-claeys-on-the-benefits-of-niching-down-to-school-and-nonprofit-websites/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:230:\"In this episode of WP Agency Tracks, hosts Marcus Burnett and Cami MacNamara discuss the benefits and challenges of niching down with guest Tara Claeys, emphasizing her focus on schools and nonprofits for greater business success.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 19 Mar 2025 14:04:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:25;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"Do The Woo Community: Ronnie Burt Chats About Gravatar’s Evolution and CloudFest Experiences\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93052\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:90:\"https://dothewoo.io/ronnie-burt-chats-about-gravatars-evolution-and-cloudfest-experiences/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:189:\"At CloudFest, Ronnie Burt discusses Gravatar\'s history, its integration with WordPress, recent spikes in usage from platforms like ChatGPT, and the importance of digital identity ownership.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 19 Mar 2025 10:30:38 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:26;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:65:\"Do The Woo Community: The Winners of the CloudFest Hackathon 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93009\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"https://dothewoo.io/blog/the-winners-of-the-cloudfest-hackathon-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:210:\"The CloudFest Hackathon 2025 celebrated innovation in open-source development, featuring diverse awards and emphasizing inclusivity within the tech community, with Accessible Infographics as the overall winner.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 15:57:07 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:27;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"WordPress.org blog: WordPress 6.8 Beta 3\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18634\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-3/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5533:\"

WordPress 6.8 Beta 3 is now ready for testing!

\n\n\n\n

This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, it is recommended you evaluate Beta 3 on a test server and site.

\n\n\n\n

You can test WordPress 6.8 Beta 3 in four ways:

\n\n\n\n
PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
Direct DownloadDownload the Beta 3 version (zip) and install it on a WordPress website.
Command LineUse the following WP-CLI command: wp core update --version=6.8-beta3
WordPress PlaygroundUse the 6.8 Beta 3 WordPress Playground instance to test the software directly in your browser without the need for a separate site or setup.
\n\n\n\n

The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

\n\n\n\n

Catch up on what’s new in WordPress 6.8: Read the Beta 1 and Beta 2 announcements for details and highlights.

\n\n\n\n

How to test this release

\n\n\n\n

Your help testing the WordPress 6.8 Beta 3 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important. This detailed guide will walk you through testing features in WordPress 6.8.

\n\n\n\n

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

\n\n\n\n

Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

\n\n\n\n

Vulnerability bounty doubles during Beta/RC

\n\n\n\n

Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

\n\n\n\n

Beta 3 updates and highlights

\n\n\n\n

WordPress 6.8 Beta 3 contains more than 3 Editor updates and fixes since the Beta 2 release, including 16 tickets for WordPress core.

\n\n\n\n

Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 3 using these links:

\n\n\n\n\n\n\n\n

A Beta 3 haiku

\n\n\n\n

Beta three refines,
WordPress shapes with steady hands,
Code grows into form.

\n\n\n\n

Props to @benjamin_zekavica @krupajnanda @ankit-k-gupta @joemcgill for proofreading and review.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 15:35:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:28;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"WPTavern: #161 – Robert Jacobi on WordPress, Security, and the OSI Model\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=188282\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:86:\"https://wptavern.com/podcast/161-robert-jacobi-on-wordpress-security-and-the-osi-model\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:52014:\"Transcript
\n

[00:00:00] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.

\n\n\n\n

Jukebox is a podcast which is dedicated to all things WordPress, the people, the events, the plugins, the blocks, the themes, and in this case, WordPress, security, and the OSI model, which underpins the entire internet.

\n\n\n\n

If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice, or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

\n\n\n\n

If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

\n\n\n\n

So on the podcast today we have Robert Jacobi. Robert has a long standing history with the tech and CMS industry, having worked in senior positions at Joomla, Cloudways, Perfect Dashboard and more. He’s now the Chief Experience Officer at Black Wall, a company formally known as BotGuard.

\n\n\n\n

Robert talks with me today about the transition from proprietary systems to open source, and the seven layer OSI model that underpins the internet. Drawing from his experiences in tech, Robert and I try, and perhaps fail, to break down the complexities of how website traffic is rooted over the internet. This is done to try to understand how Black Wall can position itself to mitigate risks before they reach hosting companies infrastructure.

\n\n\n\n

We also discuss the evolution of bot traffic on the web, where upwards of 10% of internet traffic is identified as malicious. This kind of insight is particularly important for those interested in the security aspect of web hosting and website management.

\n\n\n\n

We also get into Black Wall’s rebranding journey, and its continued dedication to the WordPress community by participating in events like WordCamp Asia and Europe.

\n\n\n\n

If you’ve ever wondered about the unseen layers of internet security and infrastructure, or the strategic moves involved in rebranding a tech company, this episode is for you.

\n\n\n\n

If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you’ll find all the other episodes as well.

\n\n\n\n

And so without further delay, I bring you Robert Jacobi.

\n\n\n\n

I am joined on the podcast by Robert Jacobi. Very nice to have you on. I think I’m going to muddle up the company that you work for, because a little bird tells me that in the very, very recent past, the company that you work for became, well different in some way. Perhaps a name change, a logo change. Who did you work for and who do you now work for? And are they the same thing?

\n\n\n\n

[00:03:08] Robert Jacobi: Well, I still have my original swag, the BotGuard polo, which all of us have at the team, but we are now Black Wall. So Black Wall, formerly known as BotGuard. So we’ve done a full rebrand. I’m sure a lot of folks have seen already. But yep, just bringing it forward. Allowing ourselves to take on more of what we do, on top of the highly focused bot security monitoring and mitigation.

\n\n\n\n

[00:03:32] Nathan Wrigley: Okay. That’s a perfect introduction then. So give us your potted bio in tech, in CMSs. I’m not going to say WordPress because it’s a bit bigger than that. And maybe just throw in the BotGuard, Black Wall bit at the end there, and what your role is there. So just a couple of minutes. Just tell us who you are and whatnot.

\n\n\n\n

[00:03:49] Robert Jacobi: Minutes, I could spend all day talking about myself. So I’ve been in the industry for a number of years. Mumble, mumble, how long it’s been. Let’s go with CMSs because, actually a big passion way back in the day, had an agency where we created our own, of course proprietary CMS because that’s what you did.

\n\n\n\n

And then moved into open source for a number of reasons. Primarily, which I hope all agencies don’t need to talk about anymore, because I think it’s pretty obvious. It was the hit by a bus theory that, we put all our eggs into a proprietary basket, and we get hit by a bus, then that customer is stuck. With open source, there’s the community of the ecosystem, and it’s huge.

\n\n\n\n

And, you’ll always have your preferred vendors for many, many, reasons, but if something happens, you’re not locked into that code. You’re not blindsided. That was a fairly quick transition, and wound up working at the time, sorry WordPress universe, went to Joomla because hey, back in that day Mambo slash which became Joomla, was honestly just more of a stack that our team leaned towards. It was MVC based. It was geeky. There were tons of features, and functions that the types of customers we were working with, it resonated with. Especially multilingual at the time.

\n\n\n\n

Fast forward, let’s say 10 years, and now WordPress is beyond a competing product. It’s got an ecosystem a, value with its name brand, and literally the immense community that’s been built around it.

\n\n\n\n

From there went to, transitioned off of the Joomla space, and popped into a company called Perfect Dashboard. Oh, I forgot, I actually was the president of Joomla, briefly, so.

\n\n\n\n

[00:05:31] Nathan Wrigley: Just a little fact there, yeah.

\n\n\n\n

[00:05:32] Robert Jacobi: You know what, I should not forget that because that one year felt like 10. It’s a lot to work with a huge community, for many, many reasons. You have so many stakeholders. People whose lives depend on the product, the solution, the community, the ecosystem. Certainly not going to get into WordPress drama, but I understand how difficult it is to bear those responsibilities. And, it’s a lot. Immense amount of work. And WordPress has done amazing things in sustaining that for decades.

\n\n\n\n

So, moved over to the WordPress side of the universe. Company called Perfect Dashboard. We were acquired. Moved to running the WordPress business unit of Cloudways, also now acquired by Digital Ocean. And today I’m at Black Wall. I’m the Chief Experiences Officer for Black Wall. So that includes community, includes evangelism, includes investor in government relations. It’s really making sure that there’s an ability to communicate all the things that we do to the right people.

\n\n\n\n

[00:06:32] Nathan Wrigley: And what does well formally BotGuard, now Black Wall, what do they do? What do they offer up into the market? Is it a WordPress thing, or is it more of a, we’ll get into the OSI model in a minute, but is it more of an operating system thing?

\n\n\n\n

[00:06:46] Robert Jacobi: It’s at the top of the stack. So while, let’s just call it 50%, I know that’s not the exact number, but it’s close enough that I, think it’s fair to say, 50% of the web is run by WordPress. We’re still very heavily involved in the community. So we were just at WordCamp Asia. We’ll be at WordCamp Europe. These are places want to meet folks, communicate our solution, and engage with hosting providers because, when we get to running through our little OSI stack that you and I are obviously super experts in, we’ll kinda see where WordPress falls into it and where security matters, up and down that stack.

\n\n\n\n

We’re trying to help WordPress end users and hosting companies before you ever actually have to get to WordPress, because we already see that a significant portion of internet traffic, 40% of internet traffic is bots. AI agents, whatever you want to call them. And 25% of that 40%, so 10% is completely malicious. And you don’t want to get near the hosting company, the actual application, or anywhere further down the stack if you can avoid it.

\n\n\n\n

[00:07:50] Nathan Wrigley: So it sounds, just the name, and I confess, I don’t know much about what BotGuard, Black Wall do, did. But it sounds to me from the naming of it, that it’s a bit like you are literally a sentinel. You are standing in the way of things. Examining things that are coming your way and saying, no, you may not pass, but you may.

\n\n\n\n

And a bit like throwing it into dev null, if something is unable to pass, you are just black walling it, as it were. You are just saying, nope, off you go, drop, you’re outta here. Is that basically the principle? You are a security firm preventing things that are bad happening to whoever it is that uses your services.

\n\n\n\n

[00:08:25] Robert Jacobi: Some of it’s super, super bad, so you’re going to dev null it. And then there’s a spectrum of how bad those connections can be. We want to focus on humans getting to human content. Our key, sort of value propositions, humans are secure, humans are actually visiting your site. That’s what’s important.

\n\n\n\n

But there are good bots, and there are good bots who accidentally do bad things. And then there are the bad, bad bots. We obviously want Google to index our sites. We may or may not want Open AI indexing our sites. We certainly don’t want it. causing an accidental denial of service by how much it’s scraping our content. Which we have seen many a time. Where it’s like, great Open AI, come on in, take one quick look and get out. But it’s like, I’m going to stay there and I’m going to churn through everything. And we’ve seen it and it knocks sites out. And the AI engines, agents are particularly bad about that, because they’re trying to fill in and understand that data.

\n\n\n\n

[00:09:25] Nathan Wrigley: Yeah. Okay, so we’ve got some idea of what you do. Just as an aside, what a shame that the internet has a need for a company like yours. I don’t mean to take the food off your table, but back 20 years ago this just wasn’t really a thing. Just this promise of the internet to be this philanthropic place with unicorns and rainbows everywhere, where we were all going to throw our content in, and we were all going to consume it and it would be wonderful.

\n\n\n\n

And now we have well, human beings presumably started the whole thing, but now human beings have written codes such that they can step away and let their robots carry on. And what a shame that we need to have things like captchas on forms. and we need to pay security companies to do all of this stuff.

\n\n\n\n

And again, I’m not trying to say that your business doesn’t have a place. Clearly it does. But from a philosophical point of view, I wish that they didn’t need to exist, because the place was benign and harmless all the time.

\n\n\n\n

[00:10:19] Robert Jacobi: I’m going to poke a tiny hole in that bubble.

\n\n\n\n

[00:10:21] Nathan Wrigley: Please do.

\n\n\n\n

[00:10:22] Robert Jacobi: Actually, this is not a bad thing because we’ve actually moved most of the troublemaking away from us locally. You want to go back 20 years ago and we’re dealing with Norton Antivirus on everything, and crossing our fingers and praying that something doesn’t sneak into our immediate homes.

\n\n\n\n

We’ve actually been able to, because we’ve gone to cloud, push a lot of that super local personal risk a bit further downstream. So these security issues didn’t magically appear, they were much more, in fact, they were much more terrifying before. And I, oh my god, my Windows PC got hacked and now I have to like completely just throw it on the grill, light it on fire five times, and then reinstall Windows.

\n\n\n\n

Most folks don’t worry about doing that with their laptops, with their phones or whatnot anymore. The scalable risks are completely different, because me getting hacked was one person. Now a cloud website platform application, and then I’m, 10 million people get hacked. But we’re pushing it further away and away and away.

\n\n\n\n

[00:11:24] Nathan Wrigley: Yeah, it’s interesting. I remember in the dawn of computers that I had, I didn’t begin my computer journey right at the very, very beginning. You could walk into a store and walk out with a computer in more or less, every town and village in the country, when I began using them.

\n\n\n\n

But the media, the way that you got things onto the computer was a physical thing. You held the object in your hand. It was either a CD or some kind of media that you could physically hold. And now of course literally nobody is installing anything off a CD. And so I guess the, inexorable rise of the internet, and everything coming down a, well, telephone line, and we’ll get into that in a moment. Putting it in the cloud makes way more sense, doesn’t it? It doesn’t really seem to have so much utility having the antivirus, if you like, on the computer. I know it does, don’t get me wrong. But I can see that the shift to mitigating the risk and detecting the risk and doing something about the problem in the cloud. Obfuscated, abstracted away, so that you never even really know what’s going on is probably the best way forward. So, yeah.

\n\n\n\n

[00:12:25] Robert Jacobi: For 99.9 9, 9 9 9% of people, they’re not going to know or understand that they just want it to work. They don’t want to be robbed from, or in danger online. I always put it, as techy as I appear to be, I am the worst car person on earth. So when I think about internet security and what most people want to know about it, it’s pretty much what I want to know about cars.

\n\n\n\n

I want my car to turn on. Go forward, go backward, get me to where I need to be as safely as possible. I don’t know, or care about anything else that’s going on under the hood. It’s a tool that I use and I want it to work like I expect it to work.

\n\n\n\n

[00:13:04] Nathan Wrigley: Yeah. Given the population at large, it must be, one in a hundred thousand who care about the internals of their machine, probably even less so. Doesn’t matter really what you’re using, be it Mac, Windows, Linux, Chromebook, whatever it is, you just to flip the lid open and you want to just.

\n\n\n\n

[00:13:18] Robert Jacobi: Check my email, log into my social media, buy something, call it a day.

\n\n\n\n

[00:13:23] Nathan Wrigley: But because it’s becoming an increasingly crucial part of our lives. Certainly where I live in the UK, more or less everything has gone online that’s of any use. So shopping has gone online. Appointments for doctors have gone online. Dentists, it’s gone online. Pharmacy appointments, it’s all gone online. Paying your taxes, it’s online.

\n\n\n\n

And so we really do need to protect this stuff. Really need to protect this stuff, because if it’s possible to, I don’t know, inject some problem in that path, we’re not just going to take out the beautiful experience of buying from a shop. We’re going to take out our ability to get fuel into our houses and into our cars and all of that.

\n\n\n\n

[00:13:58] Robert Jacobi: Yeah, if you need that prescription, you don’t want that to go down, so.

\n\n\n\n

[00:14:01] Nathan Wrigley: It’s become almost like, almost like a human right. That seems a bit of a ridiculous thing to say, but on some level, it seems like the internet or access to the internet is almost on that level. It certainly feels like it is as important as other key parts of the country’s infrastructure. So power and gas all of that, and the road network and what have you.

\n\n\n\n

[00:14:20] Robert Jacobi: It is the information utility. So you have your power utilities, you have an information utility. It’s got to be available. In the States we always have our last mile issues, especially for very rural folks, about how connected are they, how fast is it? We always do this to ourselves. We got this great new toy, now let’s see how, great we can make it. Yeah, but if you’re not running at a hundred megabits a second your experience might really not be functional.

\n\n\n\n

[00:14:46] Nathan Wrigley: So we’re going to talk today about something that I confess, I don’t know anywhere near enough of. So, Robert and I have shared an article, and I’ll put the article in the show notes. And essentially this thing that we’re going to talk about is what’s called the OSI model. And the OSI model comprises various different layers.

\n\n\n\n

And basically, dear listener, if you’ve never thought about the gubbins of your computer, you, might just have this fairy tale notion that you open it up and start typing and it just works. I can send an email, of course I can send an email, you just click send and it’s gone and that recipient receives it.

\n\n\n\n

But the breathtaking quantity of things going on in the background disguised from you. Really, honestly, Robert, none of this should work, and yet it does work.

\n\n\n\n

[00:15:36] Robert Jacobi: Which is why I love my car analogy. I have no idea what is going on 99% of the time. I still have a gas car, so I know there’s a larger motor than an electric car. I know gas gets in there and lit on fire and moves pistons around, but really, in the most abstract sense of it. It goes, and that’s what I want it to do.

\n\n\n\n

[00:15:56] Nathan Wrigley: There’s explosions happening all the time, and fuel is being funneled around, and things are turning because they’ve been lubed with oil and all of that. And honestly, your car is nothing compared to the internet. The complexities in the internet, because I know that electric cars have taken over from, or are taking over from gasoline cars, but broadly speaking, the gasoline engine probably hasn’t changed terrifically much in the last a hundred years. Whereas I think the infrastructure comprising the internet, although the OSI model probably hasn’t changed much either.

\n\n\n\n

The things that are coming down the pike, and the things that have happened in the last 20 years, it’s breathtaking. So, dear listener, get out your tinfoil hat as Robert and I attempt and probably butcher what the OSI model is. And if you’ve got the capacity. Perhaps pause this podcast, go to the wptavern.com website, search for this episode and read the article. And the one that Robert came up with, which was a good one, is called What is the OSI model? It Standardizes How Computer Networks Communicate, and it’s on bluecatnetworks.com, but I’ll provide the link.

\n\n\n\n

[00:17:00] Robert Jacobi: The best one I found that had the good pictures to also help. Because visually it’s hard to, you think you have a server, some wires and a browser and it’s like me saying I have an engine, some gas, and a steering wheel. There’s a lot of pieces that go in between all those parts.

\n\n\n\n

[00:17:18] Nathan Wrigley: The amazing thing is this all happens really at the speed of light and. Okay, a perfect example is Robert is literally half a world away from me, and I’m talking to him through a browser, and I imagine that there is the most fractional delay between the words that I’m saying and him hearing it.

\n\n\n\n

It’s probably like a thousandth of a second or something. And yet somehow that sound and that image is getting consumed by my camera. Traveling down a cable. Getting into my computer. The computer’s making decisions about, what the heck am I going to do with this? And then pushing it down a wifi network.

\n\n\n\n

That wifi network is then thinking, where do I put this thing? And then it puts it there. That then decides to shunt it along somewhere else, which shunts it along somewhere else. And eventually it gets to Robert’s computer. Robert’s computer does all of it in reverse. Unpacks it rather than packing it up, and puts it on the screen. And it’s all happening like thousands of times a second, and it shouldn’t work.

\n\n\n\n

[00:18:20] Robert Jacobi: It’s more live than live.

\n\n\n\n

[00:18:22] Nathan Wrigley: Yeah.

\n\n\n\n

[00:18:22] Robert Jacobi: Because not only do we have the video, we have a chat window on the side. It’s all encapsulated. Use some of these acronyms, but, we have our streaming protocol for the actual video and audio. And then we have our standard internet protocols for the content and everything else that’s holding the streaming protocols together.

\n\n\n\n

It’s crazy. Why I’m excited to have this conversation with you is like, I feel, very anecdotally, but people are like, I’m just going to spin up a WordPress site. I’m going to be a WordPress agency. And they just do it. And there’s just all this stuff in the mix that, while it’s great to take for granted, it might help to know just a few of the pieces that are critical in that security portion of infrastructure.

\n\n\n\n

[00:19:05] Nathan Wrigley: Yeah, it feels to me like a bit like you’ve been to a really nice restaurant and you’ve eaten a fabulous meal, and then you realize the 12 hours of labor that went into creating that tiny little sauce on the side or something like that. And you get real appreciation for it. And hopefully something like that will come out of this.

\n\n\n\n

Again, caveat emptor, we’re not going to get everything right. Please feel free to give us a comment when we do get things wrong. But the OSI model is basically, it’s a seven layer stack and I think we’ll start at layer seven, because it sounds easier to describe it from the top down. So seven through one. And I’ll just say what all the layers are.

\n\n\n\n

So they go from the application layer, that’s layer seven. Presentation layer is six. The session layer is five. Four is transport. Three is network. Two is data link. And then the final one is the physical layer. And this point, I completely stand back and say, Robert, tell us a little bit about the top one, and Robert puts his hands on his head, the application layer.

\n\n\n\n

[00:20:06] Robert Jacobi: It’s funny, it’s like the top most layer and the bottom most layer are the, I feel, the easiest to like grok. Let’s use geek terms, to understand.

\n\n\n\n

The application layers is as well as a WordPresser, I can explain. It’s really the top, you’re connecting from the client, your client application, so a browser, email, whatever, with specific protocols.

\n\n\n\n

And what we primarily use is TCP IP, because that’s that magical thing that is able to grab a bunch of information, split it up into a billion pieces, and somehow put it all back together. How are we communicating with other devices is the way I look at that layer. It’s very high level, very abstract, it’s sort of fundamental. It’s like the air we need to breathe to actually get stuff done.

\n\n\n\n

[00:21:00] Nathan Wrigley: It’s the layer, if I’m correct, it’s the layer closest to us, the user. It’s the layer which we can most readily understand, because it’s the layer closest to which we do things. So I think maybe a poor example, or an incorrect example, would be to imagine it’s something like Microsoft Word or something like that. Because it isn’t, the application itself isn’t that layer. It’s more how that interacts with the protocol underneath. So it might be HTTPS or FTP or something like that. But you are writing an email or something like that, and you hit send, and then the application layer gets in the way and says, what do we do with this?

\n\n\n\n

[00:21:38] Robert Jacobi: Bingo. That’s exactly it, so we use all these, and generically they’re just called clients. So whether it’s Word, Microsoft Word, whether it is Safari, whether it’s Chrome, whether it’s Apple Mail. This will only entertain a few people, or Eudora mail. Just taking it back. Those are discreet applications on our devices.

\n\n\n\n

And then the application, to your point, you hit send, you hit go on your browser. And now we’re like going crazy, okay, what do we do? We have a request. A request needs to go somewhere. That’s where the application layer kicks in.

\n\n\n\n

[00:22:11] Nathan Wrigley: So we have this protocol in the application layer, which then makes decisions about what to do. And each of the layers is collapsing into the layer below it. And that layer then takes something that the previous higher layer gave to it and does, some shenanigans with it, and we get something which can then move into the layer below.

\n\n\n\n

[00:22:30] Robert Jacobi: Everyone knows the application layer, because we’ve all typed in HTTPS://. That is literally the application layer request.

\n\n\n\n

[00:22:40] Nathan Wrigley: Okay, so in the case of a browser, it’s the capacity for the browser to send something through HTTP, what have you. And then we get into the presentation layer, which is the layer beneath. And I think, again, I’m just cribbing from this article, if I’ve parsed this correctly, it says that this layer comprises things like translation, encryption, decryption compression. And it turns all of the bits and pieces into machine readable data. So for example, it says it will convert all of the binary ones and zeros into machine readable data. If the devices are using a different communication method, the presentation layer translates that data into something understandable, so that it can be received from layer seven.

\n\n\n\n

And there’s a lot more to it than that. It’s like this layer of converting what came to it, into something else, which can then be moved down the stack into five.

\n\n\n\n

[00:23:34] Robert Jacobi: Bingo, that’s literally exactly it. And it’s something us as humans completely don’t interact with unless you’re the person building out that infrastructure. It’s really just we’re having computers talking to computers at this point. So when you typed in HTTPS WP Tavern, that was your human interaction. Now we’re all like, what is the process? So presentation is making sure that that data moves forward the stack.

\n\n\n\n

[00:23:59] Nathan Wrigley: And my understanding as well is that this is the moment where encryption and decryption occur. And so it’s high up in the stack. That is to say it’s near the layer seven, because you obviously can’t have it encrypted before you do anything with it. It’s high up in the stack so that at this moment, before it’s gone anywhere, it has become encrypted, before it’s passed down the stack and sent down the wires. But also, this is the moment if it’s coming up the stack, towards you so that you can read it in your browser, so that it’s getting decrypted at the last possible moment as well. So the encryption, I guess is at the first possible point on the way out, and the last possible point on the way back in. Have I got that right?

\n\n\n\n

[00:24:40] Robert Jacobi: Yeah, and that’s a great way to look at it is, when we look from the top of the stack to the bottom of the stack, it’s almost in physical proximity to you as the human end user.

\n\n\n\n

[00:24:48] Nathan Wrigley: Yeah.

\n\n\n\n

[00:24:49] Robert Jacobi: Because at first you’re typing in something. Now something’s happening, that encryption is happening locally, because otherwise it wouldn’t be safe. And as we get further down the stack, you are physically further away from what’s going on.

\n\n\n\n

[00:25:02] Nathan Wrigley: Yeah. And the other thing that’s going on here is compression. So you’ve got some giant blob of data that the stack can compress to make it more efficient to fly over the wires, then that will be handled at this layer as well, is my understanding.

\n\n\n\n

[00:25:17] Robert Jacobi: We have compression on the servers as well in the applications layer as well. Don’t forget, you can compress data on the protocol.

\n\n\n\n

[00:25:22] Nathan Wrigley: So that all sounds really remarkable, but also quite humanly understandable, because everything that I’ve said makes perfect sense. And we start from five down. It starts to be really the domain of networking experts, and people who really obsess about computers and understand this stuff. But if you’re just the person using the web and WordPress casually, honestly, it may be that you’ve never come across this stuff, and I found it just breathtaking, to be honest.

\n\n\n\n

So layer five, is called the session layer, and it is literally that. It’s managing sessions, so it’s figuring out who’s connected to who. How that communication should begin. How it should end. When it’s decided that, okay, that connection should be destroyed. We’re not using that anymore, but okay, now we’ve got something else that we need to do. And it figures out, yeah, sessions basically, which I guess is the easiest way to describe it.

\n\n\n\n

[00:26:15] Robert Jacobi: Everyone knows what a session is. It’s me being connected, and my information being managed for me, so that when I log in, Nathan doesn’t get all my information.

\n\n\n\n

[00:26:24] Nathan Wrigley: And also, an understanding here is that usernames and passwords, so authentication is happening at this layer as well. And again, that kind of makes sense. So you would have to authenticate before the decryption happens in the layer above and vice versa. But yeah, this is opening up connections between, in this case, you and I are chatting in a browser, so we’re occupying one session, and then there are million, literally millions of packets of data just flying around over the internet via who knows what route. They’re all going in completely different routes.

\n\n\n\n

[00:26:57] Robert Jacobi: Some of these packets can literally be going through Australia or South Africa or Brazil, and back and forth and they, catch up.

\n\n\n\n

[00:27:05] Nathan Wrigley: Incredible, isn’t it? Literally. It’s like, I don’t know. Imagine getting a handful of rice and chucking it all down on the floor, but it assembles itself into a tower. It just lands and it just assembles itself. That’s basically what we are dealing with.

\n\n\n\n

[00:27:19] Robert Jacobi: That’s a good one. Yeah, like I have my own rice tower at home. I throw it on the ground. It gets shipped by FedEx to you, but when you open up the box, it reassembles itself.

\n\n\n\n

[00:27:28] Nathan Wrigley: Just in perfect condition, yeah. So the next layer four, is the transport layer. And this is the bit which actually I guess begins the process of sending my stuff to you, and your stuff to me. And typically the protocols for that are something called UDP, which is User Datagram Protocol or TCP Transmission Control Protocol.

\n\n\n\n

And my understanding, which is very basic, is that UDP differs from TCP in that UDP can be more of a stream of data, because it doesn’t require everything to come through perfectly to say, yeah, that’s now finished. So a perfect example would be us talking to each other, streaming. If bits get lost along the way, it doesn’t want to say, right end the call.

\n\n\n\n

We haven’t got one bit. We need to just stop. Until that bit has been found, it just keeps going and just disregards the missing bits. Whereas TCP, this is just incredible. This is the rice tower, isn’t it?

\n\n\n\n

[00:28:28] Robert Jacobi: TCP is the rice tower, exactly.

\n\n\n\n

[00:28:30] Nathan Wrigley: It requires every single piece to be sent. Acknowledged. Counted out. Counted in at the destination, and for the both ends of the connection to be saying, did you get that bit? Yeah, I got that bit. What about this bit? Did you get that bit? Yeah, I got that bit. 23, did you get 23? No, 23 has gone. Where, where’s 23? Oh, I’ll send 23 again. Here it is. A million times a second for this conversation that we’re having. Well, it’s probably not a million times a second, but you know what I mean.

\n\n\n\n

And I’ve summed that up very badly, but these packets of data that are flying around. They egress my computer. They go through 7, 6, 5, now we’re in 4, and they’ve got to go through further layers. But they’re not just going in a straight pipe, like a hose pipe from your faucet, spraying the garden. These are just going anywhere they choose. So one packet, like you said, might go via Australia, one might go through South Africa, and then somehow they just reassemble themselves magically at the other end.

\n\n\n\n

[00:29:26] Robert Jacobi: Routers, because that’s what those do. Obviously that’s a physical component further down the pipe. They’re saying, this is the order of information. I’m going to just spew out, and everyone else needs to figure out how to put it back together, one piece. It’s crazy.

\n\n\n\n

[00:29:38] Nathan Wrigley: Yeah, it is crazy. My understanding is that back in the day, when the internet was conceptualized, I think it was possibly something like Darpanet, or something like that, but it was a, I think it was a military endeavor, the enterprise was something along the lines of, we need a communication system which if various nodes are taken out, let’s say, I don’t know, bombed out of existence, or just the power is cut, the system is intelligent enough to just work round the problem, and figure, okay, we can’t go there anymore, let’s just go a different way. And that is what we now have.

\n\n\n\n

[00:30:12] Robert Jacobi: It’s all about redundancy. I’m going to take just a slight tangent on federated social media. Any kind of federated application. Those exist in a lot of ways to ensure redundancy. I’m going to go way, way back, to where most of the audience probably wasn’t born. So we had these things called modems, and they would be attached to a phone, and you would run something called a bulletin board system. Those were single points of failure.

\n\n\n\n

So you actually saw groups of independent bulletin board system providers create these distributed federated networks. So if you sent an email to a specific person, at a specific BBS, if that phone line was busy, it could go to another one that would take it, and keep pushing it along until you actually got it to the right place. This idea of distributed and federated systems is really what makes the internet functional because we take care of failure points. We ignore them and just work around them.

\n\n\n\n

[00:31:17] Nathan Wrigley: And obviously we know that works as well because parts of every country’s infrastructure are breaking all the time. One router somewhere will just go down, even if it’s a crucial router, it doesn’t in the end stop the system. It probably creates bottlenecks in various places.

\n\n\n\n

[00:31:31] Robert Jacobi: Slow it down.

\n\n\n\n

[00:31:32] Nathan Wrigley: Slow the egress of traffic around, yeah. But in layer four we’re dealing with the ports that things fire out of as well. And then when we get down to layer three, that’s when the actual data is divided up into little packets and little segments. So data four and data three, honestly, to some extent they feel very similar in my head at least anyway.

\n\n\n\n

But layer three is using things like IP addressing, to decide where this packet’s going to go. And I think wraps the packets up in the IP address, if you like. It’s almost like wrapping up a Christmas present and as it travels down the stack, by the time it gets to layer three, it’s being told, this is not what it’s being told, but this encapsulates it. This is a gift for Robert Jacobi. You must find Robert Jacobi.

\n\n\n\n

Then it reads that, and then finally, it’ll rip off the wrapping and finally give you the gift at the end as it goes back up the stack. So, there’s not a lot to say on layer three, I don’t think, other than it’s using things like IP v4 and IP v6 to make decisions about how it’s going to be spread around. Have I got that about right? Do you think?

\n\n\n\n

[00:32:35] Robert Jacobi: That works for me. I think that’s enough information for most folks. Again, we’re trying to give a taste of how complex security is, for what we do day to day. But also how we can apply it to how WordPress understands it.

\n\n\n\n

[00:32:48] Nathan Wrigley: And then we’ve got the two layers where, the data link layer and the physical layer. The data link layer is handling the data transferred. So the actual data moving around. So it’s getting pushed around on the same network is my understanding for layer two. So that’s when you are, for example, in the same office building. I think layer two is just for that. I could be wrong.

\n\n\n\n

[00:33:11] Robert Jacobi: It’s getting to your router and then your router will start moving stuff around. Cause don’t forget, your router is on your network as well as any other computer in that closed. So, our 192’s. Our internal network, so that’s the closest on the networking side, that hardware side, because as soon as it hits our router it goes to the cable, or whoever you’re using, outside of your office, home, your LAN.

\n\n\n\n

[00:33:35] Nathan Wrigley: And then the final layer, the physical layer is the cables, the actual infrastructure out there in the world outside of your house, basically. Or your office building. Well, maybe there’s some of it in the office building as well, but the majority of it, the miles and miles of things are all in the physical layer. And it says here on the bit that I’m reading. Finally, this layer encompasses the equipment that carries data across the network, such as fiber network switches, and so on.

\n\n\n\n

And so finally, our packets of data that we started off at the beginning, writing the email to Robert Jacobi. Finally, that packet has made it out. It’s escaped into the wild, and is now just rattling around on the internet desperately being told, very quickly, where to go. And then hopefully it’ll arrive. Travel to Robert’s computer. Travel in the reverse direction of the stack, and he’ll get a nice email from me with cat pictures in it.

\n\n\n\n

[00:34:27] Robert Jacobi: Why is it always cat pictures?

\n\n\n\n

[00:34:29] Nathan Wrigley: Why not? Okay, so all of that shenanigans is happening, and honestly, I feel a, it’s very difficult if you’re inexperienced like me, to get the words out in the correct order so that I have demonstrated that I understand it. Because I do on a very, very slight level.

\n\n\n\n

And I know that entire careers, very, very, well paid careers can be built upon really understanding what we’ve just spoken about. But in there, I presume, is the capacity for threats, and the capacity for things to go wrong, and the capacity in all of these layers for people to inject things which shouldn’t be there. For clever people to figure out ways to disrupt that information. To take that information. To delete that information. To rewrite that information. And is that essentially what your company does? Prevent those things?

\n\n\n\n

[00:35:18] Robert Jacobi: So when I look at it from a CMS stack, and again, let’s focus on WordPress. My mental model that is slightly different. I’ll use, I think what most of us feel like is WordPress infrastructure. I know, the really smart folks are going to yell at me for this. You have a server somewhere. It has an operating system, it has PHP, MySQL, it has WordPress, and then whatever else is in front of it.

\n\n\n\n

So there’s a whole stack and layer on layers of communication that go from when I hit my browser and type in WP Tavern and hit go. And let’s move away from all the really highly technical networking protocol issues.

\n\n\n\n

At some point, it’s going to make a request to a hosting company that needs to be able to say, oh, yes, let’s give them the WP Tavern homepage. In that process there are caching services, firewall products, local security on the networking side of that hosting company. What I feel personally, but also which is what makes products like Black Walls critical is, detect and defend as far away from the website as possible.

\n\n\n\n

So if there are a million bots coming at you, get them before they even hit the hosting company’s infrastructure. Some will always sneak through because it’s a battle that’s just never ending and, you’re going to keep learning and fighting and learning and fighting. Mitigate the risks as close to the bad actor, and as far away from the site as possible. So, mitigate, mitigate, mitigate, mitigate, mitigate. And there are tools and solutions up and down that entire stack.

\n\n\n\n

So you’re going to have stuff way before you hit the hosting company. You’re going to have some solutions closer to the hosting company. You’re going to have solutions directly on WordPress. There are security plugins that are running on your install of your site. Those are great. I personally feel that you don’t want to even get that close if you’re a bad actor. Mitigate that problem as quickly, as soon as possible.

\n\n\n\n

And even solutions that work at the operating system level, or at least the language level. There are products out there that are constantly monitoring, looking for and mitigating PHP corruption. So, you really don’t want to let everyone have access all the way down to that level, because then you’re already, you will have problems, how to put it nicely. We don’t say bad words on the show.

\n\n\n\n

[00:37:53] Nathan Wrigley: So do you sell your product into the WordPress space? So, you know, to freelancers, agencies, or are you more at the hosting level, or is it even more like infrastructure level? So at the router level. So in our case, this sort of physical layer that we were talking about. Is that the kind of place where your products go? I honestly don’t know where your product sits in all of that.

\n\n\n\n

[00:38:16] Robert Jacobi: So, if you look at it from a hardware perspective, there’s going to be the end user is going to make request. It’s going to get routed somewhere. We sit between where it’s getting routed and the hosting company. So our goal is to prevent the hosting company from wasting physical resources. Now we need to amp up our service because there’s so much traffic coming in.

\n\n\n\n

Now we need to amp up our customer support because more stuff is happening with our virtual machines or hosted infrastructure. So that’s our place in the universe. Get the bad guys before they get to the critical infrastructure.

\n\n\n\n

[00:38:51] Nathan Wrigley: And another question, forgive my ignorance. Is Black Wall’s solution, is it software? Is it code that sits on an operating system? Or maybe you even have hardware that sits in the way of things, the packets have to transfer through your hardware and be inspected in a way, like a router might get in the way of those things.

\n\n\n\n

[00:39:10] Robert Jacobi: Our secret sauce is that we are software that emulates the hardware that used to be required. So there are hardware companies buy this kind of routing and prevention, traffic mitigation. And we do it on the software side so that you as an agency or MSP, if you’re running a bunch of virtual machines, you can deploy this on your own. Certainly as a hosting company, you can deploy this across your entire enterprise.

\n\n\n\n

[00:39:36] Nathan Wrigley: So you are dealing with very technical, the people that purchase from you they’re not me, for example. They are very technical. They’re in the data centers. The sort of technical end of the hosting companies. They understand what I’ve just butchered during this episode.

\n\n\n\n

It’s not like a freelancer market. You will not be selling Black Wall as a plugin. You are dealing with, directly with hosting companies and the tech side of those hosting companies.

\n\n\n\n

[00:40:01] Robert Jacobi: There’s a wonderful German word called Jein. So yes and no.

\n\n\n\n

[00:40:04] Nathan Wrigley: Oh, that is a good word.

\n\n\n\n

[00:40:05] Robert Jacobi: For all the Germans listening. You still want to be able to control a lot of times exactly what kind of traffic comes in. You might want to get scraped by AI bots more than someone else does. Or you might want to turn off all scraping if you’re an e-commerce store and you’re worried about people taking your pricing and not allowing you to sell at your level.

\n\n\n\n

We’ve had, and are currently reworking our entire WordPress plugin, to enable that end user control of that infrastructure. So it’s not running on your WordPress install, which is great because it’s not taking up resources, filling up your hard drive. But you can control, as an end user, the granularity of the traffic that’s able to access your site.

\n\n\n\n

[00:40:45] Nathan Wrigley: Oh, so you have a plugin, so you are reading what the hosting company is doing. You can view it through a GUI on your WordPress website, but you are not actually, it’s nothing to do with your WordPress install. You’re getting the data from your hosting company, and that is another layer away from you. Okay. That’s interesting. I didn’t realise that.

\n\n\n\n

[00:41:04] Robert Jacobi: Yes, it empowers all these website owners, agencies, MSPs, to fine tune, for lack of a better term.

\n\n\n\n

[00:41:10] Nathan Wrigley: Yeah. And then do you offer a sort of GUI for data breakdown, tables, graphs, charts, and ways to block things that you imagine are suspicious, and alerting and things like that?

\n\n\n\n

[00:41:20] Robert Jacobi: Yep, as well as defaults for all sorts of things of course, just to make life easier for folks. You can go and visit our site and get some initial monitoring for your site for free. We enjoy having that as part of just an offering of the reporting and monitoring, you can see it. My traffic has been great, and then all of a sudden you look and it’s oh wait, it’s just been Chat GPT.

\n\n\n\n

[00:41:40] Nathan Wrigley: Sad realization that the million visitors that seemed to be going to your excellent article were in fact Chat GPT.

\n\n\n\n

[00:41:47] Robert Jacobi: Bots stealing that information.

\n\n\n\n

[00:41:49] Nathan Wrigley: Sadly, time has got the better of us. We’re at the time where Robert has to walk away. I know he’s got a hard stop. Firstly, my apologies, dear listener for utterly butchering the OSI model. I’m sure there’s a lot of geeks out there who were just throwing things.

\n\n\n\n

[00:42:01] Robert Jacobi: They’re going to kill, but my hope is everyone looks it up, a lazy Sunday afternoon understanding.

\n\n\n\n

[00:42:06] Nathan Wrigley: Exactly. And that, really was my capacity to understand it. Doesn’t matter how much more I read it, I will be able to get no more out of it. But an important conversation, and one that we’ve never had before. We never get into the weeds of all of that. It’s always WordPress all the way down.

\n\n\n\n

And this is what’s happening before, WordPress gets to put the bits and your screen. So really important and hopefully, like Robert said, it will encourage people to go and have a little look.

\n\n\n\n

Robert Jacobi, thank you so much for chatting to me today, and good luck with the new rebranding of BotGuard into Black Wall. I hope that goes well too. Thank you so much.

\n\n\n\n

[00:42:39] Robert Jacobi: Thank you Nathan.

\n
\n\n\n\n

On the podcast today we have Robert Jacobi.

Robert has a long-standing history with the tech and CMS industry, having worked in senior positions at Joomla, Cloudways, Perfect Dashboard, and more. He’s now the Chief Experience Officer at Black Wall, a company formerly known as BotGuard.

Robert talks with me today about the transition from proprietary systems to open source, and the seven-layer OSI model that underpins the internet. Drawing from his experiences in tech, Robert and I try, and perhaps fail, to break down the complexities of how website traffic is routed over the internet. This is done to try to understand how Black Wall can position itself to mitigate risks before they reach hosting companies infrastructure.

We also discuss the evolution of bot traffic on the web, where upwards of 10% of internet traffic is identified as malicious. This kind of insight is particularly important for those interested in the security aspect of web hosting and website management.

We also get into Black Wall’s rebranding journey, and its continued dedication to the WordPress community by participating in events like WordCamp Asia and Europe.

\n\n\n\n

If you’ve ever wondered about the unseen layers of internet security and infrastructure, or the strategic moves involved in rebranding a tech company, this episode is for you.

\n\n\n\n

Useful links

\n\n\n\n

Black Wall (formerly BotGuard)

\n\n\n\n

Joomla

\n\n\n\n

Cloudways

\n\n\n\n

Digital Ocean

\n\n\n\n

What is the OSI model? It standardizes how computer networks communicate

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 14:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:29;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:103:\"Do The Woo Community: The Challenges and Wins of Creating a Suite of WordPress Plugins with Steve Burge\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92722\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:102:\"https://dothewoo.io/the-challenges-and-wins-of-creating-a-suite-of-wordpress-plugins-with-steve-burge/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:183:\"In this episode host Mark Westguard chats with Steve Burge, founder of PublishPress, discussing their journeys, the evolution of WordPress plugins, and strategies for business growth.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 09:26:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:30;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"Gutenberg Times: Source of Truth (WordPress 6.8)\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=38037\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:57:\"https://gutenbergtimes.com/source-of-truth-wordpress-6-8/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:51232:\"

Ahead of WordPress 6.8 Beta release and in absence of Anne McCarthy, we publish the Source of Truth a second time on the Gutenberg Times.

\n\n\n\n

With me, I mean all the collaborators on this post: Krupal Lakhia, Justin Tadlock, Jonathan Bossenger, and JuanMa Garrido.

\n\n\n\n

Changelog

\n\n\n\n

Any changes will be cataloged here as the release goes on. The links below are all anchor links to the respective sections in this post.

\n\n\n\n

Updates March 26, 2025

\n\n\n\n

Accessibility Improvements in WordPress 6.8

\n\n\n\n

Updates March 25, 2025

\n\n\n\n\n\n\n\n

If you find missing features, please ping me on WPSlack or DM on Bluesky (@gutenbertimes.com)

\n\n\n\n

Important note/guidelines

\n\n\n\n

Please do not copy and paste what is in this post since this will be shared with many people. This should be used to inspire your own content and to ensure that you have the best information about this release. If you do copy and paste, keep in mind that others might do the same, opening the door for some awkwardness around duplicated content out on the web. 

\n\n\n\n
    \n
  • Each item has been tagged using best guesses with different high level labels so that you can more readily see at a glance who is likely to be most impacted.
  • \n\n\n\n
  • Each item has a high-level description, visuals (if relevant), and key resources if you would like to learn more.
  • \n
\n\n\n\n

Overview 

\n\n\n\n

Note: As always, what’s shared here is being actively pursued, but doesn’t necessarily mean each will make it into the final release of WordPress 6.8.

\n\n\n\n

WordPress 6.8 is set to be released on April 15th, 2025. This release continues refining foundational features introduced in previous versions, focusing on improving data views, query loops, and block interactions. It introduces a more streamlined design experience with a Zoom Out editing approach, expanded style controls, and enhanced typography options. API developments, including the Block Hooks and Interactivity API, aim to enhance extensibility, while speculative loading integration and performance optimizations seek to improve site speed. Accessibility improvements and ongoing support for PHP 8.x ensure WordPress remains user-friendly and forward-compatible.

\n\n\n\n

Of note, this release includes Gutenberg 19.4 – 20.4.

\n\n\n\n

Important links:

\n\n\n\n\n\n\n\n

6.8 assets: 

\n\n\n\n

In this Google Drive folder you can view all assets used in this document.

\n\n\n\n

Tags

\n\n\n\n

To make this document easier to navigate based on specific audiences, the following tags are used liberally: 

\n\n\n\n

[end user]: end user focus. 

\n\n\n\n

[theme author]: block or classic theme author. 

\n\n\n\n

[plugin author]: plugin author, whether block or otherwise.

\n\n\n\n

[developer]: catch-all term for more technical folks. 

\n\n\n\n

[site admin]: this includes a “builder” type. 

\n\n\n\n

[enterprise]: specific items that would be of interest to or particularly impact enterprise-level folks

\n\n\n\n

If no tags are listed, it’s because the impact is broad enough to impact everyone equally. 

\n\n\n\n\n\n\n\n

Priority items for 6.8

\n\n\n\n

Global Styles available on the main site editor sidebar

\n\n\n\n

[theme author] [site admin]

\n\n\n\n

The Site Editor sidebar is getting increasingly powerful, serving as the entry point to manage all things on your site. Until this version, the Styles panel offered limited style settings, focusing on style variations, color palettes, and typographies. WordPress 6.8 changes this by introducing a full-fledged Global Styles panel in its place, giving users site-wide granular control of styles at the top level.

\n\n\n\n\"Site\n\n\n\n

Swifter hiding and showing the template

\n\n\n\n

[theme author][site admin]

\n\n\n\n

Switching between editing your site templates and content pages should be as smooth and seamless as possible; sometimes, you need to focus on the post content and hide the rest of the template. This was previously possible in the post settings, but now it is much easier thanks to the Show template toggle directly on the preview dropdown in the top toolbar.

\n\n\n\n \n
\n \n \n \n \n\n\n

The new update in WordPress allows developers to set how the block editor displays content based on the type of post. This means you can now customize the editor’s default behavior by adding specific settings to a post type’s configuration. (69286).

\n\n\n\n

Style Book

\n\n\n\n

[theme author][site admin]

\n\n\n\n

The Style Book provides a comprehensive overview of your site’s colors, typography, and block styles in an organized layout. Each block example and style group is labeled, making it easy to preview and understand your theme’s current design settings.  

\n\n\n\n
\n

Think of it as if your theme threw a party, and all the design elements showed up wearing name tags. ?

\n\n\n\n

Ramon Dodd, release lead of Gutenberg 19.9 

\n
\n\n\n\n

The Style Book can be accessed in two ways. The first option is via the Styles menu item in the left sidebar. The second option is available when editing theme elements via the right Styles sidebar. This was already available in WordPress 6.7. 

\n\n\n\n

With WordPress 6.8, opening the Style Book from the left sidebar Styles menu shows subsets of blocks and makes them available for site wide editing. 

\n\n\n\n

When you click on Typography you can preview all text-related blocks, and adjust options and settings. You can preview and modify specific blocks via the Blocks option. 

\n\n\n\n

The Style Book also received some performance improvements to ensure a more fluid user experience. 

\n\n\n\n
    \n
  • Give the Style Book its own route so it can be linked to directly (67811).
  • \n\n\n\n
  • Scroll to top at the styles root (67605).
  • \n\n\n\n
  • Try splitting the Style Book into sections (68071).
  • \n
\n\n\n\n \n
\n \n \n \n \n\n\n

For classic themes that support the Style Book, site patterns have been relocated to Appearance > Design > Patterns, consolidating all design-related functionality from the Site Editor into one place. Previously, patterns were listed under Appearance > Patterns.

\n\n\n\n

Support is available for classic themes that either support editor styles via add_theme_support( ‘editor-styles’ ) or have a theme.json file (66851).

\n\n\n\n

Zoom Out View

\n\n\n\n

[theme author][site admin][end user]

\n\n\n\n

In Zoom Out view, users can now apply different section styles and designs directly from the toolbar, cycling through them and inspecting them in the context of the rest of the page. This enhancement streamlines the decision-making and production process (67140). 

\n\n\n\n\"change\n\n\n\n

The Block options on the block toolbar only lists Copy, Cut, Duplicate, and Delete for sections in Zoom Out view (67279).

\n\n\n\n\"Zoom\n\n\n\n

In addition to the added Zoom Out icon in the toolbar, users can also invoke Zoom Out view via the Keyboard shortcut Shift command + 0 on a Mac and Shift + Ctrl + 0 on Windows (66400). The shortcut has also been added to the Keyboard shortcuts list. 

\n\n\n\n\"keyboard\n\n\n\n

Design Tools

\n\n\n\n

[end user][theme author] [site admin]

\n\n\n\n

Design Tools offers increasingly refined tools for visual customization. When it comes to border and spacing support, the block editor itself provides granular controls within individual blocks, allowing users to define border widths, styles, colors, and radii, as well as precise padding and margin adjustments. These controls facilitate the creation of visually distinct elements and well-structured layouts. The work for WordPress 6.6 and 6.7 was continued for WordPress 6.8 to provide all design tools to all blocks, where possible. 

\n\n\n\n

In this release, the following blocks received border support

\n\n\n\n
    \n
  • Comments (66354),
  • \n\n\n\n
  • Comments Link (68450),
  • \n\n\n\n
  • Comments Count (68223),
  • \n\n\n\n
  • Latest Posts (66353),
  • \n\n\n\n
  • Page List, also received color and spacing support (66385),
  • \n\n\n\n
  • Content, also spacing support (66366),
  • \n\n\n\n
  • RSS, also spacing support (66411),
  • \n\n\n\n
  • Archives, also color support (63400), (68685), and
  • \n\n\n\n
  • Query Total (68323)
  • \n
\n\n\n\n

Beyond those, the Category block supports color options as well (68686).

\n\n\n\n

For the Post Content block, the color support via the sidebar Design Tools has been brought up to feature parity with the options available via theme.json. Now users and designers can adjust colors for all heading levels in addition to text, background, and link (67783).

\n\n\n\n\"post\n\n\n\n

Another user experience improvement can be found in the list of fonts: Each font family is now previewed in the font picker dropdown and gives users a better indication as to what the font will look like (67118).

\n\n\n\n\"preview\n\n\n\n

The Roster of design tools per block (WordPress 6.8 edition) gives you a complete overview of the available Design Tools per core block. 

\n\n\n\n

Updated Core Blocks 

\n\n\n\n

Buttons 

\n\n\n\n

[theme author][developer]

\n\n\n\n

WordPress 6.8 adds a small piece of code (`box-sizing: border-box;`) to the styling of buttons. Imagine you’re putting a picture in a frame. You want the picture to fit nicely within the frame’s borders. That’s what `box-sizing: border-box;` does for buttons (and other elements) on a website. It tells the browser to include the border and padding of an element in its total width and height (65716)

\n\n\n\n

Cover Block

\n\n\n\n

[theme author][site admin][end user]

\n\n\n\n

Images used as backgrounds in Cover blocks now come with resolution controls so that you can change their sizes. This works with both an uploaded background image or the already assigned featured image. This adds to the more granular control for designers and theme developers. (#67273), (62926).

\n\n\n\n

Details block

\n\n\n\n

[theme author][site admin][developer][end user]

\n\n\n\n

In WordPress 6.8 the Details block is now more flexible to use and has received some quality-of-life updates: 

\n\n\n\n

The addition of the name attributes field in the Advanced panel of the block’s settings. This allows a group of Details blocks to be connected and styled if needed.  (56971

\n\n\n\n\"Details\n\n\n\n\"shows\n\n\n\n

The summary content is used as the label in the List View which makes it quicker to identify the block and allows for easier reorganizing of content (67217). 

\n\n\n\n\"Shows\n\n\n\n

The Details block also receives anchor support via the Advanced panel, allowing users to create anchor links to specific Details blocks. 

\n\n\n\n

With the help of the allowedBlocks attributes, developers can now control what blocks content creators can use in a Details block. (68489). 

\n\n\n\n

File block

\n\n\n\n

[end user][site admin]

\n\n\n\n

Allow content-only editing, which gives users the ability to update the filename text and download button text (65787).

\n\n\n\n\n\n\n\n

[end user][site admin]

\n\n\n\n

Each image in a Gallery block shows multiple options on how a link should behave and how a visitor to the site can interact with the images. For WordPress 6.8 contributors added Expand to click to the Gallery’s toolbar to open all images in a light box effect, with one click. The option is available from the Link toolbar button (64014). 

\n\n\n\n\"Gallery\n\n\n\n

Image Blocks and handling

\n\n\n\n

[end user][site admin]

\n\n\n\n

The outcome of the Image manipulation methods are now better communicated in the block editor. The success notices are displayed at the bottom of the editor. The notices also come with a handy Undo link to revert to the original if necessary (67314, 67312).

\n\n\n\n\"shows\n\n\n\n\n\n\n\n

[theme author][site admin][end user]

\n\n\n\n

Featured images offer a nice touch in external previews, making them more attractive to potential readers. However, it can be easy to forget to set one! To help set featured images more easily, Image blocks now offer a dropdown action to directly set them as the featured image of the post or page containing the block (65896).

\n\n\n\n\"Displays\n\n\n\n

Another WordPress 6.8 update also changes how the Image block handles those cool overlay styles aka filters (like a semi-transparent color wash) designers might add on top of images. It’s making the way these styles are applied more efficient and reliable. Details on CSS changes can be found in the PR (67788). 

\n\n\n\n

Navigation Block

\n\n\n\n

[end user][site admin][theme author]

\n\n\n\n

The theme of polish also continues for the Navigation Block. Menu names are now displayed in the List View for easier orientation and, for faster design considerations, a Clear option was added to the color picker(68446)(68454). 

\n\n\n\n

These updates enabled non-interactive formats for the block, and users can now use the choices from the dropdown menu in the block’s tools bar, like Highlight, Strikethrough, or Inline image (67585). 

\n\n\n\n

Additional update to the Navigation Block

\n\n\n\n
    \n
  • Customizable Post Status Visibility in Navigation Block Links (63181) (see dev note).
  • \n\n\n\n
  • Consistent Class Application for Navigation Block Menu Items (67169) (see dev note)
  • \n\n\n\n
  • Consistent Markup for Navigation Item Labels (67198) (see dev note)
  • \n
\n\n\n\n

Query Loop Block

\n\n\n\n

[site admin][theme author][end user]

\n\n\n\n

For Pages, content creators will find two additional sorting options: Ascending by order and Descending by order, which allows for a display following the page attribute page_order (68781). 

\n\n\n\n \n
\n \n \n \n \n\n\n

Looking to replace your Query Loop block’s design? The Query Loop block patterns have been relocated from a modal to a dropdown. It’s still in the block toolbar, now under Change design (66993).

\n\n\n\n\"new\n\n\n\n

The Query Loop block now has a new option to ignore sticky posts. When selected, the Query Loop block ignores whether a post has the sticky option enabled. When used, all posts show based on the ORDER BY preferences selected without taking the sticky status into account. (66221) (69057)

\n\n\n\n\"query\n\n\n\n

The Query Loop block can get pages from all levels. Contributors added an attribute to just display the top level pages. Currently, users can only set “parents”: [0], via the code editor. There’s no easy option in the user interface yet.

\n\n\n\nExample of Test Query\n
<!-- wp:query {\"queryId\":1,\"query\":{\"perPage\":10,\"pages\":0,\"offset\":0,\"postType\":\"page\",\"order\":\"desc\",\"orderBy\":\"date\",\"author\":\"\",\"search\":\"\",\"exclude\":[],\"sticky\":\"\",\"inherit\":false,\"parents\":[0],\"format\":[]}} -->\n<div class=\"wp-block-query\"><!-- wp:post-template -->\n<!-- wp:post-title /-->\n\n<!-- wp:post-date /-->\n<!-- /wp:post-template -->\n\n<!-- wp:query-pagination -->\n<!-- wp:query-pagination-previous /-->\n\n<!-- wp:query-pagination-numbers /-->\n\n<!-- wp:query-pagination-next /-->\n<!-- /wp:query-pagination -->\n\n<!-- wp:query-no-results -->\n<!-- wp:paragraph {\"placeholder\":\"Add text or blocks that will display when a query returns no results.\"} -->\n<p></p>\n<!-- /wp:paragraph -->\n<!-- /wp:query-no-results --></div>\n<!-- /wp:query -->
\n\n\n\n\n

Introducing the Query Total block

\n\n\n\n

[theme author][site admin][end user]

\n\n\n\n

You know how many results are in your queries, but do your site’s readers? The new Query Total block is here to help.When added to a Query Loop block, the Query Total block displays the number of results the query has returned, or, alternatively, the current range in a set of paginated results. Out of the box, the new block shows its border controls (68150)(68323) (68507).

\n\n\n\n\"Query\n\n\n\n

Separator Block

\n\n\n\n

[theme author][developer][site admin]

\n\n\n\n

Now designers and creators can choose between a <div> or <hr> tag, opening up more styling possibilities for this block. The setting to switch can be found under Advanced > HTML Element. The transformation option now also includes the Spacer block. (67530) (66230)

\n\n\n\n\"div\n\n\n\n

Social Icons block updates

\n\n\n\n

[end user][site admin]

\n\n\n\n

The social icons block shipped with the option to add a Discord icon, received a Clear button to reset color options, and received contentOnly support. To add a URL to the icons, you now only need to press the arrow key once. This certainly streamlines the content creation process. (64883) (68564) (66622)

\n\n\n\n\"Social\n\n\n\n

Editor improvements 

\n\n\n\n

[end user][site admin][theme author]

\n\n\n\n

The Editor screens received a few helpful improvements in WordPress 6.8. 

\n\n\n\n

Reset 

\n\n\n\n

Reset colors for blocks and global styles in the editor with a single click thanks to the inline reset button added to all color controls (#67116). The Shadow panel and the Duotone settings also received a very handy reset button. Instead of the need to remove settings one at a time, designers can quickly start over. (66722) (68981)

\n\n\n\n

Cut

\n\n\n\n

The Block Options menu now also lists a Cut action together with the Copy action in the dropdown menu. (68554)

\n\n\n\n\"Cut\n\n\n\n

New Commands

\n\n\n\n

Two new commands were added to the Command Palette in the Site editor: 

\n\n\n\n
    \n
  • The Add new page command creates a new page from anywhere in the site editor and speeds up the content creation process (65476). 
  • \n\n\n\n
  • The Open Site Editor command offers a one click navigation to the site editor, from the page or post editor screens accessed via the WP-Admin menu (66722).
  • \n
\n\n\n\n

Starter Content

\n\n\n\n

With WordPress 6.8, a new pattern category is available, called Starter Content. It lists the page layouts that are otherwise available via the New Page modal. If a user has disabled the starter content  pop-up when creating new pages, this category surfaces the page layouts, should they be needed. (66819) The Inserter now also always shows all the available patterns in a list. (65611).

\n\n\n\n \n
\n \n \n \n \n\n\n

Patterns in folders

\n\n\n\n

[theme author][site admin] [developer]

\n\n\n\n

With WordPress 6.8 developer can now use sub-folders to organize patterns for their themes. For example, all header patterns are added to the “header” folder, all footer patterns into the “footer” folder, testimonials patterns into the “testimonials” folder, and so on. (62378)

\n\n\n\n

Data Views updates 

\n\n\n\n

This release also contains quite a few Data Views improvements:

\n\n\n\n

A user can modify the amount of whitespace that is displayed per row on three levels: comfortable, balanced, and compact.  (67170)  

\n\n\n\n

You can now set your site’s homepage from the Site Editor via the page’s actions menu (#65426). This is the equivalent of updating the Reading Settings in Settings > Reading. Under Pages in the editor, find the page you’d like to set as your homepage, click on the action menu, and select Set as homepage.

\n\n\n\n

All delete actions now show a Confirm to delete modal, to safeguard against accidental removal of templates, patterns, or pages. (67824)

\n\n\n\n

Here is a list of PRs with more Data View changes: 

\n\n\n\n
    \n
  • Add: Media field changing UI to Data views and content preview field to posts and pages. (67278)
  • \n\n\n\n
  • Add combined fields support. (65399)
  • \n\n\n\n
  • DataViews Fields API: Default getValueFromId supports nested objects. (66890)
  • \n\n\n\n
  • DataViews list layout: Hide actions menu when there is only one action and is primary. (67015)
  • \n\n\n\n
  • DataViews table layout: Hide actions menu when there is only one action and is primary. (67020)
  • \n\n\n\n
  • DataViews: Expand configuration dropdown on mobile. (67715)
  • \n\n\n\n
  • DataViews configuration dropdown: Remove style overrides. (65373)
  • \n\n\n\n
  • Update “hidden” icon to be clearer, and invert logic as used in DataViews. (65914)
  • \n
\n\n\n\n

API iterations

\n\n\n\n

[developer][plugin author][enterprise]

\n\n\n\n

New and updated functions and filters

\n\n\n\n

The new filter should load block assets provides a way for classic themes to use `wp-block-library` even when loading block assets only for blocks that actually render on a page. (61965). The dev note: New filter should_ load_block_ assets_on_demand in 6.8 has the details.

\n\n\n\n

WordPress 6.8 introduces a new function wp_register_block_ types_from_ metadata_collection(), which allows plugins to register multiple block types with a single function call. (62267) See also Dev Note More efficient block type registration in 6.8

\n\n\n\n

The block registration API now enforces the blockType.parent setting to be an array. The editor will now display a warning if it’s a different type, such as a `string`. (66250).

\n\n\n\n

Also consult the post Updates to user-interface components in WordPress 6.8

\n\n\n\n

Interactivity API

\n\n\n\n

The Interactivity API in WordPress 6.8 introduces an improved wp-each directive, making it more flexible and reliable. Previously, it could only loop through arrays or objects with a .map method. Now, it supports any iterable value, including strings, arrays, maps, sets, and generator functions. Additionally, it can handle undefined or null values by subscribing to changes and updating automatically when the value becomes iterable (67798).

\n\n\n\n

The release also brings a set of best practices to WordPress, developers using the Interactivity API and creating their own store might find the Dev Note: Interactivity API best practices in 6.8. particularly interesting, on how to avoid deprecation warnings and future-proof your plugins.

\n\n\n\n

This release also introduces the withSyncEvent action wrapper utility to streamline event handling, reducing potential performance bottlenecks (#68097). Details can be found in above linked dev note.

\n\n\n\n

Block Hooks API 

\n\n\n\n

In WordPress 6.8, work continues on improvements to the Block Hooks API.

\n\n\n\n

The Block Hooks API now supports dynamically inserting blocks into post content. (67272) A typical example would be a plugin that provides blocks that can be used in posts and that would like to provide extensibility for those blocks. The Block Hooks API will now also work with Synced Patterns. (68058)

\n\n\n\n

Security enhancements

\n\n\n\n

Various security-related enhancements made it into WordPress 6.8, the most significant of which is the switch to using bcrypt for password hashing. This includes improvements to the algorithm that’s used for storing application passwords and security keys. The dedicated post WordPress 6.8 will use bcrypt for password hashing covers these changes in detail. You will find a list of all security updates in 6.8 on WordPress Core Trac.

\n\n\n\n

Support for Speculative Loading

\n\n\n\n

Building upon the success of the Speculative Loading plugin, which has over 40,000 active installations, WordPress 6.8 integrates speculative loading into core. This feature utilizes the Speculation Rules API to prefetch URLs dynamically based on user interaction, aiming to improve performance metrics like Largest Contentful Paint (LCP). The current proposal has a default configuration employing conservative prefetching to ensure safety and compatibility, but feedback is requested on this. Developers have access to filters for customization, allowing adjustments to the speculative loading behavior as needed (#62503). Details are laid out in the Speculative Loading in 6.8 Dev Note.

\n\n\n\n

Additional Performance improvements

\n\n\n\n

For the WordPress 6.8 release, several key performance improvements have been implemented in the block editor and collectively contribute to a more responsive and efficient editing experience.

\n\n\n\n
    \n
  • To address performance issues in the site editor when handling navigation blocks with multiple submenu. The isBlockVisibleInTheInserter selector was improved to prevent unnecessary computations, resulting in a more efficient block editor experience (#68898).
  • \n
\n\n\n\n

Accessibility improvements

\n\n\n\n

WordPress 6.8 includes 26 accessibility improvements. The dev note has all the details: Accessibility Improvements in WordPress 6.8

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 09:16:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:31;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: My Content Journey Leading to Content Sparks\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92890\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"https://dothewoo.io/blog/my-content-journey-leading-to-content-sparks/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:222:\"BobWP reflects on their journey with audio and content creation, from childhood fascination with radios to launching the podcast, Do the Woo. They now introduce a new show, Content Sparks, exploring diverse content topics.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 08:51:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:32;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:97:\"Do The Woo Community: Inside the World of Composable CMS: A Deep Dive with Tom Cranstoun from AEM\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92578\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"https://dothewoo.io/inside-the-world-of-composable-cms-a-deep-dive-with-tom-cranstoun-from-aem/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:379:\"This show is sponsored by… Avalara: providing cloud-based and scalable global tax compliance that is hassle-free, safe and secure plus topped off with enterprise-class security. In this episode of Scaling Enterprise, WP and OSS, join Brad Williams, Tom Willmot, and Karim Marucchi as they dive into the world of enterprise content management system. Special guest […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 17 Mar 2025 14:20:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:33;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:119:\"Do The Woo Community: Bridging Innovation and Community with Jessica Lyschik and Jakob Trost at the CloudFest Hackathon\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92934\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:118:\"https://dothewoo.io/bridging-innovation-and-community-with-jessica-lyschik-and-jakob-trost-at-the-cloudfest-hackathon/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:206:\"In this episode of Open Web Conversations, Adam Weeks discusses the CloudFest Hackathon with Greyd\'s Jessica Lyschik and Jakob Trost, exploring innovations, community contributions, and enhancing WordPress.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 17 Mar 2025 12:17:54 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:34;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"Do The Woo Community: Staying on Top of Things, A Packed RSS Reader\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92628\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"https://dothewoo.io/blog/staying-on-top-of-things-a-packed-rss-reader/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:157:\"I have a strong appreciation for RSS, highlighting its simplicity, effectiveness in managing content, and preference over cluttered inboxes and social media.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 17 Mar 2025 10:39:02 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:35;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"Do The Woo Community: CloudFest Hackathon. Behind CMS Freedom with Patricia BT and Dennis Snell\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92906\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:93:\"https://dothewoo.io/cloudfest-hackathon-behind-cms-freedom-with-patricia-bt-and-dennis-snell/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:229:\"Patricia and Dennis discuss their CMS Freedom project at the CloudFest Hackathon, aiming to simplify system transitions and preserve online content. They emphasize teamwork, learning, and the value of contributions beyond coding.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sun, 16 Mar 2025 13:20:32 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:36;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:38:\"Matt: Dalio & Benioff in Singapore\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140704\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:36:\"https://ma.tt/2025/03/dalio-benioff/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:594:\"

With the world changing so quickly, it’s hard to find alpha, but the best way is by following the brightest thinkers. This CNBC interview with Ray Dalio and Marc Benioff is good, but it’s way better if you go to the livestream about 25 minutes in and see the full discussion without the editing. You hear what these great thinkers actually think, rather than what an editor thought you’d enjoy. A little bit of friction gets you a lot more information.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 15 Mar 2025 20:46:22 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:37;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:93:\"Gutenberg Times: WordPress 6.8 Dev Notes, WP:25, new Blocks and sites — Weekend Edition 321\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=37936\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"https://gutenbergtimes.com/wordpress-6-8-dev-notes-weekend-edition-321/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:22013:\"

Hi,

\n\n\n\n

This week I will feel a lot of FOMO as I had a chance to attend CloudFest but had to bow out at the last minute, to give my busted knee a rest. My doctor is convinced that I had overdone the walking in Manila and WordCamp Asia. So going to an amusement part and another trade show, would not be wise. Unfortunately, there are no live-streams to participate remotely. ??‍♀️

\n\n\n\n

Meanwhile, I have been testing WordPress 6.8 and although there are no new ones, the updates to existing features are amazing and make content creation so much easier. Next week on Tuesday, in time of Beta 3 release, I’ll publish the Source of Truth, while Anne McCarthy is on sabbatical. The release team started to release Dev Notes already. You’ll find the list below.

\n\n\n\n

This week, I have many updates again in this edition. Enjoy!

\n\n\n\n

Yours, ?
Birgit

\n\n\n\n\n\n\n\n

Tom Willmot, CEO of Human Made posted the WP:25 Recap: The Future of WordPress with links to the recorded session. WP:25 was a virtual conference, hosted by Human Made with some awesome speakers and panels. I wanted to highlight two of them:

\n\n\n\n

Tammie Lister speaking on The power of FSE, in which she took the audience “through the incredible transformation Full Site Editing is bringing to WordPress. Tammie made it clear: FSE isn’t just another feature—it’s a fundamental shift in how teams build and manage content.”

\n\n\n\n

Mary Hubbard, executive director of WordPress, and Noel Tock chat about what’s next for the world’s favorite CMS in the coming year. WordPress in 2025. “AI is reshaping the way we interact with content, and WordPress is embracing AI in every way, any way that can enhance it, without replacing the human creativity aspect. So I think this right now, we’re at a pivotal point, not just for what it means for open source, but actually, what it means for the project itself.” – Mary Hubbard.

\n\n\n\n

You’ll find the other WP:25 sessions on this YouTube Playlist

\n\n\n\n

Developing Gutenberg and WordPress

\n\n\n\n

WordPress 6.8 release cycle is progressing as schedule to Beta 3 next week. WordPress 6.8 Beta 2 was released this week.

\n\n\n\n

And a reminder to Help Test WordPress 6.8 to figure out if all features work as supposed to and report bugs. The instructions provided Krupa Nanda are excellent to get a head start on many things updates in WordPress 6.8

\n\n\n\n

The first Dev Notes are now available on the Make Core blog:

\n\n\n\n\n\n\n\n
\n

?️ Latest episode: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia with special guest Jessica Lyschik.

\n\n\n\n\"Jessica\n
\n\n\n\n

Plugins, Themes, and Tools for #nocode site builders and owners

\n\n\n\n

In his latest post, How to disable and lock Gutenberg blocks, Bud Kraus takes you on a deep dive into content governance topic and how to provide guardrails to authors and enforce editorial guidelines for your site. It’s comprehensive coverage of the topic and includes explanation on how UI tools work as well as enforcing block locking with PHP and via theme.json.

\n\n\n\n
\n\n\n\n

ICYMI, After a longer beta period, GenerateBlocks 2.0 was released Mid-February with the aim of providing “fundamental changes to GenerateBlocks with a streamlined and robust system to make building fast and effective sites easier” Kathy Zant wrote in the announcement post Introducing GenerateBlocks 2.0: A New Era for High Performance Websites . The post also provides a migration path from version 1 to version 2 and outlines many changes for the plugin.

\n\n\n\n
\n\n\n\n

Diane and Yann Collet created a great resource at WP Gallery featuring beautiful websites designed with the Gutenberg Block Editor. It’s a fantastic place for inspiration.

\n\n\n\n\"\"\n\n\n\n

Twentig also a creation of Diane and Yann Collet, was also updated last month. The plugin is a toolkit designer working on Block Themes and has over 25,000 users. It provides Starter content, more Gutenberg Blocks and hundreds of patterns. You can browse the changelog of the latest version on the Twentig website.

\n\n\n\n
\n\n\n\n

Bhargav (Bunty) Bhandari posted on X (former twitter) about his work on a new block to add LinkedIn-like work experience information to a site. With it, you can showcase professional experience, with option to add a title, company name, description. The plugin is on its way to the WordPress plugin repository, and it might take a few weeks to be released. Meanwhile, you can download it from GitHub repo.

\n\n\n\n\"\"\n\n\n\n

Djordje Arsenovic created a Typewriter block, and it is now available in the WordPress plugin repository. Use the block to make text appear on the fronted as it was typed out on the old-fashioned typewriter machine.

\n\n\n\n

WordPress 6.8 will be released on April 15, 2025.

\n\n\n\n

Theme Development for Full Site Editing and Blocks

\n\n\n\n

Is your theme.json getting too big? Iulia Caza, developer at Dekode, built an npm package called Create Theme JSON that lets you split up the theme.json into multiple files in a theme-json folder and the build script assembles it into your theme’s theme.json file, when ready. “It definitely makes development much easier and faster.” Caza wrote on LinkedIn.

\n\n\n\n
\n\n\n\n

Anne Katzeff published a new tutorial on how to add categories to a Block Theme menu and guides you through accessing the menu editor and adding custom links for categories by copying their URLs from the WordPress dashboard. Katzeff also demos the steps in this YouTube video

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

Ryan Welcher worked on a new WordPress block theme for the Block Developer Cookbook during his live stream. You can watch how he creates a new skin for his theme (aka Style variation) and also add different block style variations. Welcher also prompts Cursor AI to make changes. The code is available on this GitHub repository.

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

Joshua Siagia announced the arrival of WindPress – a platform-agnostic Tailwind CSS integration plugin for WordPress that allows you to use the full power of Tailwind CSS within the WordPress ecosystem, streamlining workflows for developers. It supports Tailwind CSS v3 and v4, offers features like autocompletion, HTML-to-native conversion, and class sorting, and ensures lightweight performance with optimized CSS caching. Seamlessly compatible with popular builders like Gutenberg and Bricks, it simplifies customization while maintaining speed. WindPress is ideal for developers seeking efficient Tailwind CSS integration in WordPress projects. It is now available in the WordPress plugin repository: WindPress

\n\n\n\n

 “Keeping up with Gutenberg – Index 2025” 
A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. The previous years are also available: 2020 | 2021 | 2022 | 2023 | 2024

\n\n\n\n

Building Blocks and Tools for the Block editor.

\n\n\n\n

Save the date! Nick Diego and Ryan Welcher will demo on March 19th, 2025 How to build incredible WordPress Blocks with Cursor AI on YouTube Live hosted by Jamie Marsland. They will explore the power of AI in crafting exceptional WordPress blocks. In this session, you’ll discover practical techniques, pro tips, and AI-driven tools to enhance your block-building skills and streamline workflows. Whether you’re a developer or looking to expand your WordPress expertise, this is your chance to unlock new possibilities for your WordPress site!

\n\n\n\n\"\"\n\n\n\n

Bart Kalisz, JavaScript Engineer at WooCommerce announced in his post WooCommerce Blocks client files relocated to complete monorepo merge. As of March 5, 2025, WooCommerce Blocks client files have moved from plugins/woocommerce-blocks to plugins/woocommerce/client/blocks, completing the monorepo merge initiated in December 2023. This change enhances codebase consistency and repository organization. Developers with existing pull requests need to rebase their branches. End users will not experience any functional differences. The build process remains the same, ensuring a smooth transition.

\n\n\n\n
\n\n\n\n

Do you want to jumpstart adding AI to your site? Felix Arntz has you covered with his plugin AI Services from the WordPress repository. The plugin provides a “central infrastructure that allows other plugins to make use of AI capabilities. It exposes APIs that can be used in various contexts, whether you need to use AI capabilities in server-side or client-side code.” The latest update comes with AI image generation, starting with OpenAI’s DALL-E and Google’s recently published Imagen models! The plugin page also lists a few code examples on how to integrate it using PHP or JavaScript.

\n\n\n\n
\n\n\n\n

Developer Advocates, Brian Coords and Nick Diego were experts on this week’s InstaWP webinar: Building WordPress Plugins with AI with founder Vikas Singhal to “reveal game-changing insights for leveraging AI to build powerful WordPress plugins.” Both developers demo’d their workflow programming with Cursor AI.

\n\n\n
\n
\n
\n
\n
\n\n\n
\n\n\n\n

This post Introducing Preview Sites: Pushing the Limits of Collaboration with Studio, Antonio Sejas catches us up on the latest features of Studio, WordPress’s local development tool. “Demo Sites” are now “Preview Sites” with increased storage (2 GB) and more sites allowed (10). Personalized URLs are introduced, and sites remain active for seven days after the last update. These changes enhance collaboration and testing for Studio users.

\n\n\n\n
\n\n\n\n

Geoff Graham built Baseline Status in a WordPress Block and published a blog post about his approach, from scaffolding, settings, supports, rendering front and back end and styling. The plugin is available on the WordPress repository
Baseline Status

\n\n\n\n\"\"\n\n\n\n

Need a plugin .zip from Gutenberg’s master branch?
Gutenberg Times provides daily build for testing and review.

\n\n\n\n

Now also available via WordPress Playground. There is no need for a test site locally or on a server. Have you been using it? Email me with your experience

\n\n\n\n

\"GitHub

\n\n\n\n

Questions? Suggestions? Ideas?
Don’t hesitate to send them via email or
send me a message on WordPress Slack or Twitter @bph.

\n\n\n\n
\n\n\n\n

For questions to be answered on the Gutenberg Changelog,
send them to changelog@gutenbergtimes.com

\n\n\n\n
\n\n\n\n

Featured Image: Wasserburg am Inn – Photo by Birgit Pauli-Haack

\n\n\n\n
\n\n\n\n

Don’t want to miss the next Weekend Edition?

\n\n\n

We hate spam, too, and won’t give your email address to anyone
except Mailchimp to send out our Weekend Edition

Thanks for subscribing.
\n\n\n
\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 15 Mar 2025 17:15:29 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:38;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: Do the Woo Friday Shares, March 14, 2025 v10\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92817\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"https://dothewoo.io/blog/do-the-woo-friday-shares-march-14-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:45:\"This weeks curated shares from the community.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 14 Mar 2025 10:28:37 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:39;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:55:\"Gravatar: SEO-Friendly Author Bio Pages: Essential Tips\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=2849\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://blog.gravatar.com/2025/03/13/author-seo/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:20769:\"

If you’re an author, chances are you’ve come across terms like E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness). These concepts are critical for improving your visibility in search engine results, but putting them into action can feel like a daunting puzzle. Whether you’re a book author, a blogger, or someone with a diverse portfolio of written work, creating a strong web presence is essential to establishing your authority.

\n\n\n\n

Author SEO goes beyond just writing great content – it involves technical elements like schema markup and consistent author profiles to signal credibility to search engines. But how do you bring all these moving parts together to create an effective strategy?

\n\n\n\n

In this guide, we’ll explore actionable steps to optimize your author bio pages and build a consistent online presence. From Gravatar integration to schema markup, these techniques will help you strengthen your E-E-A-T signals and achieve better search rankings. 

\n\n\n\n

Building author E-E-A-T through optimized bio pages

\n\n\n\n

Establishing E-E-A-T is essential for authors striving to improve their visibility online. According to Google’s Search Quality Rater Guidelines, high E-E-A-T pages are deemed more trustworthy, which can directly impact rankings.

\n\n\n\n

Your author bio page is a prime opportunity to strengthen your position. Here’s how to optimize each component:

\n\n\n\n
    \n
  • Experience: Share milestones like years of writing, notable projects, or awards. This helps showcase your firsthand knowledge, making your expertise relatable and credible.
  • \n\n\n\n
  • Expertise: Highlight qualifications such as degrees, certifications, or industry recognition. These reinforce your authority on your subject matter.
  • \n\n\n\n
  • Authoritativeness: Link to your published work on reputable platforms, which positions you as a trusted source. Tools like Gravatar ensure your online presence remains consistent.
  • \n\n\n\n
  • Trustworthiness: Build trust by including testimonials or reviews. A professional headshot and clear contact details further enhance reliability.
  • \n
\n\n\n\n

Keep in mind that an optimized bio page is more than just an introduction to your readers – it signals your credibility and authority to search engines and readers alike. 

\n\n\n\n

Now that you have a strong bio page in place, the next step is integrating tools like Gravatar to maintain consistency across all platforms. 

\n\n\n\n

Creating consistent author profiles with Gravatar

\n\n\n\n\"Gravatar\n\n\n\n

Being consistent across all your digital profiles can help you build a solid and trustworthy online presence, and Gravatar simplifies this process. This platform links your profile picture and key details – like your name, bio, and website – to your email address, ensuring that your information is automatically updated across supported websites.

\n\n\n\n\"Example\n\n\n\n

For authors, Gravatar eliminates the hassle of managing profiles manually on multiple platforms. Whether it’s a WordPress blog, an online portfolio, or a comment section, Gravatar ensures your professional identity remains uniform, building trust and reinforcing your E-E-A-T.

\n\n\n\n

Setting up Gravatar is straightforward: Create an account, upload a professional photo, and fill in your details. 

\n\n\n\n\"Example\n\n\n\n

From there, Gravatar takes care of the rest, providing flawless integration and a polished, consistent online presence. This not only saves time but also enhances your credibility, making it an essential tool for any author looking to strengthen and monitor their digital footprint.

\n\n\n\n\"\"\n\n\n\n

WordPress integration and cross-platform syncing

\n\n\n\n

According to W3Techs, “WordPress is used by 62.0% of all the websites whose content management system we know. This is 43.6% of all websites.” So, it’s no wonder that so many authors, writers, and contributors go with WordPress as their platform of choice. 

\n\n\n\n

Gravatar integrates perfectly with WordPress, automatically displaying your avatar across the WordPress ecosystem wherever your email address is linked, such as in blog posts, comments, or author pages. This standard integration helps maintain a consistent online identity with minimal effort.

\n\n\n\n

However, for authors looking to go beyond the basics, the Gravatar Enhanced plugin offers additional features. Unlike the default Gravatar setup, which only pulls the profile picture, this plugin provides greater customization options, allowing you to display more detailed author profiles, including links to your social media and published works. 

\n\n\n\n\"Example\n\n\n\n

You can also control how your Gravatar appears on various sections of your WordPress site, such as post bylines and author widgets.

\n\n\n\n

On top of that, with Gravatar you can create multiple profiles each linked to a different email address, and you can pull any of these easily with the Gravatar Enhanced plugin. This is invaluable if you write across different genres or target audiences (more on that in a second). 

\n\n\n\n

If you’re tech-savvy or have the budget to work with a developer, and have many people contributing to your website, you can also take advantage of the Gravatar REST API. This gives you more flexibility and granular control over exactly what data gets imported and displayed on the website. It also makes it much easier for guest authors to contribute – their Gravatar profile information will be automatically imported. 

\n\n\n\n

This applies to every single platform that has integrated Gravatar, including GitHub, Slack, OpenAI, Figma, Zapier, and many more. 

\n\n\n\n\"Logos\n\n\n\n

Managing multiple author identities

\n\n\n\n

For authors who write across different genres or target diverse audiences, managing multiple online identities can be a challenge. Gravatar simplifies this with its ability to associate multiple email addresses with unique profiles. Each profile can feature a distinct avatar, bio, and contact details, allowing you to tailor your online presence to specific audiences or platforms.

\n\n\n\n

To use a different profile with Gravatar Enhanced , you just need to put the email address corresponding to that profile. 

\n\n\n\n\"Importing\n\n\n\n

For instance, if you write technical guides under one pen name and fiction under another, Gravatar ensures your profiles stay separate and relevant. By linking each email to a unique profile, you maintain consistency and professionalism for both identities without any crossover confusion.

\n\n\n\n

This flexibility helps you maintain your E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) across different niches, ensuring that each identity aligns with its intended audience while reinforcing your credibility.

\n\n\n\n

Technical SEO essentials for author pages

\n\n\n\n

Optimizing the technical side of your author pages can help your site rank well in search engine results and provide an easy and memorable user experience. Here are some key areas to focus on:

\n\n\n\n

Page speed and mobile responsiveness

\n\n\n\n

Fast-loading, mobile-friendly pages are a must. Use tools like Google PageSpeed Insights to identify performance bottlenecks and ensure your site is accessible on all devices. Reasons for a slow website include: 

\n\n\n\n
    \n
  • Large image files – High-resolution images that aren’t optimized can significantly increase load times.
  • \n\n\n\n
  • Too many HTTP requests – Each image, script, or CSS file requires a separate HTTP request, slowing down the site.
  • \n\n\n\n
  • Unoptimized JavaScript and CSS – Heavy or poorly written scripts can delay rendering, especially if they aren’t minified or compressed.
  • \n\n\n\n
  • Lack of browser caching – Without caching, users have to download site elements repeatedly, even if they’ve visited before.
  • \n\n\n\n
  • Slow server response time – Poor hosting or high traffic can lead to delays in how quickly the server processes requests.
  • \n\n\n\n
  • Bloated plugins – Excessive or poorly coded plugins can slow down the backend and frontend of the site.
  • \n\n\n\n
  • Unoptimized database – A database cluttered with unnecessary data, like old revisions or spam comments, can slow query times.
  • \n\n\n\n
  • High traffic without proper resources – A sudden spike in visitors can overwhelm your hosting plan, leading to slowdowns.
  • \n
\n\n\n\n

Whatever the issue is, make sure you fix it on time since most users access the web via mobile, a responsive, clutter-free design helps with usability and improves your search rankings. 

\n\n\n\n

Schema markup for author pages

\n\n\n\n

Implementing schema markup helps search engines understand your content better. Use the “Author” schema to display rich snippets, such as your name, bio, and image, directly in search results. 

\n\n\n\n\"Example\n\n\n\n

Canonical URLs and structured navigation

\n\n\n\n

Ensure each author page has a unique, canonical URL to prevent duplicate content issues. Structured navigation, including breadcrumbs, helps search engines and users understand your site’s hierarchy, improving crawlability and the user experience. They are also essential for screen readers and users who only use keyboards to navigate. 

\n\n\n\n

Secure and accessible design

\n\n\n\n

A secure site (HTTPS) is critical for building trust with both users and search engines. Additionally, ensure your content is accessible to all users, including those with disabilities, by adhering to Web Content Accessibility Guidelines (WCAG). Here are some of the main areas you need to consider: 

\n\n\n\n
    \n
  • If you have a shop for your books, events, or services, make sure that users can successfully complete a purchase with any assistive technology, including screen readers and keyboard navigation. 
  • \n\n\n\n
  • Create functional and descriptive alt text for your images and files. Users should be able to understand the main idea behind each image and if it’s only decorative, just leave the alt text tag empty. 
  • \n\n\n\n
  • Make sure your link texts make sense – “click here to book a spot for my book signing” is much better than just “click here.”
  • \n\n\n\n
  • Use accessible fonts and ensure that users can scale text up to 200% without the loss of functionality and content. 
  • \n
\n\n\n\n

Meta descriptions and optimized headings

\n\n\n\n

Every author page should have a compelling meta description and properly structured headings (H1, H2, etc.). These elements improve click-through rates and help search engines identify the page’s main focus. They are also essential for accessibility: The meta descriptions and titles are what the assistive technologies will read out loud to people who use them and want to search online. 

\n\n\n\n

Implementing author schema markup

\n\n\n\n

Schema markup helps search engines understand the structure and content of your author pages, boosting visibility in search results. By implementing author-specific schema, you can enhance your E-E-A-T signals, making your pages more appealing to both users and search engines.

\n\n\n\n\"Example\n\n\n\n

For blog authors, use the Article schema to mark up your blog posts, including details like the headline, author name, and publication date. For book authors, the Book schema is ideal. It highlights properties like the book title, ISBN, and author information, making your work easier to find​.

\n\n\n\n\"Example\n\n\n\n

You can then implement the schema on your website with the Google’s Structured Data Markup Helper or WordPress plugins like Rank Math and Yoast. You can tag relevant sections of your page, such as your name, bio, and links to your published works, and generate JSON-LD code for seamless integration​. 

\n\n\n\n

To get the most out of schema markup, make sure you: 

\n\n\n\n
    \n
  • Include key details: Author name, profile image, and links to verified profiles.
  • \n\n\n\n
  • Stay consistent across platforms by syncing with Gravatar, which adds a professional touch to your author bio.
  • \n\n\n\n
  • Validate your schema with Google’s Rich Results Test to check for errors and ensure all required fields are present.
  • \n
\n\n\n\n

Measuring and improving author page performance

\n\n\n\n

Optimizing your author pages doesn’t stop at implementation – you need to measure their performance and refine them over time. Here’s how:

\n\n\n\n

Key metrics to track

\n\n\n\n
    \n
  • Organic traffic – Use tools like Google Analytics to monitor how many users find your author pages through search.
  • \n\n\n\n
  • Bounce rate – A high bounce rate could indicate poor user experience or irrelevant content.
  • \n\n\n\n
  • Time on page – Longer time spent suggests that visitors find your content engaging and valuable.
  • \n\n\n\n
  • Search rankings – Track keyword rankings for your name, book titles, or blog posts using tools like Google Search Console, Ahrefs, or SEMrush.
  • \n
\n\n\n\n

Improving author page performance

\n\n\n\n
    \n
  • Enhance content – Ensure your bio includes relevant keywords, links to authoritative publications, and an engaging summary of your work.
  • \n\n\n\n
  • Optimize for mobile – Many visitors will access your page from mobile devices, so ensure your layout is responsive and user-friendly.
  • \n\n\n\n
  • Leverage internal linking – Link to related blog posts, books, or interviews to keep users engaged and improve site navigation.
  • \n\n\n\n
  • Update regularly – Add new publications, awards, or noteworthy achievements to keep your page fresh and relevant.
  • \n
\n\n\n\n

Use heatmaps and session recordings

\n\n\n\n

Heatmaps (e.g., from tools like Hotjar) show which parts of your page users interact with most, helping you refine layout and content. 

\n\n\n\n\"Example\n\n\n\n

Session recordings provide deeper insights into user behavior, highlighting any obstacles they encounter.

\n\n\n\n

Enhance your author authority now

\n\n\n\n

As AI-generated content continues to flood the web, a verified and consistent author profile is the best strategy to help you stand out and maintain reader trust. A strong, recognizable presence builds credibility and helps search engines and audiences alike see you as a reliable source.

\n\n\n\n

With the tips outlined in this article, you’ll lay a solid foundation for optimizing your author website. Start with a polished bio, leverage schema markup for better search visibility, and use Gravatar to maintain a consistent online identity. With its “Update Once, Sync Everywhere” functionality, Gravatar ensures your avatar and profile details are synchronized across platforms, saving you time while keeping your branding professional and cohesive.

\n\n\n\n

The key to successful author SEO lies in the trinity of a professional bio and website, technical SEO, and an up-to-date Gravatar profile. Ready to boost your authority? Learn more about Gravatar today!

\n\n\n\n\"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 13 Mar 2025 18:49:01 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:40;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:62:\"Do The Woo Community: Meet Some of Our Hosts at CloudFest 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92709\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"https://dothewoo.io/blog/meet-some-of-our-hosts-at-cloudfest-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:100:\"Make sure and say hi to some of our hosts if you are attending the CloudFest event or the Hackathon.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 13 Mar 2025 12:03:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:41;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"Do The Woo Community: A New Show, Content Sparks, with Regular Host BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92609\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:46:\"https://dothewoo.io/a-new-show-content-sparks/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:172:\"BobWP introduces \"Content Sparks,\" a show focusing on content creation insights, featuring tips from his 18 years in the WordPress space combined with my hosts experiences.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 13 Mar 2025 09:27:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:42;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"WPTavern: #160 – Rahul Bansal on Success in Enterprise WordPress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=188219\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:80:\"https://wptavern.com/podcast/160-rahul-bansal-on-success-in-enterprise-wordpress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:57342:\"Transcript
\n

[00:00:00] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.

\n\n\n\n

Jukebox is a podcast which is dedicated to all things WordPress. The people, the events, the plugins, the blocks, the themes, and in this case, creating a successful business in enterprise WordPress, and working to foster the WordPress community.

\n\n\n\n

If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice. Or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

\n\n\n\n

If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

\n\n\n\n

So on the podcast today, we have Rahul Bansal.

\n\n\n\n

Rahul is the founder and CEO of rtCamp, a large agency that specializes in enterprise grade WordPress projects. He began his journey quite differently, starting as an individual blogger back in 2006, discovering WordPress in 2007, and gradually transitioning from being a publisher to a freelance developer, before founding rtCamp in 2009.

\n\n\n\n

Today, rtCamp is an enterprise grade WordPress consultancy agency operating globally and trusted by clients such as Google, Meta, Automattic, News UK and Al Jazeera.

\n\n\n\n

Rahul sheds his light on working with enterprise clients in the WordPress space. Many of us are familiar with WordPress in the context of small businesses and blogging, but the enterprise space demands additional layers of security and scalability. Rahul explains the factors that set enterprise projects apart, and why meticulous code reviews, and security audits are essential when working at this level.

\n\n\n\n

He talks about the opportunities in the enterprise space, recounting how rtCamp initially stumbled into enterprise level projects, not even realizing their potential until a client’s high expectations led to a decision to market themselves as an enterprise agency.

\n\n\n\n

We also discussed the role of WordPress in enterprise environments, from why Gutenberg has become a credible selling point due to its powerful editing capabilities, to how the platform’s flexibility supports varied enterprise needs.

\n\n\n\n

Rahul also gets into the importance of positioning. How historical context offers advantages, and the expanding market that makes WordPress a compelling choice for large clients today.

\n\n\n\n

Towards the end, we explore rtCamp’s innovative intern program, aimed at growing the WordPress talent pool, and the way they’re contributing back to the WordPress project, a win-win for the business and the broader community.

\n\n\n\n

If you’ve ever considered what it takes to work with WordPress at the enterprise level, this episode is for you.

\n\n\n\n

If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you’ll find all the other episodes as well.

\n\n\n\n

And so without further delay, I bring you, Rahul Bansal.

\n\n\n\n

I am joined on the podcast today by Rahul Bansal. Hello.

\n\n\n\n

[00:03:47] Rahul Bansal: Hello.

\n\n\n\n

[00:03:48] Nathan Wrigley: It is very nice to have you on the podcast today. We’re going to talk about the enterprise, which I confess is something that I only really know about because people talk about it. I’ve never worked in the enterprise, I’ve never worked with enterprise clients. So Rahul is here. He’s very much in the enterprise as you’re about to find out, and he’s going to educate me all about that.

\n\n\n\n

So Rahul, I wonder if you wouldn’t mind just for a minute or two minutes, just tell us who you are, what you do in the WordPress space, where you work, your position there, and so on. A little potted bio.

\n\n\n\n

[00:04:18] Rahul Bansal: Currently I am founder and CEO of rtCamp, which is a large agency specifically dealing in enterprise grade WordPress projects. I started quite differently, like I started as a individual blogger, back in 2006.

\n\n\n\n

In 2007 I found WordPress. I started developing with WordPress in 2007. And slowly from being a publisher, I become freelance developer, and then around 2009 rtCamp started. So I’ve been with rtCamp for the last 16 years.

\n\n\n\n

[00:04:46] Nathan Wrigley: That’s been quite a journey. I see the name rtCamp everywhere. And we should just say, so it’s spelt, lowercase r, lowercase t, and then Camp with a capitol C, a m p. Go and Google that, and have a look at what the team over there doing.

\n\n\n\n

How big has the team grown to? How many employees, staff do you have over there now?

\n\n\n\n

[00:05:05] Rahul Bansal: So currently we are 230 people, all spread over.

\n\n\n\n

[00:05:08] Nathan Wrigley: That is truly an enormous agency. So bravo for growing that. That’s really incredible.

\n\n\n\n

The first question that I want to ask though is, when does normal WordPress become enterprise WordPress? At what point do we cross the Rubicon where a site is, I don’t know, big enough, or your agency is working with a different type of client? Can you define what you think that means? And I’m sure that if you’re on the cusp of being an enterprise agency, this is something that, you know, may be slightly confusing.

\n\n\n\n

[00:05:37] Rahul Bansal: Firstly, there is no formal definition to that. Many agencies believe they’re serving enterprise space when they’re not. Some people are actually serving enterprise space, but they don’t realise it.

\n\n\n\n

So in my opinion, it’s where the requirement changes a lot. Like, for example, if we’re building a small WordPress site, which I don’t consider as an enterprise site, we will be tempted to pick first theme and plugin that matches our need, like if it works, if it gets a job done, that’s it.

\n\n\n\n

But then in enterprise space, there is a lot of security and scalability concerns. These two concerns are very big. Something might be working all right, but then when you look at the code, you realise that there’s going to be a security issues, or there could be scalability issues. Many times, indy developer person, they design small WordPress plugins. They don’t have data or big enough site to test it on a large installation. So those things are not tested on really high traffic website. So enterprise can mean really high traffic website, with a lot of scalability requirement.

\n\n\n\n

On the other hand, the traffic can be less, but the security requirement can be enormous. Consider the White House website. It was on the WordPress with the previous administration, and it’s again, on the WordPress with the new administration. So in both cases, I don’t think White House, like a website we can classify as a very high traffic website, but it is a very sensitive website.

\n\n\n\n

It would be a lot embarrassing if that site gets hacked. So every piece of code that goes into White House website, which agency is working on it, will be thoroughly checked for security attack, for audit, for all the compliances. And this additional efforts is what makes it enterprisey, in my opinion.

\n\n\n\n

[00:07:12] Nathan Wrigley: Okay, so it’s not necessarily the size of the client, or the fame, for want of a better word, of the client. It’s more about the kind of work that you’re doing in the background. So custom code largely, because you simply at that scale cannot have something off the shelf.

\n\n\n\n

[00:07:28] Rahul Bansal: So we can have things off the shelf. The thing is, you cannot just take it and use it. You still have to own it in that sense. Like, for our clients also, we go and use many things from WordPress plugin directory. But then when we put it on this website, it is kind of like signed by us. So it’s like we have to verify, even if it is not coded by us, we have to verify line by line that it is following best coding practices, database queries will scale with high traffic, if it is a high traffic website.

\n\n\n\n

There are many checks and balances in place. So no matter if you are doing in-house, like as a custom coding, or we are buying a premium plugin or using a free plugin, everything has to go through certain checks. And those checks are very expensive to do, because that’s a human labor. You have to literally go through things line by line. And in many cases, you have to put extra efforts to make it scalable with their existing system.

\n\n\n\n

Because usually a large enterprise won’t use just a website in silos. It’ll be part of multiple system like authentication system, where if an employee joins a large organisation based on some rule, they might get automatic access to their website. Likewise, if they leave organisation, their access should be automatically revoked, or they have some CRM integrations, data integrations, some kind of asset, like digital asset management solution integration.

\n\n\n\n

So all these have to be connected, and this all need to work together. So a lot of effort goes in doing these extra things, which are either don’t exist for small websites. So, enterprise website that I’m talking about, this can be really unknown website. We have a client which is basically a government public origin fund. Common people don’t even know about them, but they basically want pretty much all the big companies we know. Like, they have stake in all the big companies. Their asset is something like $400 billion in under management.

\n\n\n\n

Most people don’t even know that company. But then it’s very sensitive because that money they’re managing is public money, it’s not like VC fund. It’s actually state reserve. Now, seriousness, we need to demonstrate in the security is very high, because if something gets hacked or somebody uploads the wrong investor report or something like portfolio report, it can have a lot of consequences.

\n\n\n\n

[00:09:32] Nathan Wrigley: It kind of sounds to me as if the assurance that you are giving an enterprise client is basically that what we’ve built is, as far as we can tell, it’s bulletproof. We’ve gone through it line by line. We may have custom coded bits and pieces, but certainly the bits that we didn’t custom code, we are totally guaranteeing that this is going to be robust.

\n\n\n\n

And also it’s sounds a bit like, if a client at an enterprise level approaches you and they say, can you do this? Your answer is yes. Basically, yes, we can do it. We can do it with WordPress. There may be a cost, but we can do it. There’s almost no scenario where a client would come to you and say, can you do this, forget the money, can you do it? The answer’s never no. The answer’s always going to be yeah, yeah, we’ll figure it out.

\n\n\n\n

[00:10:15] Rahul Bansal: So that’s the thing, like if the budget has no limit then there is no limit on technology. Most often, like even where enterprise agency, WordPress has this large spectrum. So we end up with a lot of low quality leads, where somebody knocks on an enterprise agencies’ door and they really have budget constraint. They really want something really good out of the box, but they don’t want to pay for it. Or they don’t want to pay as high as it’ll require to deliver that kind of solution.

\n\n\n\n

For some enterprises, budget is no limit, but then we try to be mindful of resources. For example, many enterprise agencies, including us, if you go to their GitHub account, they would have list of published themes and plugins. Most commonly plugins, themes rarely are used off the shelf. So we will build these plugins to ensure that the cost of rebuild project is less, like if we have to deliver another project, we try our best that we reuse as much as possible.

\n\n\n\n

And that’s the open source spirit, that the entire WordPress committee follows. We use many times solutions that are already put in open source by our competing agencies. They also use our solution. So that’s where the enterprise solution with WordPress is also affordable. The right enterprise client that we target, usually have higher budget than we would need to develop because we are competing against a lot of experienced managers, which are very expensive, super expensive.

\n\n\n\n

And when I is super expensive, I’m just talking about licensing fees. Before you hire an agency to write custom code for you, you have already paid a lot of money just for the right to use the software. With WordPress, that right to use costs zero. And then all the nice agencies in WordPress space, big, small, no matter what size they are, try their best to reuse existing solutions, to bring the cost down.

\n\n\n\n

So enterprise WordPress, relatively, cost less than other enterprise CMS, but then it certainly costs a lot than building a small website. Like, you cannot go to an enterprise agency and expect in $500 your site to be built perfectly, because the requirement gathering phase, like talking to all stakeholders and understanding all the solutions they use inhouse can take like many days.

\n\n\n\n

[00:12:15] Nathan Wrigley: So you may have answered this question just now with what you’ve just said. I feel that you’ve definitely gone into this territory, but it sounds like there’s a lot of line by line checking of everything. So for example, if you use a plugin off the repo, you’re going to go through that one line at a time. And you said this can be an expensive process. You’ve also said that obviously there’s benefits of using WordPress because you can take things that other people have used and so on.

\n\n\n\n

But I guess at some point there’s got to be some sort of tipping point where you think, okay, WordPress is going to be good for this project, but it might not be good for that project. Is it always WordPress for you? Do you always lean into WordPress, or does there come a point where you say, do you know what, with the custom things that this particular client wants and what have you, lets just build the thing ourselves, let’s not rely on the CMS, or do you always lean in on WordPress?

\n\n\n\n

[00:13:01] Rahul Bansal: Maybe it’s the nature of our positioning that we rarely get things that we cannot do in WordPress, so we always do things in WordPress. The boundary varies with how much off the shelf WordPress we’ll use, and how much custom we’ll use. In one of the project, I remember there was a specific data crunching process that we needed to build. And we felt that it’ll be better if it is built as a microservice and run independently.

\n\n\n\n

So we built that in Python, but then it was talking to WordPress REST API. So that freedom we have from client, for example like that microservice, that microservice was never visible to any of the client’s editorial team. Everything they were doing, their only interface was WP admin. There was no second login or no second interface to them. It was just something was running on some server and magically data was going inside and outside WordPress.

\n\n\n\n

And that’s the power of WordPress. It has so many APIs to communicate with outside world, like rest API, GraphQL, and even from the traditional XML-RPC. That WordPress can coexist with other systems very nicely. And that’s where we never face that, can we do this on WordPress or not? It’s like, can we do everything on WordPress, or do we need to put some minor things outside WordPress?

\n\n\n\n

And those decisions are not the engineering limitation. Like, that microservice, we could have put it in WordPress also, but we felt that its architecture was more suited for independent microservice. That was the right call, it turned out to be right call. Much later that microservice grew independently.

\n\n\n\n

[00:14:26] Nathan Wrigley: If we rewind the clock to the beginning when you were just beginning with WordPress and beginning the agency that ended up being rtCamp with your 230 odd employees, did you intend for what’s happened to happen? Did you always know that you wanted to grow something to the point where it became, air quotes, enterprise with many, many employees, or did it just evolve over time unexpectedly?

\n\n\n\n

[00:14:49] Rahul Bansal: Yeah, it all happened unexpectedly. Like, I started as a professional blogger. I used to make money from advertising, affiliate marketing. So it’s like, I wasn’t doing anything remotely related to agencies.

\n\n\n\n

So one thing led to another and then I started freelancing. Then even after freelancing, when I started rtCamp as an agency, because I was coming from bloggersphere, most of my initial client were bloggers, like independent bloggers. Somebody wanted a theme, somebody wanted a plugin, somebody wanted a sidebar, which sidebar just used to be a lot more popular in those early days of blogging. Like, people used to have MySpace, like experience on the web, like lots of widgets, email submission form, this pop up.

\n\n\n\n

So in fact, the first enterprise client that walked into our door, that’s why I said like many agencies don’t even realise when they mingle with enterprise space. I kind of felt very irritated because they asked so many questions. They got our reference from LinkedIn. We had zero, we were not even using enterprise word anywhere in our branding, marketing, anywhere at all. But back in 2010, also, we made a good name for ourselves.

\n\n\n\n

So anybody who shouted, hey, any WordPress references, our name used to pop up on social media. So we got that. And they sent us a very large procurement checklist, which we never heard of. All of our projects were like email exchange, two, three emails, money via PayPal, and emails used to be contact. Like, whatever you committed on email is the contract.

\n\n\n\n

And suddenly there comes like this long PDF, Excel sheets with check boxes. Do you have a data storage policy? This policy, that policy. If we end up filling this, we’re not going make any profit with this project. So then one of my teammates said, let’s price in that. Let’s price in and see if they can afford it. So we literally added another zero to our pricing, literally like 5 times, 10 times. And we said like, hey, this is our minimum, do you want to go ahead?

\n\n\n\n

I said, sure, like this is peanuts. And they were worried like, do you understand the project? You are quoting very less, your starting point is very less than our internal budget. So they came to our office, they were based in India. Luckily they were in the same city. They came to our office to audit us physically. They put like remarks like, you don’t have a fingerprint scanner in your biometric sensors in your office entry. There is no employee log.

\n\n\n\n

But we are not storing any of your data. So this office is not the building where your data will reside. Your data will reside on AWS, or all those cloud servers. And then they got convinced. WordPress was very small then, and we were the only known agencies, which was fully committed to WordPress at that point. So they didn’t have choice two, three, so they kind of crossed the fingers and gave us that project.

\n\n\n\n

It took six months to close. I was very pessimistic. It’s only after two, three years that we realised that they’d become our largest client by a huge margin. All my blogger friend put one side, and this single client, one side. And that revenue was growing very nicely, year on year. Renewals, they had this retainers, every year they were renewing without asking questions.

\n\n\n\n

So I realise that it’s very hard to win these big clients, but once you are in it becomes very smooth journey, henceforth, like after that point. And then I think 2014 around, after two, three years data, when I saw that this client was consistently, for the last three years in a row, our biggest client. Zero sales effort, zero account issues, no negotiation on pricing, and everything was smooth.

\n\n\n\n

So then I thought like we should go in to some enterprise space, and luckily around that time I had a call with Chris Lema. Chris Lema used to be available for consulting calls on Clarity. I’m not sure if that service is still around. And I still remember it was exactly 33 minutes that I talked to Chris. He repositioned rtCamp. In 33 minutes he gave me some amazing breakthrough idea.

\n\n\n\n

And after that call, first time we told ourselves, we are enterprise WordPress agency from today. Until 2014 we were not identifying ourself or branding ourself as an enterprise workplace agency. That moment was the first time when we put in bold letters on our homepage, in SEO Meta, everywhere we added, we are enterprise, enterprise, enterprise WordPress.

\n\n\n\n

[00:18:35] Nathan Wrigley: Can you remember that moment? So if you cast your mind back, when you added the zero and sent it, and there was obviously some suspicion in your mind that nothing’s going to come of this or what have you. Can you remember the feeling? So it’s an odd question because I’m asking you about your feelings, but can you remember the feeling when they came back and said, oh yeah, this is not as expensive as we’d imagined? That really must have opened up an entirely new world for you.

\n\n\n\n

[00:19:00] Rahul Bansal: Yeah. So firstly, it was very unexpected because we were selling like WordPress projects for $100, $50, $500. The biggest was $1,000. We still remember we built a complete BuddyPress plugin for $900. And we were like so happy when that client sent us $100 tip. He rounded up to $1,000 and we were partying, like with that extra $100, we throw a party to our team.

\n\n\n\n

And suddenly this client comes and they said, $5,000 is okay? Are you kidding me? Because they sent so much data I didn’t want to fill in, so I just thought, let’s just give them a number and they will walk away. We’ll not appear as a company who didn’t want to fulfill their data request. I thought, I will give them a reason to walk away, but then it didn’t walk out.

\n\n\n\n

Initially I was still skeptical because they really demand too much data. Just imagine, we were like some 20 people agency at that time, and we spent three to six months in back and forth sales call. We didn’t have typical sales team at that point. Writing those long answers. We were not even understanding questions. The problem was not that we didn’t want to give data or we didn’t take security seriously, there were things that we never heard of.

\n\n\n\n

It was all like foreign language to us. What are they asking? Why do they want to do that? I was not expecting lifetime revenue, that concept was not in our books then. So it was project, money in, money out, end of email, site goes live. Then the recurring revenues hosting companies. We were not into selling maintenance contract.

\n\n\n\n

So it was a project kind of thinking like big, big economy mindset. So even with 5,000, I thought like, the amount of effort they’re putting us, we won’t be left with any decent margin after this project. And that was a true case. For first year there was not much margin left because they had put us through a lot of work to fulfill that project. And then we realised we underquoted after that also, because when the data, we had to talk to their Microsoft vendor. They were using Microsoft SharePoint. There were many rough edges that we had no idea could happen to us.

\n\n\n\n

In year one, they were the highest revenue, but project was in loss. It’s only a year, two, three, it was very good profit. And then we have the strategy that we call now land and expand. Land big accounts, no matter whatever price point you wanted to do, go aggressive, and then once you are in, then you spread within the organisation.

\n\n\n\n

[00:21:08] Nathan Wrigley: Oh that’s an interesting insight. So land and expand. Land the client, the big fish, if you like, with the knowledge that if you maintain the relationship over many years, the profit can build up. Not necessarily year one, but maybe a bit in year two, and year three, and year four, it’s beginning to mature.

\n\n\n\n

And, it sounds like such an interesting story. And, again, I’m going to rewind back to before 2014, so before you added enterprise to your website and have you. Do you think if you had begun your journey today, that you would have the same capability to expand in the same way? Because it feels like there are now quite a few players. Perhaps when you began that was less of the case. You were competing in a much less crowded marketplace.

\n\n\n\n

But it feels like everybody’s intent now is to become an agency which can call itself enterprise. And I’m imagining that you got your foot in the door at a really nice time where you became a name that everybody could trust, and the recommendations come in because of prior work, but maybe that would be more difficult now.

\n\n\n\n

[00:22:08] Rahul Bansal: The market is much bigger now. In fact, just imagine WordPress market share. When we were building the first initial websites, there was not even custom post types that were present in WordPress. So all the WordPress plugins, we used to do a lot of hacks. There was not standardisation. So a lot of things happened with WordPress as a platform. WordPress evolved. The market share has become so big. It’s easier to sell. We have so many examples like from White House to large publishers. And globally, it’s not like just the American companies are using WordPress. India’s second largest publisher also uses WordPress. So does Al Jazeera in Qatar.

\n\n\n\n

So there are many big websites all over the world so it makes WordPress easy to sell. The market is big. There is a precedence where you can pitch somebody, this is WordPress used by so and so. I believe that no matter which lead you are dealing with, so if you have a lead from a certain industry, a certain geography, you will find a WordPress success story in their geography. You will find WordPress being used by your prospect’s competition. That makes it easier to sell WordPress.

\n\n\n\n

So, yeah, the competition is more because opportunity is bigger. The pie is a lot bigger. Otherwise we would’ve stuck to the same size. Every year we are adding more people because we are able to get more work for them, even with these new agencies coming up. In fact, it’s easier to build WordPress agency, or any kind of enterprise grade agency now, because the recipe is quite clear. Because we can look at how other agencies are doing and you can take some lessons from them.

\n\n\n\n

At that time we had no idea. Like, in fact, we didn’t have the idea that we should position ourselves enterprise grade agency, that was the call with Chris. Before that call, we had no idea that we should be labeling ourselves as an enterprise grade agency.

\n\n\n\n

[00:23:42] Nathan Wrigley: If clients approach you, and it sounds like this may not be the case. It feels like people are approaching you because you build WordPress, not inquiring whether or not you would do a WordPress project for them. What are the one or two bits that you always bring out when a client says, well, why would we go with WordPress? What are the one or two top line items which you think, okay, if we’re going to build you a website, we’re going to choose WordPress, and here’s the best reasons at enterprise? So we’re not talking about a mom and pop store, that it really doesn’t matter if it goes down a bit. What are the one or two things which you bring out when an enterprise client wants to know why WordPress?

\n\n\n\n

[00:24:18] Rahul Bansal: First we want to reassure them that WordPress is the right platform. So this is a difference between a product company and agency. A product has a landing page, which is more similar, it gets us to a lot of people. But an agency pitch is tailored for every client, every prospect. So our first goal is to find competition. So which are the competitors for this particular client, prospective client, and see if they’re using WordPress. If your competition is using WordPress, you will feel a lot more comfortable going after it, because nobody wants to be first, especially in large enterprises.

\n\n\n\n

Another way we define enterprise is that, when you are not buying from out of your pocket. In a large organisation, your job is not to save the money or find cheapest solution, your job is to deliver result so that it can go very nicely in your annual review report. I still believe people, especially in enterprise, are looking for safety as a first because they know that they have budget to build anything under the sun.

\n\n\n\n

So usually we say less like, WordPress can do this, WordPress can do that. Because for everything that WordPress or any platform doesn’t do out of the box, they have budget. What they need to know is that it’s secure, it’s safe, it’ll scale well. And if some government approaches us, so we show that public sovereign fund, that they’re managing. So that client has a special permission with us, like we cannot refer them publicly, that government agency, but we can refer them to other government agencies in private conversations. So that is how we convince like, okay, this is similar people to you who are using WordPress.

\n\n\n\n

And I think safety is still the first thing that people are looking for because, it’s not even WordPress, it starts with open source. There is something, somebody did some marketing where people believe or have this misconception that open source will be easy to hack, because you can see the code, you can easily hack. That is our first step. If client mentions it explicitly, we go all in. Even if the client doesn’t mention it, if the prospect says that we are looking for rating interest, we still will verify. Are you sure that you are sorted on WordPress being safe? Any concerns, any doubts?

\n\n\n\n

And then features, because WordPress has no match. And I’m not saying this as a WordPress agency. The Gutenberg editor itself alone is miles apart. If you go to any other platform, the editing capabilities are nowhere close to Gutenberg editor. Gutenberg editor demo itself is a deal breaker in many cases. We just show them Gutenberg editor, and they’re like, wow, is this possible? Is this thing real? Is this some mockup? No, this is website. After the call, we are going to send you a URL, go and try your hands on. This is no fake, that vaporware demo where you see something on my screen, but in reality it doesn’t work like that. This is the real website. Go and try it.

\n\n\n\n

[00:26:53] Nathan Wrigley: That’s really interesting because in the non-enterprise, that message hasn’t necessarily landed. Gutenberg is, it’s very divisive issue, isn’t it? Whether you use it or not. And it’s curious that you are saying that it’s one of the key things which leads to the success.

\n\n\n\n

Can you just dig into that a little bit? What are some of the aspects of Gutenberg which make the clients think, okay, this is great, this is perfect, this is just what we need? What are some of the features that you draw out of the block editor?

\n\n\n\n

[00:27:19] Rahul Bansal: So I think the main difference that we feel like compared to the consumer WordPress, I would say. The consumer WordPress access technologies on very different platform, like proprietary. Just imagine somebody is using Instagram to create reels. With that mindset they come to WordPress Media Library and expect video editing experience like that to happen in WordPress, they will be disappointed.

\n\n\n\n

But here we’re talking to people in large companies, very large companies, using legacy systems, probably from the nineties. They might have a desktop application to update a webpage, some ugly looking forms. We even have a memory where a client, their publishing workflow they had to write an article using a very poorly designed HTML web form, and they had to upload images via FTP. And then they had to reference images in document. There was no drag and drop interface.

\n\n\n\n

So now if somebody like this person comes to Gutenberg, it’s like an iPhone moment for them. With that being said, Gutenberg itself is a very powerful editor. We haven’t come across a case where somebody said, oh, this is not flexible. As I said, like enterprise have a very good balance around the feature versus maintenance. For example, so Gutenberg may have one or two features less compared to a third party page builder, but then being part of Core, they’re assured that five years down the line, it will be very well maintained.

\n\n\n\n

Security is more important to them because one less plugin means one less attack vector. Less things to break, less things to train, less things to maintain going forward. We as an agency develop so many sites on Gutenberg that we have our own libraries and our own patterns. So it’s like, whenever a requirement comes, we can easily map it to Gutenberg.

\n\n\n\n

[00:28:51] Nathan Wrigley: I think that’s the difficult thing to imagine if you’ve never built your own block or you’ve never delved into patterns. But certainly at the enterprise level, if a client comes to you and said, we have this repeatable thing, and we need to put this repeatable thing on page every time. And honestly it’s real chore. And you can build a block, and they drop the block in, and now they just fill out some fields, drag an image in here, and suddenly, boom, it’s exactly on the front end what were expecting.

\n\n\n\n

It’s that kind of thing, isn’t it? It’s that, almost like an app inside of an editor. So we’ve got a block which consumes perfectly the content that you want, and we can adapt it if your needs change. But if you’ve never really gotten into that, it’s hard to imagine. It’s just a bunch of paragraphs and images, but it’s not, it’s so much more powerful than that.

\n\n\n\n

[00:29:34] Rahul Bansal: One thing I would say that, if you look at any large corporation, they have something called design systems, where they have their brand guidelines across products, not just websites like, across mediums like print and everywhere. With Gutenberg, it is very intuitive and easy to map the design system into WordPress. So that is where Gutenberg shines, that you can create patterns, you can create theme json. You can give them a starting point which blends very well with their existing design system.

\n\n\n\n

That is where half of the job gets done. Like, compared to indie hackers or small businesses, large enterprises are not running after lots of plugins. They don’t want to try a hundred plus blocks plugin, a plugin with 200 blocks. They want to restrict number of choices. They want to have less number of blocks, but properly weighted with the user’s guidelines. So it’s like, the freedom they demand is easily given by Gutenberg, and with the assurance of, it is going to be around long term. It’ll be very well maintained. It’ll be very well supported, and performance. I still feel Gutenberg has much better performance, the markup, SEO qualities, top notch.

\n\n\n\n

[00:30:35] Nathan Wrigley: I think it’s just the constraints that you can put around that editing experience. So if the client comes and they want this inexperienced user to be able to create content but have boundaries so they can, I don’t know, they can add an image here and it will be, it doesn’t matter, they just put it in and it will output perfectly. And here’s where the text goes, but they can’t change the fonts, you’re not allowed to change the color and what have you. All of those kind of constraints around the editing experience. It’s just miraculous really what’s possible.

\n\n\n\n

And I think it gets lost because the majority of people, I’m imagining using WordPress are sort of tinkering with Core blocks and it can become confusing. There’s lots of choices. You try one thing and it doesn’t work out, and you throw your hands in the air. But if you’ve built the perfect thing, then all of those guardrails are in place and it will output the perfect thing every time. I think that’s really interesting.

\n\n\n\n

How do you grow, and how do you find your next employees? Because I’m guessing at the level that you are now at, you must have some fairly exacting specifications when you put out a job description. And WordPress is becoming an increasingly JavaScript based thing. Lot more technical difficulties. Where do you find your talent, and is it becoming harder to find?

\n\n\n\n

[00:31:40] Rahul Bansal: This would be unique to literally us. We have what we call our own training center where we, every year we take some 50 students from college, who recently graduated. Every six months we take 25 to 30 students from colleges. We put them through six months of training, like a complete, they get paid to learn WordPress for six month. They have no obligation to continue with us. They can join our competition, they can do anything with the WordPress.

\n\n\n\n

But we really get this talent and this job is very popular in India. So this training we run, the pay scales are very popular in India. So last year also we had some 90,000 applications for 60 positions. We literally have to build a platform. So we have a campus adding platform, its name is Chitragupta. Chitragupta is basically is responsible for managing the ledger of your good and bad work. So in Hindu mythology. So we built  Chitragupta, which basically scans your GitHub repos and assigns your grade.

\n\n\n\n

And those 9,000 people gets graded. And then we interview from top to bottom until 60 positions gets filled. So last time we had to interview some 1,200 students, by the time 60 students got selected.

\n\n\n\n

Then we put them to the six month training. Our course is public, so people know what is going to be in the course, and so we find a lot of passionate people. Many times by the time they join our course, I’ve already gone through it from the public website that we have learn.rtcamp.com. From there, they already have checked it. And then we put them through the six month training. After that, this thing we started this year only. After six month training, we put them six months into the WordPress.

\n\n\n\n

So WordPress Core has a mentorship program running on for new contributors. So this year we enrolled 10 people, managed by Automattic and Google employees, senior employees. So they are mentoring this people for further. So first year we, we invest them heavily. Zero revenue, only investment in year one.

\n\n\n\n

And then from year two, we start getting, like some client work done from them. And this is something turned out to be very great for us from last three years. At some point we felt, there are same number of people switching between agencies, and net new addition to the WordPress worker pool was getting stagnant, especially around Covid.

\n\n\n\n

I felt the way people used to discover life with WordPress, or a professional life with WordPress was mostly through WordCamps or meetup groups, and when that Covid happened, we suddenly missed those years, when new people didn’t come to the WordPress, as many as they used to come before.

\n\n\n\n

So there was this gap that started hurting large agencies, like us. Because if we look at a small website, then the enterprise budget appears a lot, but there’s always a limit. No company approves unlimited budget for any venture. Like for every project there’s a budget. It’s usually large enough, but there’s always a number and, as talent was getting more expensive, WordPress was getting unaffordable at some point.

\n\n\n\n

So I talked to some medium publishers, medium sized publishers, not the big ones, who complain a lot. Like the good WordPress agencies are either sold out or too expensive. It’s like WordPress is suddenly getting unaffordable, and that is when we started in this hiding experiment, where we onboarded people every year. And this is, we are doing from last four years.

\n\n\n\n

So we have been hiring for many years, but early it was 5, 10 people. This massive scale of hiring we started from last three to four years. And, it turned very well for us. Like all these people in second year clocked, like in agency billable hours is a very big metric, and in second year, these people clock 90%, more than 90% billable hours.

\n\n\n\n

[00:35:08] Nathan Wrigley: That’s incredible. What a great idea. Can I just ask, just to clarify with that, is that an in-person thing? So you come to a place where 60 people gather, and the tuition is taking place in the same room, or is it an online thing or?

\n\n\n\n

[00:35:23] Rahul Bansal: So before Covid it was, it used to be in the same room, but the scale was 20 people at that time only. After Covid, we made it completely remote. It’s now completely remote. It’s still in the same time zone because, these are the Zoom calls, recordings. The time zone synchronization is needed. So that’s why it’s currently India only. But we are expanding it to other territories, and we are seeing like if we can create similar talent pool in other part of the world. Because,early it was in n office, then it went remote over Zoom. And this year, it is going async. We have a dedicated department, which is called Learning and Development Department.

\n\n\n\n

So our agency head has implemented most lessons in a synced way, so that people can wake up at different time. And so it’s like they won’t get blocked. They can learn asynchronously, they can complete this six month course asynchronously.

\n\n\n\n

[00:36:11] Nathan Wrigley: It just sounds like the appetite is incredible. The numbers that you just mentioned there, I think you said something like 1200 or something like that, people for 90 places. That’s just remarkable. So the appetite really is there. It seems like such a commendable project as well, in that you are putting out a limited, you know what, you can manage. 60 people out into the workplace. Some of them may end up working with you. Some may end up working with your competitors. But you’ve put 60 people out there who are really credible at pushing the boundaries of what WordPress can do, and hopefully just making a start on their career.

\n\n\n\n

[00:36:44] Rahul Bansal: Yeah.

\n\n\n\n

[00:36:45] Nathan Wrigley: But I know that it’s not just limited to that. And, I would like to get into this just before we finish, because I think this is important. Over the last few years we see these metrics every year of companies who put time into the WordPress project in general, in a whole manner of different ways. They may be sponsoring events. They may be committing staff to Five for the Future and what have you.

\n\n\n\n

And the company, your company, rtCamp, it always seems to be right at the forefront of that in a growing way. I’d just like to applaud you for that and give you an opportunity to say what it is that you do so that we’ve got an impression of just how much good you are doing apart from obviously, having a very profitable agency and what have you, how much good you’re putting back into the community as well. So just outline your commitments to the WordPress project.

\n\n\n\n

[00:37:29] Rahul Bansal: So, as I mentioned that, so we have multiple ways of contributing. So as we hire a lot of from college, unfortunately we cannot have a lot of Core committers with us, but we take care of the other end. For example, these 10 people, we have a commitmentt now internally that every six months, so we will put 10 people full-time, like full-time as in literally full-time. A hundred percent of their time will go in working on WordPress project for six months.

\n\n\n\n

And then this will be rotated by next batch. So in rotation there will be at least 10 people. As we grow further, then we’ll make it 15, 20. And we want to keep this ramping up this number. So there will be always, WordPress Core will have enough junior people to pick the task. So, that good first issues will, somebody will be looking at them.

\n\n\n\n

Then we have a QA people, work into the QA team, other teams. I myself as WordCamp organizer, for WordCamp Asia. We have other people contributing to different part of WordPress.

\n\n\n\n

We have a training course, which is public domain, in public domain. We started that much before learn.wordpress.org is there. Now  learn.wordpress.org is there, it is much better resource. But then this course was there for many years, and many other agencies use it. So that is one of the way to build human capital. So this word actually drives me a lot. We want to consciously put our efforts in developing human capital of WordPress.

\n\n\n\n

Because in the end, it’s people that do the job, no matter how fancy it is. You need a human to put a prompt to the AI. ChatGPT won’t build things on its own. You need to, you need a human to ask creative questions. And we want to ensure that WordPress economy continues to grow, and it never falls short of people. So we hire a lot of junior people. We put into the workplace. We publish our videos tutorial. We publish our training material also in the public domain.

\n\n\n\n

Many companies use it, and we expect no link back, also, no credit. Because sometimes they have a apprehension that if they know, this is why rtCamp course will, for, example, our training course site doesn’t require registration. So if you’re sending your employees to learn WordPress on our site, we won’t track them. We won’t solicit them. We have no way of knowing who’s learning. Google Analytics just shows traffic. A lot of traffic is coming to those training sites, but we have no personally identify information tracked there.

\n\n\n\n

[00:39:45] Nathan Wrigley: I would imagine that in every aspect of your business, except this, maybe, there’s gotta be some measurable ROI. Okay, we put this in, we get this out. Do you have any metrics to measure your commitment to the community, or is it just putting your finger in the air and thinking, okay, last year, our business did this, let’s put, I don’t know, whatever it might be. Do you have a pro forma that you stick to? A number of hours, a number of people? Or is it just, yeah, this feels right this year. Because you can’t measure this. And in some cases, I imagine people would think, yeah, they’re probably overdoing it a little bit over there and what have you.

\n\n\n\n

[00:40:21] Rahul Bansal: So, we have a top line mandate that, so it’s like, internally we divide engineers in three categories in rtCamp. The junior ones were like less than two years in rtCamp. The senior ones like two to five years. And lead levels were like more than five years with us. The junior one, we target 20% of their time for WordPress Core. And the medium level, the seniors, 10%, and lead level is 5%. Lead level is very hard, because we have very less lead engineers. The demand supply gap is more evident on senior and lead level. But then, these metrics are, so our office structure is that we have some called business needs.

\n\n\n\n

So every people need to submit their 20% report. Not only they need to submit the hours report, like they have their hours went into the WordPress Core or different part. They have to compile what are the issues they solved. It’s not like you’re just making time entries. You have to tell in the leadership quarterly review that I have 50 people in my business units, and together they clock 3000 hours. And this is what we achieved in 3000 hours. And this is approved. The props messages we see in WordPress Slack, those screenshots, if our employee names is mentioned, are taken screenshots and filing into those review reports.

\n\n\n\n

Three people got props from my team. The WordPress Core release notes, like with major releases. So those contributor list also presented by them. If somebody’s doing some make WordPress blog post or activity, those are also tracked by them. So the heads compile this report, from like bottom ups and then present in leadership meeting. So this is not accidental.

\n\n\n\n

The material ROI is very hard to measure. We cannot say that, oh, we made like X dollars because of this effort. I think, as a salesperson, when I tell a client like, hey, I’m going to give you an engineer who knows WordPress very well. I’m more confident if that person has contributed six months to the WordPress Core. And their patches is weighted by some amazing people in WordPress community, especially senior ones. It’s like a win-win situation for all. This gives me a very, very well trained people to sell.

\n\n\n\n

[00:42:16] Nathan Wrigley: That’s exactly how I was just thinking about it. This kind of win-win cycle of you put people into WordPress, and obviously at a junior level, more time and I can understand that. That makes sense. Presumably the ones who are more experienced, they’ve got other work to be doing. But also they’ve probably gained a ton of experience doing those prior years of extra hours.

\n\n\n\n

So you put the hours in, but also they contribute to Core, but they get experience back out. They’ll be exposed to all sorts of different things that your projects would never have put them in front of, presumably. So they’ll be touching on subject matters. Getting into plugins, themes, blocks, code, Core, whatever it may be in a whole range of different ways than they would be. So like you say, it’s like you slap my back, I’ll slap yours a little bit. Win-win. WordPress wins, you win.

\n\n\n\n

[00:43:06] Rahul Bansal: There are three wins here. The person, that student, who came right out of the college, and usually in college, people here, people have some negative perception about professional life. That companies are evil. You are going to do labor. Somebody will steal your credit, and here they’re on their own. Like they go into the WordPress community on their own. They sign a patch with their name. They file a Trac ticket with their name. They get props in their name. They get treated very well by contributor. If somebody makes mistakes, WordPress committee is full of nice people. Nobody’s going to pull them down. Nobody’s going to shout at them.

\n\n\n\n

Everybody corrects them with respect and compassion, and that helped them grow as a person. Like, they become better human. They become better coder. And that empathy, we see that, when they become senior engineers, and when they’re reviewing some junior’s code, they remember that, hey, when I was, it was my first day in WordPress community, and I made that patch. I made one mistake, but somebody was nice to me, so I have to pass it on. So that niceness cycle continues.

\n\n\n\n

And, the biggest win is that these people like, who has an incredible job satisfaction. They love open source more. Many of them don’t join for the love of open source, they’re at a point when they, join rtCamp, they’re at a point when their college is ending. They just want to get a job, and secure a financial life. Whatever jobs comes their way, they’re okay with it. Open source, closed source, not much preference. But once they’re in, and then we take them through this one year of tour, like six months in training center, then six months in WordPress community, they become the advocate of open source for life.

\n\n\n\n

And that is a very most important win for us because we want people to believe in open source. We don’t want them to say open source is good because their company is selling it. We want them to have that faith that open source is the right way to do things. And that faith is very important for growth. You cannot mug up your mission statement and stand for it.. You have to believe in something to stand for it.

\n\n\n\n

[00:45:00] Nathan Wrigley: What a profoundly interesting thing to have said. I think that’s just fabulous. I think your company is doing so many interesting things. It’s obviously, financially it’s working out, but just the position that you’ve painted there of the way that you are treating your employees, and the autonomy that you’re giving them, and the future opportunities that you are giving them. And the training opportunities giving them, just remarkable. And I’m profoundly impressed by what you’ve been doing.

\n\n\n\n

Unfortunately, time is our enemy. We’re going to call it a day there. Rahul, thank you so much for chatting to me today. That has been an incredible journey. Long may it continue. I wish you and rtCamp all the success that you can possibly have the future.

\n\n\n\n

[00:45:39] Rahul Bansal: Thank you, Nathan. Thanks for having me on this podcast.

\n
\n\n\n\n

On the podcast today we have Rahul Bansal.

\n\n\n\n

Rahul is the founder and CEO of rtCamp, a large agency that specialises in enterprise-grade WordPress projects. He began his journey quite differently, starting as an individual blogger back in 2006, discovering WordPress in 2007, and gradually transitioning from being a publisher to a freelance developer, before founding rtCamp in 2009. Today, rtCamp is an enterprise-grade WordPress consultancy agency, operating globally and trusted by clients such as Google, Meta, Automattic, NewsUK, and Al Jazeera.

\n\n\n\n

Rahul sheds light on working with enterprise clients in the WordPress space. Many of us are familiar with WordPress in the context of small businesses and blogging, but the enterprise space demands additional layers of security and scalability. Rahul explains the factors that set enterprise projects apart, and why meticulous code reviews,   and security audits are essential when working at this level.

\n\n\n\n

He talks about the opportunities in the enterprise space, recounting how rtCamp initially stumbled into enterprise level projects, not even realising their potential until a client’s high expectations led to a decision to market themselves as an enterprise agency.

\n\n\n\n

We also discuss the role of WordPress in enterprise environments, from why Gutenberg has become a credible selling point, due to its powerful editing capabilities, to how the platform’s flexibility supports varied enterprise needs.

\n\n\n\n

Rahul also gets into the importance of positioning, how historical context offers advantages, and the expanding market that makes WordPress a compelling choice for large clients today.

\n\n\n\n

Towards the end, we explore rtCamp’s innovative internship program aimed at growing the WordPress talent pool, and the way they are contributing back to the WordPress project; a win-win for the business and the broader community.

\n\n\n\n

If you’ve ever considered what it takes to work with WordPress at the enterprise level, this episode is for you.

\n\n\n\n

Useful links

\n\n\n\n

rtCamp

\n\n\n\n

White House website

\n\n\n\n

Al Jazeera website

\n\n\n\n

Campus at rtCamp

\n\n\n\n

rtLearn

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 12 Mar 2025 14:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:43;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:97:\"Do The Woo Community: Effective Collaboration with Clients and Teams: A Chat with Zach Hendershot\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92561\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"https://dothewoo.io/effective-collaboration-with-clients-and-teams-a-chat-with-zach-hendershot/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:237:\"In this episode, Adam and Emma discuss effective collaboration with Zach, CEO of Miruni, focusing on setting clear expectations, minimizing manual tasks via automation, and enhancing communication for better client and team interactions.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 12 Mar 2025 09:49:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:44;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:58:\"Gravatar: Top Strategies for Reducing Friction in Sign-Ups\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=2830\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:50:\"https://blog.gravatar.com/2025/03/11/sign-up-flow/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:17831:\"

Creating effective sign-up flows presents a challenging balance. Users expect quick, frictionless experiences, but businesses need quality data to better serve their customers. To get this information, they often overload the sign-up process, leading to high abandonment rates and lost opportunities.

\n\n\n\n

Thankfully, there is a way to find balance – and we’re talking about more than just user-friendly designs. Advanced strategies like intelligent data collection timing and progressive disclosure techniques help maintain healthy conversion rates while gathering essential user information. These approaches, combined with AI-driven personalization, can transform a standard sign-up process into an engaging experience.

\n\n\n\n

Reducing friction while maintaining control over data collection might seem daunting. However, by implementing strategic optimization techniques and tools like Gravatar’s developer API, you can significantly reduce friction points in their sign-up process. 

\n\n\n\n

So, let’s see how you can do just that while still collecting valuable user data that allows for personalization and improves the overall user experience.

\n\n\n\n

Essential strategies for reducing sign-up friction

\n\n\n\n

When talking about sign-up friction, a common topic is form optimization, but that’s only the beginning. You need a bit more if you want to create better sign-up experiences and reduce drop-off rates while still maintaining high data quality.

\n\n\n\n

First, progressive profiling allows you to collect user information gradually rather than overwhelming new users with lengthy forms like these: 

\n\n\n\n\" Example\n\n\n\n

Instead of requesting all details upfront, ask only for essential information during sign-up, and additional data can be gathered as users engage with your product.

\n\n\n\n\"Example\n\n\n\n

You can also use email-based profile systems like Gravatar to make the process even easier. By integrating Gravatar into your sign-up flow, you can automatically populate user avatars and profile information using just an email address. This eliminates several manual entry steps.

\n\n\n\n\"\"\n\n\n\n

Delayed email verification keeps users engaged by letting them access your app immediately after sign-up. ChargeBee is a great example of this approach: 

\n\n\n\n
    \n
  1. New users enter the platform right away by filling in the more important details. 
  2. \n
\n\n\n\n\"Chargebee\n\n\n\n
    \n
  1. They verify their email address only after signing in.
  2. \n
\n\n\n\n\"Chargebee\n\n\n\n

Finally, smart forms with predictive error prevention catch potential issues before submission rather than returning users to a form with error messages. This real-time validation helps users complete sign-up forms correctly the first time.

\n\n\n\n\"Example\n\n\n\n

Intelligent data collection: When and what to ask 

\n\n\n\n

Making smart decisions about when to request user information can significantly impact sign-up completion rates. A strategic approach starts with distinguishing between essential and non-essential data.

\n\n\n\n

Essential information typically includes:

\n\n\n\n
    \n
  • Email address (for account creation).
  • \n\n\n\n
  • Password.
  • \n\n\n\n
  • Username (if required).
  • \n
\n\n\n\n

Non-essential information such as company name, last name, job title, team size, and phone number can definitely wait. 

\n\n\n\n

Custom triggers help time additional data requests effectively. For example, only ask for team size after users show interest in collaboration features. Or request company details when someone visits the enterprise pricing page.

\n\n\n\n\"Example\n\n\n\n

Profile enrichment through integrations and APIs offers another powerful approach. By combining email-based profile services like Gravatar with progressive data collection, you can build comprehensive user profiles without overwhelming new users.

\n\n\n\n

Gravatar’s API can automatically populate non-essential information from a user’s email address, eliminating the need to ask for basic profile details during sign-up. This approach maintains high conversion rates while still gathering valuable user data.

\n\n\n\n

How Gravatar simplifies user onboarding

\n\n\n\n\"Gravatar\n\n\n\n

Gravatar transforms the traditional sign-up process by automatically populating user profiles through a single email address. This approach eliminates multiple manual entry steps that often cause users to abandon sign-up forms – according to a 2020 study by Wyzow, 80% of users have deleted an app because they found the initial setup process too complex.

\n\n\n\n

This is why major platforms like GitHub, OpenAI, and Atlassian use Gravatar to enhance their sign-up experiences. 

\n\n\n\n

By implementing Gravatar’s REST API, developers can instantly access a rich set of user information:

\n\n\n\n
    \n
  • Display names and avatars.
  • \n\n\n\n
  • Professional information.
  • \n\n\n\n
  • Biography and location.
  • \n\n\n\n
  • Language preferences.
  • \n\n\n\n
  • Pronouns.
  • \n\n\n\n
  • Social and professional links.
  • \n\n\n\n
  • User interests.
  • \n\n\n\n
  • Work history.
  • \n\n\n\n
  • Social connections.
  • \n
\n\n\n\n

This enriched data collection happens without requesting additional information from users during sign-up. Instead of presenting new users with lengthy forms asking for profile details, applications can pull this information automatically through the Gravatar API.

\n\n\n\n

The benefits extend beyond the initial sign-up. With comprehensive profile data available immediately, applications can create personalized experiences from the first interaction:

\n\n\n\n
    \n
  • Customized welcome messages using the user’s name.
  • \n\n\n\n
  • Interface language set to user preferences.
  • \n\n\n\n
  • Content recommendations based on stated interests.
  • \n\n\n\n
  • Contextual features based on professional background.
  • \n\n\n\n
  • Team collaboration suggestions using work history.
  • \n\n\n\n
  • Social connections through matched interests.
  • \n\n\n\n
  • Location-based content and recommendations.
  • \n
\n\n\n\n

Implementing Gravatar also helps solve common onboarding challenges:

\n\n\n\n
    \n
  • Reduces form abandonment by minimizing required fields.
  • \n\n\n\n
  • Eliminates the need for users to upload profile pictures.
  • \n\n\n\n
  • Maintains consistency across multiple platforms.
  • \n\n\n\n
  • Allows users to update their information in one place.
  • \n\n\n\n
  • Supports both individual and role-based personalization.
  • \n\n\n\n
  • Enables automatic profile updates across integrated services.
  • \n
\n\n\n\n

The system respects user privacy by letting individuals control what information they share. Users can maintain multiple profiles with different levels of detail tied to separate email addresses, giving them full control over their online presence while still providing valuable data for personalization.

\n\n\n\n\"Example\n\n\n\n

For developers, integration is straightforward through the REST API, with comprehensive documentation and support available. And since Gravatar is free for both users and developers, it offers a cost-effective way to enhance sign-up flows and improve user engagement from the start. The API’s design focuses on developer experience, making it simple to implement and maintain while providing powerful personalization capabilities.

\n\n\n\n

Real-world examples: Successful Gravatar implementations

\n\n\n\n

Let’s see how different websites use Gravatar to make signing up and getting started super simple. 

\n\n\n\n

OpenAI offers a perfect example of a streamlined approach: 

\n\n\n\n
    \n
  1. Users sign up with their email and create a password.
  2. \n
\n\n\n\n\"Creating\n\n\n\n
    \n
  1. Their profile picture automatically appears from Gravatar. 
  2. \n
\n\n\n\n\"Profile\n\n\n\n

No extra steps are needed. This small touch adds a personal element to their AI platform experience right from the start.

\n\n\n\n

WordPress.com takes this integration even further. When someone signs up, the platform automatically pulls in everything from their Gravatar profile – their bio, display name, social links, and even their location and interests. 

\n\n\n\n\"Profile\n\n\n\n

This means new bloggers can jump right into writing instead of spending time filling out profile forms. Plus, any changes they make to their Gravatar profile automatically update across all their WordPress sites.

\n\n\n\n

Other popular platforms also use Gravatar in creative ways to make things easier for their users:

\n\n\n\n

Developer platforms:

\n\n\n\n
    \n
  • GitHub shows Gravatar avatars next to code contributions, helping developers build recognition in open-source communities.
  • \n
\n\n\n\n\"Profile\n\n\n\n
    \n
  • GitLab uses Gravatar to personalize project dashboards and team features.
  • \n
\n\n\n\n

Collaboration tools:

\n\n\n\n
    \n
  • Figma automatically loads team member profiles to help people connect faster.
  • \n\n\n\n
  • Slack shows profile pictures in chat to help teammates recognize each other.
  • \n\n\n\n
  • Trello adds Gravatar photos to cards and boards to make project tracking more personal.
  • \n
\n\n\n\n

The best part? Users only need to update their info in one place – their Gravatar profile. That single update gets reflected everywhere they use these tools, making it super convenient to keep a consistent online presence.

\n\n\n\n

Optimizing mobile sign-up experiences

\n\n\n\n

Making sign-ups work smoothly on mobile devices has become essential, with mobile traffic now exceeding 60% of all web visits. But mobile users face unique challenges – smaller screens, touch interfaces, and often spotty connections. Here’s how to create a mobile-friendly sign-up flow that gets results.

\n\n\n\n

Start with the basics: optimize every element for touch. 

\n\n\n\n
    \n
  • Buttons need to be at least 44×44 pixels, with enough spacing to prevent accidental taps. 
  • \n\n\n\n
  • Make forms finger-friendly by adding ample padding between fields. 
  • \n\n\n\n
  • Stick to readable font sizes – 16px minimum for text inputs to prevent automatic zooming.
  • \n
\n\n\n\n

Smart keyboard handling makes a big difference too. Set the right input types (email, tel, number) so users get appropriate keyboards. Group similar fields together to minimize keyboard switches. For example, keep all text fields together, then numeric fields.

\n\n\n\n

Simplify data entry by:

\n\n\n\n
    \n
  • Enabling autofill where possible.
  • \n
\n\n\n\n\"Example\n\n\n\n
    \n
  • Offer social login options optimized for mobile.
  • \n
\n\n\n\n\"Example\n\n\n\n
    \n
  • Using Gravatar to auto-populate profile info from email addresses.
  • \n\n\n\n
  • Adding real-time validation to catch errors early.
  • \n
\n\n\n\n\"Example\n\n\n\n

Break up longer forms into logical steps with clear progress indicators. Each step should fit comfortably on a mobile screen without scrolling. And remember – every field you require is another chance for users to abandon the process. Only ask for what’s absolutely necessary.

\n\n\n\n

Finally, test your flow on multiple devices and screen sizes. What works on a large iPhone might be frustrating on a smaller Android phone.

\n\n\n\n

Get started with Gravatar’s developer tools

\n\n\n\n

Ready to streamline your sign-up process with Gravatar? Their developer tools make integration surprisingly simple. The new REST API gives you instant access to user profiles with just a few lines of code.

\n\n\n\n

Getting started takes just three steps:

\n\n\n\n
    \n
  • Register for a free API key at Gravatar’s Developer Dashboard.
  • \n\n\n\n
  • Use the interactive console to test API endpoints.
  • \n\n\n\n
  • Follow the comprehensive documentation to add Gravatar to your app.
  • \n
\n\n\n\n

The API lets you fetch rich user data like:

\n\n\n\n
    \n
  • Profile pictures and avatars.
  • \n\n\n\n
  • Display names.
  • \n\n\n\n
  • Professional details.
  • \n\n\n\n
  • Social links.
  • \n\n\n\n
  • Location preferences.
  • \n\n\n\n
  • Custom profile fields.
  • \n
\n\n\n\n

Best of all, users control what information they share. You just need an email address to start pulling available profile data. This balance between functionality and privacy makes Gravatar great for both developers and users.

\n\n\n\n

Want to explore more? Get in touch with our team today, and we can discuss specific integrations for your platform. 

\n\n\n\n\"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 22:19:10 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:45;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"WordPress.org blog: WordPress 6.8 Beta 2\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18619\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-2/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5846:\"

WordPress 6.8 Beta 2 is now ready for testing!

\n\n\n\n

This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, you should evaluate Beta 2 on a test server and site.

\n\n\n\n

You can test WordPress 6.8 Beta 2 in four ways:

\n\n\n\n
PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. (Select the “Bleeding edge” channel and “Beta/RC Only” stream.)
Direct DownloadDownload the Beta 2 version (zip) and install it on a WordPress website.
Command LineUse this WP-CLI command: wp core update --version=6.8-beta2
WordPress PlaygroundUse the 6.8 Beta 2 WordPress Playground instance to test the software directly in your browser.  No setup is required–just click and go! 
\n\n\n\n

The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

\n\n\n\n

Catch up on what’s new in WordPress 6.8: Read the Beta 1 announcement for details and highlights.

\n\n\n\n

How to test this release

\n\n\n\n

Your help testing the WordPress 6.8 Beta 2 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important.  This detailed guide will walk you through testing features in WordPress 6.8.

\n\n\n\n

If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

\n\n\n\n

Curious about testing releases in general? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

\n\n\n\n

Vulnerability bounty doubles during Beta/RC

\n\n\n\n

Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

\n\n\n\n

Beta 2 updates and highlights

\n\n\n\n

WordPress 6.8 Beta 2 contains more than 14 Editor updates and fixes since the Beta 1 release, including 21 tickets for WordPress core.

\n\n\n\n

Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 1 using these links:

\n\n\n\n\n\n\n\n

A Beta 2 haiku

\n\n\n\n

Second wave refines,
Lines of code like rivers flow,
WordPress finds its form.

\n\n\n\n

Props to @ankitkumarshah @vgnavada @krupajnanda @michelleames @audrasjb @marybaum @ecgan for proofreading and review.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 15:46:13 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:46;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:63:\"Do The Woo Community: What’s a WordPress Site Without a Blog?\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92636\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:63:\"https://dothewoo.io/blog/whats-a-wordpress-site-without-a-blog/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:179:\"In September 2024, we relaunched our community-focused blog, emphasizing its importance for site substance while highlighting the relevance of blogging amidst evolving technology.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 11:01:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:47;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:108:\"Do The Woo Community: Securing the Supply Chain, Insights from the WordPress 6.8 Update with John Blackbourn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92331\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:106:\"https://dothewoo.io/securing-the-supply-chain-insights-from-the-wordpress-6-8-update-with-john-blackbourn/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:250:\"John Blackbourn discusses significant security enhancements in WordPress 6.8, notably switching to Bcrypt for password storage. The conversation highlights evolving perceptions of open-source security and upcoming events like the CloudFest Hackathon.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 10:08:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:48;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:113:\"Gutenberg Times: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"https://gutenbergtimes.com/?post_type=podcast&p=37944\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:87:\"https://gutenbergtimes.com/podcast/gutenberg-changelog-115-wordpress-6-8-wordcamp-asia/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:43300:\"

Birgit Pauli-Haack and Jessica Lyschik talked about Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia

\n\n\n\n

Show Notes / Transcript

\n\n\n\n\n\n\n\n

Show Notes

\n\n\n\n

Special guest: Jessica Lyschik

\n\n\n\n\n\n\n\n

Community Contributions

\n\n\n\n\n\n\n\n

What’s released

\n\n\n\n\n\n\n\n

What’s in active development or discussed

\n\n\n\n\n\n\n\n

Stay in Touch

\n\n\n\n
\n\n
\n\n\n\n

Transcript

\n\n\n\n

Birgit Pauli-Haack: Hello and welcome to our 115th episode of the Gutenberg Changelog podcast. In today’s episode, we will talk about Gutenberg releases 20.2, 20.3, and 20 .4, and a little bit of WordPress 6.8 and WordCamp Asia. I’m your host, Birgit Pauli-Haack, curator at the Gutenberg Times and a WordPress developer advocate working for Automattic and still recovering from my cold that I brought back from Manila.

\n\n\n\n

And today, I’m happy to get to chat again, it was Jessica Lyschik, front-end developer at Greyd and also core contributor to the WordPress open source project. We both just returned from WordCamp Asia.

\n\n\n\n

Hello, Jessica. How are you today? How is your jet lag?

\n\n\n\n

Jessica Lyschik: Hey, thanks for having me. I think the jet lag is, by now, done, I would say. So I’m back to the European time zone, but I also caught a bug after returning and had to take off a couple of days to get better. But by now, it’s like another week has passed. I’ve been working normally and yeah, I’m back to normal and preparing for the next event next week, which is CloudFest.

\n\n\n\n

Birgit Pauli-Haack: You’re going to CloudFest. Wonderful.

\n\n\n\n

Jessica Lyschik: Yeah.

\n\n\n\n

Birgit Pauli-Haack: I had to cancel my participation in CloudFest because I have a bum knee. And my doctor said, “Well, going to another congress where you run around like crazy from one thing to the next, it’s probably not conducive to your healing that bum knee.” It sucks at one point, yeah. But on the other hand, “Okay. I don’t have to travel.” It’s another… Yeah, I can concentrate on some of the work again.

\n\n\n\n

Jessica Lyschik: And get enough sleep, which is something you do not get on conferences and stuff like that.

\n\n\n\n

Birgit Pauli-Haack: Right. Especially, CloudFest. I think every evening there is a festival or a party or something.

\n\n\n\n

Jessica Lyschik: You can actually make it work. I do it the same on WordCamps. It’s the same for me. So it’s just when you are deciding where do you want to go, maybe not just be there as the first person and leave as the last person. But come late, leave early, and then just try to make it work for you. And it’s, of course, different for everyone. Some people are just like, they want to be everywhere and they need to go everywhere. And I’m more like, I need some breaks in between because otherwise that’s not going to work.

\n\n\n\n

Birgit Pauli-Haack: Yeah, I’m pretty much the same way. However, sometimes I’m just so present in the moment, in the conversation, that I can really lose track of time. And then these are people I’ve never going to see for the next year or so, or maybe two. So at least, that was at WordCamp Asia. Where you’re only going to go to that particular family reunion and almost feels like that. Once a year and you need to catch up on what happened with other people, and there were so many good things to happen.

\n\n\n\n

WordCamp Asia                                                       

\n\n\n\n

So, what are your takeaways from WordCamp Asia? Do you have anything that will say, “Okay. Yeah, that was very surprising”? Interesting. New.

\n\n\n\n

Jessica Lyschik: It has been my first time to the Philippines, I don’t know about you, but I think it has been a very interesting couple of days there in Manila. I did not get to see so much about Manila itself, unfortunately. The jet lag coming to Manila also hit me very hard. So the day I had planned to do something, go out somewhere did not happen. But I saw the Mall of Asia, which was like a gigantic mall where you could get your daily steps in very easily and not walk around the same circle for 10 times or something like that.

\n\n\n\n

What I found very interesting was the food. I think the food was pretty good there. There was a lot of variety. We had a lot of Filipino food during the conference days, which I found pretty amazing. There’s a lot of seafood and fish in there. I’m not such a fan of seafood, but I tried the other things and they were all pretty good. So, I did not have anything that I didn’t like.

\n\n\n\n

Birgit Pauli-Haack: Yeah. I was really… Not surprised, but it was quite unusual that the vegetarian as well as the vegan options are so particularly tasteful and very… I have a big variety there.

\n\n\n\n

Jessica Lyschik: That’s true.

\n\n\n\n

Birgit Pauli-Haack: And I got to chat with Dan, who is a former chef, who was on the organizing team and responsible for all the food. And he just has such a passion for the Filipino food and knows everybody in Manila to pick the right caterer for the events. It was really interesting, yeah. I also got to talk with a lot of Automatticians, but they all had the same T-shirt on, so all of a sudden, I was recognizing my fellow, my coworkers. And we don’t get to see each other during the year, especially in other teams so much. So, it was really interesting for me.

\n\n\n\n

I like to hang out at the Do The Woo. Bob had… I think he started that last year in WordCamp Europe, that he is actually a sponsor and has a spot in the sponsor hall where people can hang out. And he invites his cohorts to spend an hour there. Or other people that he collaborates with, to just spend an hour there. So they can also say to their friends, “Okay. If you want to talk to me, I’m at that hour, at the Do The Woo booth.”

\n\n\n\n

Jessica Lyschik: Oh, nice.

\n\n\n\n

Birgit Pauli-Haack: But that was an interesting experience, yeah. So, I did that. And I was surprised how many people are actually in my talk because the such a niche topic which was about Playground and how to create demos with blueprints. And being the last session before Matt’s keynote and Q&A, I thought maybe they’re not going to be a whole lot of people in that talk, but I was surprised. There were, at least, 50 or 60 people there. Yeah, it was cool.

\n\n\n\n

Jessica Lyschik: Yeah. Well, that’s nice.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

Jessica Lyschik: I was there too, I have to say.

\n\n\n\n

Birgit Pauli-Haack: Oh, right.

\n\n\n\n

Jessica Lyschik: I was at the very far back. Yeah, but it was quite interesting to go back and see, “Okay, this is…” I already know what blueprints are so it’s not that big of a deal, but going into the details again, it’s like, “Oh yeah, I remember that. Oh, I forgot this. Oh, okay.”

\n\n\n\n

So, it was a very good thing.

\n\n\n\n

Birgit Pauli-Haack: That was good. Yeah, good. So it was something for beginners, for the intermediate, and for the advanced. I was hoping about that. We will have WordCamp Europe.                                                       

\n\n\n\n

Oh, I’m not saying that. It’s not out yet. But yeah, announcements will come.

\n\n\n\n

Jessica Lyschik: Nice. I had a pretty good Speed Build as well with Nick, and that was a lot of fun. Nick tried to tackle the website with AI, or at least the top part with the slider with AI. Unfortunately, people said I won. I think Nick also did a great job. I felt a bit sad. Everyone’s clapping for me and cheering for me more than for Nick. It was like a bit disappointing. It’s like he tried. I would’ve never tried this with AI because I do not have the patience in 30 minutes to create something with AI. So I decided just to go, “Okay, do it in normal stuff. Just build some blocks, build some patterns there and do it.” But it was a lot of fun and it was great to see that afterwards, Nick also tried to not fix it, but further enhance it to make it an actual usable block.

\n\n\n\n

That was pretty cool to see. He showed me the demo the next day. That was very nice.

\n\n\n\n

Birgit Pauli-Haack: And I think he blogged about it.

\n\n\n\n

Jessica Lyschik: Yes, he did.

\n\n\n\n

Birgit Pauli-Haack: So, I’m going to share that link in the show notes when I find it fast. Yes, Speed Build Carousel Block. Because people are always asking for carousel blocks. Why isn’t that in community, I say. I’m going to put it in a community contributions. You’ll find it in show notes.

\n\n\n\n

I think the two of you saying, “Okay, I’ll go back to what I know, what is fast, and what I know how to accomplish.” And then the other approach was that, “Well, let’s, under pressure, do something new.” But it’s also the, how do you approach learning new things? And sometimes you say, “Okay, I’m not going to learn it because I need to get my stuff done, and I know how to do this and I get it done.” When you learn new things, your task becomes more as an inspiration rather than the success because you might not end up accomplishing your task with the new thing. Because of course you are in a learning mode, you need to learn a lot.

\n\n\n\n

So, I compare that with my first experience with the spreadsheet on the computer, MultiPlan was that. So I’m dating myself, but yeah, it was in the early ’90s. MultiPlan was even ahead of Excel from Microsoft. I had a big spreadsheet from the accountant and I said, “Oh, that should be much easier to be done in a spreadsheet on a computer.” So I spent all day, or all night actually, learning how to do this and put the spreadsheet in. But of course, it took me 6 or 8 hours. And if I would’ve done it just with a calculator, I would’ve calculated the whole spreadsheet probably in two hours or something like that. So, it’s not how long it takes to do something the first time when you learn this. It’s how long it takes when you do it a second time, because you need to discard the first time most of the time.

\n\n\n\n

And I found that a lot of people who learn block development, what took me a half an hour with short code took me three days in doing it as a block. I said, “Yeah, that’s the first time you learn of things. Of course, it takes longer. Of course, it takes… You’re all going to changing your brain into the new paradigm. But how long does it take the second time around? Is it faster or is it better?” Anyway, this is the philosophical Birgit in a horsey voice. Let’s go back.

\n\n\n\n

So WordCamp Asia, it was the first time for me in the Manila, and I actually planned a couple of days. Not a couple, a few days. Four days. Did some sightseeing, so I went to the historic sites of the Spanish occupation. I saw the monument for the atrocities that happened in the Second World War, and I learned about the current contemporary arts in two art museums. And I went downtown to the new business district there with a nice park and shops left and right on the street. It’s a pedestrian area. It’s beautifully done. And I also discovered a few street art that were purposefully put on that place as well.

\n\n\n\n

So, that was quite interesting. Of course, I overdid it and I got my bum knee from there. So yeah, it was a little painful than going on the conference and going in the… The venue was quite vast, I found. 

\n\n\n\n

Jessica Lyschik: You had to walk a lot?

\n\n\n\n

Birgit Pauli-Haack: Yeah, you had to walk a lot. But I found all the escalators, so that was good. I didn’t have to do stairs so much. But yeah, it was a walk a lot. I like the Automattic booth was really big, but there was other… Hostinger was really big out of the usual. I also saw Mark Westguard of this WS Forms. He is on every flagship and shows off his plugin. I have to think really hard to get back to that because there’s the whole week, two weeks after that that already took over my life.

\n\n\n\n

Community Contributions                                                       

\n\n\n\n

Which brings us back to, “Okay, let’s record that rest of the show.” So, we had a few releases. So on the developer blog, Robert Meszaros published an article on customizing WordPress embeds to match your theme. And I think that’s very interesting to an approach to make sure that all the embeds that you use are actually matching your theme and you don’t use it out of the box. So he has some nice examples in there, and some great code snippets in how to do all of that. It’s definitely something to go back to, to make a better theme or a better site view for that.

\n\n\n\n

Jessica Lyschik: Yeah, I think it’s a nice finishing touch when you’re creating a new website that really embraces embeds. I didn’t know about this, to be honest. I just saw it today. And I think it’s really great. It’s not something super big, but when you have a brand new website and have put so many thoughts and hours into the design, and then there comes this embed that just looks like it’s not meant to be on this website, then I think this is a great example of how tweaking the sites essentially can make an embed also look like it’s part of the website and not just some part of default WordPress that just pops up somewhere.

\n\n\n\n

Birgit Pauli-Haack: Yeah, that hasn’t gotten a whole lot of love.

\n\n\n\n

Jessica Lyschik: Yeah, that’s true.

\n\n\n\n

Birgit Pauli-Haack: So, he shared this. For instance, one example is that out of the box, the featured image of a post that you embed has some border around, and he just shows you how to make that image go all the way to the corners. That’s such a small little detail, but it shows the attention to detail. And when you have all your cards that you have, your postcards in the query loop all having the same design, and all of a sudden, the embed doesn’t… It really stands out. It doesn’t… And it also distracts the reader from, “Why is this different? What I haven’t seen yet?” It has some nice little features on how to change things. Some great sailing pictures here. So, take a look at that and spruce up your site with some of the little things and big things.

\n\n\n\n

What’s Released – Gutenberg 20.2                                                       

\n\n\n\n

All right. So now, we come to Gutenberg 20.2 that was released in January, to be exact.

\n\n\n\n

Jessica Lyschik: End of January, I think.

\n\n\n\n

Birgit Pauli-Haack: Do you want to start out with what we are talking about?

\n\n\n\n

Jessica Lyschik: Yeah. So, this was one of the two. I think I did the Gutenberg blog post on this one. So yeah, this wasn’t such a big release. It was rather small compared to the previous ones. Also, it was combined with, I think, 21.

\n\n\n\n

Birgit Pauli-Haack: 21, yep. And we talked about that.

\n\n\n\n

Jessica Lyschik: 20.1 release? Yeah. So, there isn’t that much going on in this release. It’s rather smaller bug fixes and some polishing overall. And I think one of the interesting things was that in the post content, you can now define the heading colors on a more global level. I think this was also a highlight from my blog post when I remember correctly.

\n\n\n\n

Birgit Pauli-Haack: Mm-hmm. Yeah, I really like that you can now have the details block be more like an accordion with a name attribute. So it’s not in the UI, but you can do it in the… It’s in the UI, but you have to go to the advanced section to give all.

\n\n\n\n

Jessica Lyschik: Oh, okay.

\n\n\n\n

Birgit Pauli-Haack: Yeah, to give it all. To get this all done. It’s not for someone who doesn’t know what to do, that kind of thing. It’s not intuitive for site builders, so you need to give it a block name so it shows up as a summary. A block name about a name attribute.

\n\n\n\n

Jessica Lyschik: Oh. So, when you give it the name.

\n\n\n\n

Birgit Pauli-Haack: Sorry. Yeah, you need to give it a name attribute in the advanced section so the CSS that is built knows, “Okay. This is all one section. And one is open, the other ones are closed.” So, it kind of has accordion package.

\n\n\n\n

Jessica Lyschik: So they all need to have the same name in this name tag, so then it automatically brings this only one of these sections is open. Okay, got it. Apparently, I missed that one.

\n\n\n\n

Birgit Pauli-Haack: Well, great.

\n\n\n\n

Jessica Lyschik: But it’s okay. Now, we talked about it.

\n\n\n\n

Birgit Pauli-Haack: Right. Yeah, that’s what we’re here for. Two eyes see more than one. Four eyes see more than two.

\n\n\n\n

Jessica Lyschik: Definitely.

\n\n\n\n

Birgit Pauli-Haack: I also wanted to point out that the WP env local development tool now has WP-MyAdmin support as well as Multisite support. It had it before, but now it’s also documented so you know how to use it. That’s why I wanted to point it out because…

\n\n\n\n

Documentation

\n\n\n\n

Jessica Lyschik: Oh, I didn’t know it had this. You had this phpMyAdmin in the WP env.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

Jessica Lyschik: I’m not using PHP. We are so confused. I’m not using WP nth Multi… Multisite or WP env fit-all?

\n\n\n\n

Birgit Pauli-Haack: WP env.

\n\n\n\n

Jessica Lyschik: Ah, okay.

\n\n\n\n

Birgit Pauli-Haack: Yeah. It’s when you’re working on Gutenberg, on your Gutenberg, something you can do. Just WP nth and it spins up a local WordPress instance with that particular folder. It also supports Multisite that came with 20.8.

\n\n\n\n

Jessica Lyschik: Interesting.

\n\n\n\n

Birgit Pauli-Haack: Yeah, you’re right. There were quite a few bug fixes in there and some polish in terms of previews. And also, some panel changes that have been in the last few Gutenberg releases, and also for the ones for the next. That’s a refactor of things. It was 20.2. I don’t think there’s anything else.

\n\n\n\n

Jessica Lyschik: It’s a bit tricky with the numbers of 20.

\n\n\n\n

Birgit Pauli-Haack: Yeah. God.

\n\n\n\n

Jessica Lyschik: … in the brains of WordPress people.

\n\n\n\n

Birgit Pauli-Haack: Yeah. So that brings us to 20.3, which was released just two weeks ago.

\n\n\n\n

Gutenberg 20.3

\n\n\n\n

Jessica Lyschik: We were all hanging out in Manila.

\n\n\n\n

Birgit Pauli-Haack: Well, it was actually before or right on February 18th and it was released. Yes, we were all hanging out already. On travel, on planes. Yeah, my plane was… I was…

\n\n\n\n

Jessica Lyschik: On planes, yeah.

\n\n\n\n

Birgit Pauli-Haack: So, it was 12 hours to Singapore and then there’s another 3 1/2 hours from Singapore to Manila.

\n\n\n\n

Jessica Lyschik: Oh, I did the same route.

\n\n\n\n

Birgit Pauli-Haack: It was kind of 15 hours flight, but then you have to be 2 or 3 hours earlier at the airport. You have a layover in Singapore, and then you have to transfer from the airport to the hotel and…

\n\n\n\n

Jessica Lyschik: Yeah. I think I calculated something, like 23, 24-ish hours door to door, so it’s not just like a 15 hour flight. But yeah, you have to count in all the waiting time. I had to travel to Munich airport two hours, so that all adds up to this whole ordeal of…

\n\n\n\n

Traveling to Asia is easy. No, it’s not.

\n\n\n\n

Enhancements

\n\n\n\n

Birgit Pauli-Haack: No, it’s not. Yeah. So Gutenberg 20.3 also has a not particular big features coming in, but some nice additions. And one of them is that the social links now of a Discord logo that you can add to it. The query block now, that is really nice. It has an option to ignore sticky post. It took a while to get the sticky post into the filter, but then there’s also the need that sometimes you need a query loop that ignores the sticky post.

\n\n\n\n

Jessica Lyschik: Yeah. It’s definitely something that you’re used to this when you’re doing classic themes and just have all the opportunity with the WP query nth function. And it’s great to see that these little things and… Even if you do not use them that often, that these are still now available. That just makes transitioning to block themes and block inside it are so much better because you finally have all the options. But maybe not all yet for the query loop, but we are getting there. Let’s put it like that. We are getting there.

\n\n\n\n

Birgit Pauli-Haack: For sure, yeah. There was a major push in that.

\n\n\n\n

Do you want to take the next one?

\n\n\n\n

Jessica Lyschik: The yet another one of completing the options that you have on block is the RSS block got border and spacing support. And also, duotone settings got improved, they now have a reset button and improved toggle rendering. Let’s have a look what this does.

\n\n\n\n

Birgit Pauli-Haack: Yeah, the reset button has gotten quite the attention now that it was missing on a few of those color pickers or so, or panels. So, what did you find out?

\n\n\n\n

Jessica Lyschik: Oh. I think it’s also, these are such tiny changes. But once you have them, you realize it’s so much easier to clear colors or remove something that you would have needed another four clicks or something, and then it’s just one. So it doesn’t seem like big things, but it slowly improves over time. And I think this is what the editors actually need right now, this refinement. Because there’s always been in the past pushing big projects, new features, and now it’s more like, “Okay, we are in the situation, but the best we can do is basically to do the housekeeping and fix the smaller things and polish it.”

\n\n\n\n

Birgit Pauli-Haack: Yeah, and the smaller things.

\n\n\n\n

I think it’s for the user. Very important to have a consistent interface. So, if you put a background color in and you have a reset button, why don’t you have a reset button on the shadows? So, shadow panel. Or why can’t I have a reset button on the text color, for instance, if it was missing. So it’s definitely, you cannot take that cognitive load. You lower that quite a bit by having an inconsistent interface. Also, with border and spacing support, if the block doesn’t have it and all of a sudden it doesn’t match what you want, then you go over looking for things. And the spacer block is not always the best solution for things. It’s not a bad solution, but it’s not the best because once a panel gets or a block gets spacing support, now you have to chase down all the spacer blocks to take them out. So, it’s kind of interesting.

\n\n\n\n

Jessica Lyschik: That’s true, yeah.

\n\n\n\n

Birgit Pauli-Haack: The next one is there was a bug fix or maybe a revert on the quick inserter, that it didn’t search the patterns anymore when you put a search parameter in there. And that has been restored. So I think although that’s bug fix, or I think it’s bug fix, it’s definitely worth pointing out. So, a missing feature comes back. Yay.

\n\n\n\n

Jessica Lyschik: We just talked about it having the same options on blocks. Like, archives and categories got the color support. So, you can now have select colors on the archives and category blocks. Yet another one of those because then, people try.

\n\n\n\n

If you do not have them, it’s like, what do these blocks do not have? Why can I not change the color there? Then, people go to CSS and then it’s not needed actually if these settings would just be provided right from the start. But yeah, it’s like a living project. So, here we are.

\n\n\n\n

Birgit Pauli-Haack: Or what I always did when I didn’t have color support, I put it in a group block, and then of course it blows up the nesting of my blocks. So there are always ways around it, but once things then come into the editor, you need to think about how your workaround needs to be worked around.

\n\n\n\n

So, I think those were the few things that I wanted to point out. Did you see anything else that you wanted to point out?

\n\n\n\n

Jessica Lyschik: No, I don’t think so, but I’ve been just scrolling through it. It’s been a good chunk of bug fixes, some accessibility improvements, some performance improvements, good quality tools.

\n\n\n\n

Gutenberg 20.4

\n\n\n\n

Birgit Pauli-Haack: All right. That brings us to Gutenberg 20.4, which is also the last Gutenberg release for which the enhancements made it into 6.8. After that, it’s all bug fixes that go into the release, and any new enhancements coming into Gutenberg will be reserved for the next release. What is it? 6.9? We don’t know yet when that’s going to be, but…

\n\n\n\n

So, what’s in there? There is a conditional enable the new default rendering mode for pages. I highlighted that. And I heard from quite a few people that they like that there is a default rendering mode for pages, but I have not seen yet the use case for it. So, why are people so excited about this? But yeah.

\n\n\n\n

Jessica Lyschik: That’s a very good question. You already had this show template. That’s already in there. That’s a good question. Why it’s so hyped? Maybe, I need to test it out. That’s probably a problem.

\n\n\n\n

I haven’t gotten to looking at the latest releases on an actual site yet because WordCamp Asia, being sick, being busy at work, life happens. I only heard this week, things were a bit off, and template parts were actually missing from if you had 6.8 Beta 1 running. So there have been some hiccups there as well,

\n\n\n\n

Birgit Pauli-Haack: Yeah. We definitely need to track that down here. So now, there is a persistence. So you could have a show template preferences, but now there are also sport, which is pretty cool. There was a time where you started with a new page, and first you saw all the patterns that are labeled for new pages, page layouts. That modal was removed, and now it’s back. So, it’s a 50/50 thing what people want and what don’t want when they use that. So, that’s also an interesting development.

\n\n\n\n

Jessica Lyschik: I mean, the problem with the modal… I mean, it wasn’t removed. There was an option, because I worked on this part as well. It got an option to be disabled in the settings when you’re on a site where you have to add new pages over and over again, and you know what you want to put on a page. You do not need this modal popping up every time. So, it was more of a user enhancement so that you can decide, “Okay, do I need this model every time or do I just turn it off?” So, there was that part.

\n\n\n\n

I’m not aware if it’s back yet. I heard people saying to remove it completely. But yeah, there’s a lot of different use cases how you would like to… Some people want the model always to be on because they don’t know what they are doing, basically. They just want to pop on a template or a pattern there and are good to go. And there are people who would like to just start writing first. There are people who maybe, want to use it but don’t want to be bothered all the time. It’s one of these things where a lot of different use cases clash together, and then it’s just so hard to actually find what is it, where is the…

\n\n\n\n

Birgit Pauli-Haack: The middle ground there.

\n\n\n\n

Jessica Lyschik: What’s the thing? Where’s the middle ground that we can go and implement it that way? So, kind of everyone or the majority of people is okay with it. There will always be people who are like, “I don’t like this. I want it to be different.”

\n\n\n\n

Birgit Pauli-Haack: Right.

\n\n\n\n

Jessica Lyschik: But that’s basically impossible to make it happen for everyone.

\n\n\n\n

Birgit Pauli-Haack: Right, yeah. Another problem was when you say, “Oh, I don’t want the starter modal,” it was hard to get the layouts, if you wanted, to get to patterns and get the layouts because there was no category for that. So, you had to assemble them from a list of patterns or from multiple pattern categories to put those page layouts together. And I think… I don’t know if it’s here or it was in an earlier version where they restored or created a category for patterns for the starter content. I think that was part of that, or how can we do that better for our users.

\n\n\n\n

So there is now a pop-over on the left-hand side to show post template. If there is one to give you additional options, I think there. The next thing is that pull quote finally has the assignment styles that was missing for a long time. That you couldn’t do left, right and all of that, or wide. So, it has it now. It’s all about persistence. And border control got the reset button.

\n\n\n\n

Jessica Lyschik: Yes. It’s, again, these tiny things that make or break something, or your experience.

\n\n\n\n

Bug Fixes

\n\n\n\n

Birgit Pauli-Haack: Right. And post comments count also have received border support. That’s cool. So now, you can have it stand out some more. Post formats have still be a little bit of a hit-and-miss with the block themes, but sometimes somebody says, “Okay, well let’s fix that some of the things.” And now, you see title and description for post formats in your templates. So in the list of templates, you can now see which are the templates for your image formats, for your link format, and if they are templates for that. So, that’s really cool.

\n\n\n\n

And there’s an interesting bug fix that drove me nuts for a while, was that the text and color picker were overlapping each other in the format library. And that is fixed, thank God. Thank you so much. 

\n\n\n\n

Documentation

\n\n\n\n

And then there are some documents updates. There’s obviously, the problem that a lot of features come in and the documentation hasn’t been updated. So, that has been rectified for the block variations using get_block_type_variationblock. And then also, removes the nodes for block hooks that it only supports static theme elements because that’s not true anymore. Block hooks also support dynamic blocks. All right.

\n\n\n\n

Jessica Lyschik: Yeah, nice.

\n\n\n\n

Birgit Pauli-Haack: So, that was that for 20.4. That was just released this week, and we are recording this on March 7th. Just to say that.

\n\n\n\n

What’s in Active Development & Discussed – WordPress 6.8 Beta                                                       

\n\n\n\n

So, what’s an active development? And discussion brings us to WordPress 6.8 in Beta has been released. Beta 1 has been released. And you can follow along on the WordPress.org announcements or news. So, there will be Beta 1, Beta 2, Beta 3 and Release Candidate 1, 2, and 3 before the final release on April 15th. The test team has published, for the last few releases, always a Help Test, the next release. And this one is not different. There’s Help Test WordPress 6.8, and it helps… Well, you can help making this release the best that it can be. Finding all the bugs, not all of it, but report them. Find as much many. Try to break it as often as you can. Report the bugs.

\n\n\n\n

And I have found another incentive on, actually, heeding to the call for testing is to learn more about the new features because instructions are very well done, compliments to Krupa Nanda, to learn more about the new features or the enhancements and how are they supposed to work so you can distinguish them. So, is it me that I don’t know how this works? That I don’t get it? Or is that a bug? So, they went to great lengths to do that.

\n\n\n\n

You can also use Playground to test things. You don’t have to spin up a new WordPress staging site or something like that to test things. Yeah, you can go to make.wordpress.org/test to find the post or you look for the show notes on the Gutenberg Times and click on that link.

\n\n\n\n

So Jessica, the WordPress 6.8 is characterized as a polished release. Is there anything that stands out for you coming to 6.8 that you’re excited about?

\n\n\n\n

Jessica Lyschik: I do. It’s a polishing that I think is… I mean, as I said before, given the situation that we are in, I think this is the best that we can do. And yeah, I’ve been just scrolling through these Call for Testing blog posts that you just mentioned. And it is really thoroughly, so I would actually be excited to dive into this and do the testing because this is pretty well done.

\n\n\n\n

And I think about 6.8 and the coming releases… I haven’t been paying too much attention to what is in 6.8 apart from a few things that we highlighted today, and I have probably forgotten again because I was just out of the office for two weeks. 

\n\n\n\n

Speculative Loading in 6.8

\n\n\n\n

I think what’s also interesting is this speculative loading thing. I think there was also just a blog post these days. So, this speculative loading is, when I understood correctly, something like a browser? Like, the browser offers this API and WordPress has added its performance improvements. The performance team will probably come after me if I do not say this correctly. But from what I understood, it’s improving overall performance of a WordPress website by using these speculation rules. So it’s about what can be prefetched or what makes sense to be prefetched next, so that when you actually click on a link on the website, it loads faster because it already knows what I have, what the browser has to load in this case.

\n\n\n\n

I think this is something very interesting that might be bumping up the performance of a few websites. So, that will be interesting to see what the actual impact will be once 6.8 is out.

\n\n\n\n

Birgit Pauli-Haack: Yeah, I’m excited about that too. I think the browsers are now pretty well caught up with that. Not all browsers have all the features all the time, but this is something that, I think, has a big footprint around all the browsers being Firefox, Safari, Google Chrome.

\n\n\n\n

I link in the show notes too, Felix Arntz has published… Has worked on this feature, in the feature plugin before. And now, it’s coming to 6.8 and the dev note has been published now.

\n\n\n\n

Jessica Lyschik: I just checked on Can I Use, and it’s actually Safari and Firefox do not support it at the moment. Chrome, Edge, and Opera do. So, there is still a bit of a… It’s not a hundred percent on all browsers, but a good chunk of browsers already support this. So I hope these other browsers, Safari and Firefox, will catch up on this because it sounds pretty promising from a performance point of view to use these speculation rules.

\n\n\n\n

Birgit Pauli-Haack: I keep scrolling through the dev notes that have been published. They’re not in bulk coming out until Release Candidate 1, but John Blackburn also published a dev notes about the new encryption for the password hashing.

\n\n\n\n

Jessica Lyschik: Oh. Yes, I forgot this one.

\n\n\n\n

Birgit Pauli-Haack: Which there’s not a whole lot of things for users to do or even for developers. It’s just to know that the passwords are now hashed differently and increase the security of any of the passwords quite exponentially, which is really good. So, thank you for Felix and John to publish the dev notes early for that.

\n\n\n\n

All right, I’m sure we are going to talk about WordPress 6.8 some more on our next show when we know a little bit more what’s in there and what’s not in there. Thank you so much, Jessica, for being here. As always, the show notes will be published on GutenbergTimes.com/podcast. This is episode 115. And if you have questions and suggestions, just send them to Changelog@GutenbergTimes.com.

\n\n\n\n

And now, a plea for all those who use Spotify for their podcast pleasure, you can leave comments there. And also, check some of the stars so people know what they can expect on the show when they discover that on Spotify. Shopify. Well, yeah. So, thanks for listening and goodbye until the next time. Thank you, Jessica.

\n\n\n\n

Jessica Lyschik: Thank you. Bye.

\n\n\n\n

Birgit Pauli-Haack: Bye.

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sun, 09 Mar 2025 09:21:58 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:49;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:29:\"Matt: Real WordPress Security\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140118\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:46:\"https://ma.tt/2025/03/real-wordpress-security/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2753:\"

One thing you’ll see on every host that offers WordPress is claims about how secure they are, however they don’t put their money where their mouth is. When you dig deeper, if your site actually gets hacked they’ll hit you with remediation fees that can go from hundreds to thousands of dollars.

\n\n\n\n

They may try to sell you a security plan that for example at Godaddy goes from $300 to $700 a year on top of your hosting. (Don’t be fooled by the low entry price, look at renewal.) It’s heartbreaking to hear stories of non-technical people forced into these high fees to fix something their host should have prevented in the first place.

\n\n\n\n

When a host is powered by WP.cloud, it doesn’t need to do this because hacks are so incredibly rare. (That’s why it may appear more expensive, but the total cost of ownership or being a WP.cloud-powered host is much lower when you factor in human time.)

\n\n\n\n

One problem we’ve had on WordPress.com is we do all these amazing things and don’t tell anyone about it, something we’re trying to change with our focus this year on developers and developer tooling. One great example is we’re so confident about our security, if your site gets hacked we’ll fix it for free! We’ve actually been doing this for the better part of a decade, just never mentioned it anywhere.

\n\n\n\n

Pressable (which is WP.cloud-powered) does a better job talking about these things and has a nice landing page on malware cleaning and hack recovery that says essentially the same thing.

\n\n\n\n

WordPress has done a ton over the years to move the hosting industry around upgrading PHP and MySQL, PHP extensions, free SSL, and in general using our clout to advocate for user rights and freedoms from even the largest hosting companies, and I’m proud to say there are a good number, for example the ones you see at WordCamps, that have not just embraced these values but actually been more commercially successful as they’ve done so. I hope security and auto-upgrades not just for core but for plugins and themes becomes the next standard. (Jetpack does this for free, some hosts charge $100/yr per site.)

\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 08 Mar 2025 11:07:49 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}}}}}}}}}}s:4:\"type\";i:128;s:7:\"headers\";O:48:\"WpOrg\\Requests\\Utility\\CaseInsensitiveDictionary\":1:{s:7:\"\0*\0data\";a:9:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Tue, 01 Apr 2025 10:13:41 GMT\";s:12:\"content-type\";s:8:\"text/xml\";s:13:\"last-modified\";s:29:\"Tue, 01 Apr 2025 10:00:31 GMT\";s:4:\"vary\";s:15:\"Accept-Encoding\";s:15:\"x-frame-options\";s:10:\"SAMEORIGIN\";s:16:\"content-encoding\";s:2:\"br\";s:7:\"alt-svc\";s:19:\"h3=\":443\"; ma=86400\";s:4:\"x-nc\";s:9:\"HIT ord 1\";}}s:5:\"build\";i:1743023515;s:21:\"cache_expiration_time\";i:1743545621;s:23:\"__cache_expiration_time\";i:1743545621;}','off'),(187,'_transient_timeout_dash_v2_88ae138922fe95674369b1cb3d215a2b','1743545621','off'),(188,'_transient_dash_v2_88ae138922fe95674369b1cb3d215a2b','','off'); +/*!40000 ALTER TABLE `wp_2_options` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_postmeta` +-- + +DROP TABLE IF EXISTS `wp_2_postmeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_postmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `post_id` (`post_id`), + KEY `meta_key` (`meta_key`(191)) +) ENGINE=InnoDB AUTO_INCREMENT=149 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_postmeta` +-- + +LOCK TABLES `wp_2_postmeta` WRITE; +/*!40000 ALTER TABLE `wp_2_postmeta` DISABLE KEYS */; +INSERT INTO `wp_2_postmeta` VALUES (1,2,'_wp_page_template','default'),(2,5,'_edit_lock','1743168856:1'),(3,5,'_edit_last','1'),(4,6,'_edit_lock','1743178464:1'),(5,6,'_edit_last','1'),(6,11,'_edit_lock','1742996895:1'),(9,14,'days_of_the_week','a:5:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:6:\"Friday\";}'),(11,16,'days_of_the_week','a:3:{i:0;s:6:\"Monday\";i:1;s:7:\"Tuesday\";i:2;s:9:\"Wednesday\";}'),(12,17,'days_of_the_week','a:7:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:8:\"Thursday\";i:5;s:6:\"Friday\";i:6;s:8:\"Saturday\";}'),(13,17,'days_of_the_week','a:7:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:8:\"Thursday\";i:5;s:6:\"Friday\";i:6;s:8:\"Saturday\";}'),(14,18,'days_of_the_week','a:5:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:6:\"Friday\";}'),(15,19,'days_of_the_week','a:2:{i:0;s:6:\"Friday\";i:1;s:8:\"Saturday\";}'),(16,20,'days_of_the_week','a:7:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:8:\"Thursday\";i:5;s:6:\"Friday\";i:6;s:8:\"Saturday\";}'),(17,21,'days_of_the_week','a:5:{i:0;s:6:\"Monday\";i:1;s:7:\"Tuesday\";i:2;s:9:\"Wednesday\";i:3;s:8:\"Thursday\";i:4;s:6:\"Friday\";}'),(18,22,'days_of_the_week','a:6:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:8:\"Thursday\";i:5;s:6:\"Friday\";}'),(19,23,'days_of_the_week','a:7:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:8:\"Thursday\";i:5;s:6:\"Friday\";i:6;s:8:\"Saturday\";}'),(20,24,'days_of_the_week','a:3:{i:0;s:8:\"Thursday\";i:1;s:6:\"Friday\";i:2;s:8:\"Saturday\";}'),(22,14,'_edit_lock','1743190265:1'),(24,14,'_edit_last','1'),(25,14,'_days_of_the_week','field_67e403c74419c'),(26,14,'screentimes','12:00,16:00,20:15'),(27,14,'_screentimes','field_67e40503b4dc1'),(28,2,'_edit_lock','1743443071:1'),(29,27,'_wp_attached_file','2025/03/photo-1506466010722-395aa2bef877.jpeg'),(30,27,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:2000;s:6:\"height\";i:1127;s:4:\"file\";s:45:\"2025/03/photo-1506466010722-395aa2bef877.jpeg\";s:8:\"filesize\";i:899585;s:5:\"sizes\";a:5:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1506466010722-395aa2bef877-300x169.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:169;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:21587;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1506466010722-395aa2bef877-1024x577.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:577;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:156611;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1506466010722-395aa2bef877-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11777;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1506466010722-395aa2bef877-768x433.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:433;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:97879;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:46:\"photo-1506466010722-395aa2bef877-1536x866.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:866;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:302739;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(31,27,'_wp_attachment_image_alt','The Shire'),(32,27,'_oembed_84aaa093a6ac10a5dc3ca0c9d4f41353','{{unknown}}'),(36,14,'_thumbnail_id','27'),(37,24,'_edit_lock','1743014207:1'),(38,24,'_acf_changed','1'),(39,24,'_edit_last','1'),(40,24,'_days_of_the_week','field_67e403c74419c'),(41,24,'screentimes','14:00,20:45'),(42,24,'_screentimes','field_67e40503b4dc1'),(43,29,'_wp_attached_file','2025/03/photo-1563278689-3519903a3e97.jpeg'),(44,29,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:2000;s:6:\"height\";i:1500;s:4:\"file\";s:42:\"2025/03/photo-1563278689-3519903a3e97.jpeg\";s:8:\"filesize\";i:875834;s:5:\"sizes\";a:5:{s:6:\"medium\";a:5:{s:4:\"file\";s:42:\"photo-1563278689-3519903a3e97-300x225.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:225;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11107;}s:5:\"large\";a:5:{s:4:\"file\";s:43:\"photo-1563278689-3519903a3e97-1024x768.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:768;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:111040;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:42:\"photo-1563278689-3519903a3e97-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:4867;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:42:\"photo-1563278689-3519903a3e97-768x576.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:576;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:57445;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:44:\"photo-1563278689-3519903a3e97-1536x1152.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:290047;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(45,29,'_wp_attachment_image_alt','Cuckoo'),(46,29,'_oembed_362b7e10ba1a908c0cb49ff832e710b2','{{unknown}}'),(47,24,'_thumbnail_id','29'),(48,23,'_edit_lock','1743190263:1'),(50,23,'_acf_changed','1'),(51,23,'_edit_last','1'),(52,23,'_days_of_the_week','field_67e403c74419c'),(53,23,'screentimes','14:00,16:00,19:45'),(54,23,'_screentimes','field_67e40503b4dc1'),(55,31,'_wp_attached_file','2025/03/photo-1654787193446-434ac0108426.jpeg'),(56,31,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1600;s:6:\"height\";i:2000;s:4:\"file\";s:45:\"2025/03/photo-1654787193446-434ac0108426.jpeg\";s:8:\"filesize\";i:958883;s:5:\"sizes\";a:5:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1654787193446-434ac0108426-240x300.jpeg\";s:5:\"width\";i:240;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:18657;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1654787193446-434ac0108426-819x1024.jpeg\";s:5:\"width\";i:819;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:143226;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1654787193446-434ac0108426-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:7595;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1654787193446-434ac0108426-768x960.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:960;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:126823;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1654787193446-434ac0108426-1229x1536.jpeg\";s:5:\"width\";i:1229;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:294882;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(57,31,'_wp_attachment_image_alt','Back to the Future'),(58,31,'_oembed_f2701e9ef8cff74d16ba89bd15aa90f8','{{unknown}}'),(59,23,'_thumbnail_id','31'),(60,22,'_edit_lock','1743013549:1'),(61,22,'_acf_changed',''),(62,22,'_edit_last','1'),(63,22,'_days_of_the_week','field_67e403c74419c'),(64,22,'screentimes','14:00,16:00,19:45'),(65,22,'_screentimes','field_67e40503b4dc1'),(66,32,'_wp_attached_file','2025/03/photo-1598182198871-d3f4ab4fd181.jpeg'),(67,32,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1900;s:6:\"height\";i:1267;s:4:\"file\";s:45:\"2025/03/photo-1598182198871-d3f4ab4fd181.jpeg\";s:8:\"filesize\";i:592246;s:5:\"sizes\";a:5:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1598182198871-d3f4ab4fd181-300x200.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:16303;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1598182198871-d3f4ab4fd181-1024x683.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:95063;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1598182198871-d3f4ab4fd181-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:10898;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1598182198871-d3f4ab4fd181-768x512.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:60863;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1598182198871-d3f4ab4fd181-1536x1024.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:179073;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(68,32,'_wp_attachment_image_alt','Cheesburger'),(69,32,'_oembed_38bc2c13838142c6e8376d4495a150a9','{{unknown}}'),(70,22,'_thumbnail_id','32'),(71,21,'_edit_lock','1743013743:1'),(73,21,'_edit_last','1'),(74,21,'_days_of_the_week','field_67e403c74419c'),(75,21,'screentimes','14:00,16:00'),(76,21,'_screentimes','field_67e40503b4dc1'),(80,34,'_wp_attached_file','2025/03/photo-1535905557558-afc4877a26fc.jpeg'),(81,34,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1500;s:6:\"height\";i:2250;s:4:\"file\";s:45:\"2025/03/photo-1535905557558-afc4877a26fc.jpeg\";s:8:\"filesize\";i:827239;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1535905557558-afc4877a26fc-200x300.jpeg\";s:5:\"width\";i:200;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:14415;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1535905557558-afc4877a26fc-683x1024.jpeg\";s:5:\"width\";i:683;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:112580;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1535905557558-afc4877a26fc-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:6762;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:46:\"photo-1535905557558-afc4877a26fc-768x1152.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:136093;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1535905557558-afc4877a26fc-1024x1536.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:216415;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1535905557558-afc4877a26fc-1365x2048.jpeg\";s:5:\"width\";i:1365;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:338306;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(82,34,'_wp_attachment_image_alt','Library'),(84,34,'_oembed_23e5ba47427d304534bb615f94151646','{{unknown}}'),(85,21,'_thumbnail_id','34'),(86,14,'_acf_changed','1'),(87,20,'_edit_lock','1743013914:1'),(89,20,'_edit_last','1'),(90,20,'_days_of_the_week','field_67e403c74419c'),(91,20,'screentimes','15:15'),(92,20,'_screentimes','field_67e40503b4dc1'),(93,36,'_wp_attached_file','2025/03/photo-1568994660719-e69438848e42.jpeg'),(94,36,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1400;s:6:\"height\";i:2108;s:4:\"file\";s:45:\"2025/03/photo-1568994660719-e69438848e42.jpeg\";s:8:\"filesize\";i:1031515;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1568994660719-e69438848e42-199x300.jpeg\";s:5:\"width\";i:199;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:14542;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1568994660719-e69438848e42-680x1024.jpeg\";s:5:\"width\";i:680;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:92035;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1568994660719-e69438848e42-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:9385;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:46:\"photo-1568994660719-e69438848e42-768x1156.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1156;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:115314;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1568994660719-e69438848e42-1020x1536.jpeg\";s:5:\"width\";i:1020;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:201887;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1568994660719-e69438848e42-1360x2048.jpeg\";s:5:\"width\";i:1360;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:361967;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(95,36,'_wp_attachment_image_alt','Casablanca'),(96,36,'_oembed_7d1831e0de67ac20ace5b70fbf48177e','{{unknown}}'),(100,20,'_thumbnail_id','36'),(101,19,'_edit_lock','1743014065:1'),(102,38,'_wp_attached_file','2025/03/photo-1523365154888-8a758819b722.jpeg'),(103,38,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1500;s:6:\"height\";i:1002;s:4:\"file\";s:45:\"2025/03/photo-1523365154888-8a758819b722.jpeg\";s:8:\"filesize\";i:804850;s:5:\"sizes\";a:4:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1523365154888-8a758819b722-300x200.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:19471;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1523365154888-8a758819b722-1024x684.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:684;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:170697;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1523365154888-8a758819b722-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:10296;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1523365154888-8a758819b722-768x513.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:513;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:98938;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(104,38,'_wp_attachment_image_alt','Sicily'),(105,38,'_oembed_616b57a37fcd592fd28b51be8a8dd89d','{{unknown}}'),(106,19,'_thumbnail_id','38'),(107,19,'_acf_changed','1'),(108,19,'_edit_last','1'),(109,19,'_days_of_the_week','field_67e403c74419c'),(110,19,'screentimes','18:00. 20:30'),(111,19,'_screentimes','field_67e40503b4dc1'),(112,18,'_edit_lock','1743014164:1'),(114,40,'_wp_attached_file','2025/03/photo-1588638873763-12aa3abac949.jpeg'),(115,40,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1700;s:6:\"height\";i:1133;s:4:\"file\";s:45:\"2025/03/photo-1588638873763-12aa3abac949.jpeg\";s:8:\"filesize\";i:941258;s:5:\"sizes\";a:5:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1588638873763-12aa3abac949-300x200.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:21976;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1588638873763-12aa3abac949-1024x682.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:682;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:171119;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1588638873763-12aa3abac949-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11833;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1588638873763-12aa3abac949-768x512.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:102463;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1588638873763-12aa3abac949-1536x1024.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:348317;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(116,40,'_wp_attachment_image_alt','Notting Hill Bookshop'),(117,40,'_oembed_d5d371b1060e2b3cd75f9c146593609a','{{unknown}}'),(118,18,'_thumbnail_id','40'),(119,18,'_acf_changed','1'),(120,18,'_edit_last','1'),(121,18,'_days_of_the_week','field_67e403c74419c'),(122,18,'screentimes','14:00,16:00,19:45'),(123,18,'_screentimes','field_67e40503b4dc1'),(124,17,'_edit_lock','1743014284:1'),(125,17,'_acf_changed','1'),(126,17,'_edit_last','1'),(127,17,'_days_of_the_week','field_67e403c74419c'),(128,17,'screentimes','18:30'),(129,17,'_screentimes','field_67e40503b4dc1'),(130,41,'_wp_attached_file','2025/03/photo-1581013229140-6b76f8f70224.jpeg'),(131,41,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1667;s:6:\"height\";i:2500;s:4:\"file\";s:45:\"2025/03/photo-1581013229140-6b76f8f70224.jpeg\";s:8:\"filesize\";i:629120;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1581013229140-6b76f8f70224-200x300.jpeg\";s:5:\"width\";i:200;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:6440;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1581013229140-6b76f8f70224-683x1024.jpeg\";s:5:\"width\";i:683;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:47007;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1581013229140-6b76f8f70224-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:3464;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:46:\"photo-1581013229140-6b76f8f70224-768x1152.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:57829;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1581013229140-6b76f8f70224-1024x1536.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:96919;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1581013229140-6b76f8f70224-1366x2048.jpeg\";s:5:\"width\";i:1366;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:164893;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(132,41,'_wp_attachment_image_alt','Phone booth'),(133,41,'_oembed_f5a538c6b7a52cfde68610d05e96bdfe','{{unknown}}'),(134,17,'_thumbnail_id','41'),(135,16,'_edit_lock','1743014336:1'),(136,16,'_acf_changed','1'),(137,16,'_edit_last','1'),(138,16,'_days_of_the_week','field_67e403c74419c'),(139,16,'screentimes','14:00,16:00,19:45'),(140,16,'_screentimes','field_67e40503b4dc1'),(147,42,'_edit_lock','1743443238:1'),(148,43,'_edit_lock','1743441270:1'); +/*!40000 ALTER TABLE `wp_2_postmeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_posts` +-- + +DROP TABLE IF EXISTS `wp_2_posts`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_posts` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_author` bigint(20) unsigned NOT NULL DEFAULT 0, + `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content` longtext NOT NULL, + `post_title` text NOT NULL, + `post_excerpt` text NOT NULL, + `post_status` varchar(20) NOT NULL DEFAULT 'publish', + `comment_status` varchar(20) NOT NULL DEFAULT 'open', + `ping_status` varchar(20) NOT NULL DEFAULT 'open', + `post_password` varchar(255) NOT NULL DEFAULT '', + `post_name` varchar(200) NOT NULL DEFAULT '', + `to_ping` text NOT NULL, + `pinged` text NOT NULL, + `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content_filtered` longtext NOT NULL, + `post_parent` bigint(20) unsigned NOT NULL DEFAULT 0, + `guid` varchar(255) NOT NULL DEFAULT '', + `menu_order` int(11) NOT NULL DEFAULT 0, + `post_type` varchar(20) NOT NULL DEFAULT 'post', + `post_mime_type` varchar(100) NOT NULL DEFAULT '', + `comment_count` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`ID`), + KEY `post_name` (`post_name`(191)), + KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), + KEY `post_parent` (`post_parent`), + KEY `post_author` (`post_author`) +) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_posts` +-- + +LOCK TABLES `wp_2_posts` WRITE; +/*!40000 ALTER TABLE `wp_2_posts` DISABLE KEYS */; +INSERT INTO `wp_2_posts` VALUES (1,1,'2025-03-25 18:23:51','2025-03-25 18:23:51','Welcome to client-multisite-app-router-fetch-data Sites. This is your first post. Edit or delete it, then start writing!','Hello world!','','publish','open','open','','hello-world','','','2025-03-25 18:23:51','2025-03-25 18:23:51','',0,'http://localhost:8888/recipes/?p=1',0,'post','',1),(2,1,'2025-03-25 18:23:51','2025-03-25 18:23:51','\n

This is a sample headless site for https://github.com/wpengine/hwptoolkit

\n\n\n\n

Content was generated by AI and images from https://unsplash.com/

\n','Sample Page','','publish','closed','open','','sample-page','','','2025-03-26 14:04:23','2025-03-26 14:04:23','',0,'http://localhost:8888/recipes/?page_id=2',0,'page','',0),(3,1,'2025-03-25 18:45:27','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2025-03-25 18:45:27','0000-00-00 00:00:00','',0,'http://localhost:8888/recipes/?p=3',0,'post','',0),(4,1,'2025-03-25 18:45:36','2025-03-25 18:45:36','','Navigation','','publish','closed','closed','','navigation','','','2025-03-25 18:45:36','2025-03-25 18:45:36','',0,'http://localhost:8888/recipes/navigation/',0,'wp_navigation','',0),(5,1,'2025-03-26 13:31:42','2025-03-26 13:31:42','a:38:{s:9:\"post_type\";s:5:\"movie\";s:22:\"advanced_configuration\";b:1;s:13:\"import_source\";s:0:\"\";s:11:\"import_date\";s:0:\"\";s:6:\"labels\";a:33:{s:4:\"name\";s:6:\"Movies\";s:13:\"singular_name\";s:5:\"Movie\";s:9:\"menu_name\";s:6:\"Movies\";s:9:\"all_items\";s:10:\"All Movies\";s:9:\"edit_item\";s:10:\"Edit movie\";s:9:\"view_item\";s:10:\"View movie\";s:10:\"view_items\";s:11:\"View Movies\";s:12:\"add_new_item\";s:13:\"Add New Movie\";s:7:\"add_new\";s:13:\"Add New Movie\";s:8:\"new_item\";s:9:\"New Movie\";s:17:\"parent_item_colon\";s:13:\"Parent movie:\";s:12:\"search_items\";s:13:\"Search Movies\";s:9:\"not_found\";s:15:\"No movies found\";s:18:\"not_found_in_trash\";s:24:\"No movies found in Trash\";s:8:\"archives\";s:14:\"movie Archives\";s:10:\"attributes\";s:16:\"movie Attributes\";s:14:\"featured_image\";s:0:\"\";s:18:\"set_featured_image\";s:0:\"\";s:21:\"remove_featured_image\";s:0:\"\";s:18:\"use_featured_image\";s:0:\"\";s:16:\"insert_into_item\";s:17:\"Insert into movie\";s:21:\"uploaded_to_this_item\";s:22:\"Uploaded to this movie\";s:17:\"filter_items_list\";s:19:\"Filter recipes list\";s:14:\"filter_by_date\";s:22:\"Filter recipes by date\";s:21:\"items_list_navigation\";s:23:\"Recipes list navigation\";s:10:\"items_list\";s:12:\"Recipes list\";s:14:\"item_published\";s:16:\"movie published.\";s:24:\"item_published_privately\";s:26:\"movie published privately.\";s:22:\"item_reverted_to_draft\";s:24:\"movie reverted to draft.\";s:14:\"item_scheduled\";s:16:\"movie scheduled.\";s:12:\"item_updated\";s:14:\"movie updated.\";s:9:\"item_link\";s:10:\"movie Link\";s:21:\"item_link_description\";s:18:\"A link to a movie.\";}s:11:\"description\";s:0:\"\";s:6:\"public\";b:1;s:12:\"hierarchical\";b:0;s:19:\"exclude_from_search\";b:0;s:18:\"publicly_queryable\";b:1;s:7:\"show_ui\";b:1;s:12:\"show_in_menu\";b:1;s:17:\"admin_menu_parent\";s:0:\"\";s:17:\"show_in_admin_bar\";b:1;s:17:\"show_in_nav_menus\";b:1;s:12:\"show_in_rest\";b:1;s:9:\"rest_base\";s:0:\"\";s:14:\"rest_namespace\";s:5:\"wp/v2\";s:21:\"rest_controller_class\";s:24:\"WP_REST_Posts_Controller\";s:13:\"menu_position\";s:0:\"\";s:9:\"menu_icon\";a:2:{s:4:\"type\";s:9:\"dashicons\";s:5:\"value\";s:20:\"dashicons-admin-post\";}s:19:\"rename_capabilities\";b:0;s:24:\"singular_capability_name\";s:4:\"post\";s:22:\"plural_capability_name\";s:5:\"posts\";s:8:\"supports\";a:4:{i:0;s:5:\"title\";i:1;s:6:\"editor\";i:2;s:9:\"thumbnail\";i:3;s:13:\"custom-fields\";}s:10:\"taxonomies\";s:0:\"\";s:11:\"has_archive\";b:0;s:16:\"has_archive_slug\";s:0:\"\";s:7:\"rewrite\";a:4:{s:17:\"permalink_rewrite\";s:13:\"post_type_key\";s:10:\"with_front\";s:1:\"1\";s:5:\"feeds\";s:1:\"0\";s:5:\"pages\";s:1:\"1\";}s:9:\"query_var\";s:13:\"post_type_key\";s:14:\"query_var_name\";s:0:\"\";s:10:\"can_export\";b:1;s:16:\"delete_with_user\";b:0;s:20:\"register_meta_box_cb\";s:0:\"\";s:16:\"enter_title_here\";s:0:\"\";s:15:\"show_in_graphql\";i:1;s:19:\"graphql_single_name\";s:5:\"movie\";s:19:\"graphql_plural_name\";s:6:\"movies\";}','Movies','movies','publish','closed','closed','','post_type_67e40126165b3','','','2025-03-28 13:34:39','2025-03-28 13:34:39','',0,'http://localhost:8888/recipes/?post_type=acf-post-type&p=5',0,'acf-post-type','',0),(6,1,'2025-03-26 13:35:56','2025-03-26 13:35:56','a:12:{s:8:\"location\";a:1:{i:0;a:1:{i:0;a:3:{s:5:\"param\";s:9:\"post_type\";s:8:\"operator\";s:2:\"==\";s:5:\"value\";s:5:\"movie\";}}}s:8:\"position\";s:6:\"normal\";s:5:\"style\";s:7:\"default\";s:15:\"label_placement\";s:3:\"top\";s:21:\"instruction_placement\";s:5:\"label\";s:14:\"hide_on_screen\";s:0:\"\";s:11:\"description\";s:0:\"\";s:12:\"show_in_rest\";i:0;s:15:\"show_in_graphql\";i:1;s:18:\"graphql_field_name\";s:14:\"movieShowTimes\";s:37:\"map_graphql_types_from_location_rules\";i:0;s:13:\"graphql_types\";s:0:\"\";}','Movie Showtimes','movie-showtimes','publish','closed','closed','','group_67e402b2dce86','','','2025-03-28 16:16:43','2025-03-28 16:16:43','',0,'http://localhost:8888/movies/?post_type=acf-field-group&p=6',0,'acf-field-group','',0),(9,1,'2025-03-26 13:45:35','2025-03-26 13:45:35','a:19:{s:10:\"aria-label\";s:0:\"\";s:4:\"type\";s:8:\"checkbox\";s:12:\"instructions\";s:0:\"\";s:8:\"required\";i:1;s:17:\"conditional_logic\";i:0;s:7:\"wrapper\";a:3:{s:5:\"width\";s:0:\"\";s:5:\"class\";s:0:\"\";s:2:\"id\";s:0:\"\";}s:7:\"choices\";a:7:{s:6:\"Sunday\";s:6:\"Sunday\";s:6:\"Monday\";s:6:\"Monday\";s:7:\"Tuesday\";s:7:\"Tuesday\";s:9:\"Wednesday\";s:9:\"Wednesday\";s:8:\"Thursday\";s:8:\"Thursday\";s:6:\"Friday\";s:6:\"Friday\";s:8:\"Saturday\";s:8:\"Saturday\";}s:13:\"default_value\";a:7:{i:0;s:6:\"Sunday\";i:1;s:6:\"Monday\";i:2;s:7:\"Tuesday\";i:3;s:9:\"Wednesday\";i:4;s:8:\"Thursday\";i:5;s:6:\"Friday\";i:6;s:8:\"Saturday\";}s:13:\"return_format\";s:5:\"value\";s:12:\"allow_custom\";i:0;s:17:\"allow_in_bindings\";i:0;s:6:\"layout\";s:8:\"vertical\";s:6:\"toggle\";i:0;s:15:\"show_in_graphql\";i:1;s:19:\"graphql_description\";s:0:\"\";s:18:\"graphql_field_name\";s:13:\"daysOfTheWeek\";s:16:\"graphql_non_null\";i:0;s:11:\"save_custom\";i:0;s:25:\"custom_choice_button_text\";s:14:\"Add new choice\";}','Days of the week','days_of_the_week','publish','closed','closed','','field_67e403c74419c','','','2025-03-26 13:45:35','2025-03-26 13:45:35','',6,'http://localhost:8888/movies/?post_type=acf-field&p=9',0,'acf-field','',0),(10,1,'2025-03-26 13:47:05','2025-03-26 13:47:05','a:16:{s:10:\"aria-label\";s:0:\"\";s:4:\"type\";s:4:\"text\";s:12:\"instructions\";s:68:\"A comma list of screen times in 24 hour time format e.g. 14:00,16:00\";s:8:\"required\";i:1;s:17:\"conditional_logic\";i:0;s:7:\"wrapper\";a:3:{s:5:\"width\";s:0:\"\";s:5:\"class\";s:0:\"\";s:2:\"id\";s:0:\"\";}s:13:\"default_value\";s:17:\"14:00,16:00,19:45\";s:9:\"maxlength\";s:0:\"\";s:17:\"allow_in_bindings\";i:0;s:11:\"placeholder\";s:0:\"\";s:7:\"prepend\";s:0:\"\";s:6:\"append\";s:0:\"\";s:15:\"show_in_graphql\";i:1;s:19:\"graphql_description\";s:0:\"\";s:18:\"graphql_field_name\";s:11:\"screenTimes\";s:16:\"graphql_non_null\";i:0;}','Screen Times','screentimes','publish','closed','closed','','field_67e40503b4dc1','','','2025-03-28 16:16:43','2025-03-28 16:16:43','',6,'http://localhost:8888/movies/?post_type=acf-field&p=10',1,'acf-field','',0),(11,1,'2025-03-26 13:47:28','0000-00-00 00:00:00','','Auto Draft','','auto-draft','closed','closed','','','','','2025-03-26 13:47:28','0000-00-00 00:00:00','',0,'http://localhost:8888/movies/?post_type=movie&p=11',0,'movie','',0),(12,1,'2025-03-26 13:47:28','2025-03-26 13:47:28','{\"version\": 3, \"isGlobalStylesUserThemeJSON\": true }','Custom Styles','','publish','closed','closed','','wp-global-styles-twentytwentyfive','','','2025-03-26 13:47:28','2025-03-26 13:47:28','',0,'http://localhost:8888/movies/wp-global-styles-twentytwentyfive/',0,'wp_global_styles','',0),(14,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

The first installment of the epic fantasy trilogy. The Fellowship of the Ring is the first installment of The Lord of the Rings, J.R.R. Tolkien’s legendary epic fantasy trilogy. Set in the vast and richly detailed world of Middle-earth, the story follows Frodo Baggins, a humble hobbit from the peaceful land of the Shire, who unexpectedly inherits the One Ring—a powerful and malevolent artifact created by the Dark Lord Sauron. Tasked with destroying the Ring to prevent Sauron’s return to power, Frodo embarks on a perilous journey, joined by a diverse group of companions known as the Fellowship of the Ring.

\n\n\n\n

As their journey unfolds, the Fellowship encounters breathtaking landscapes, ancient ruins, and formidable adversaries, from the shadowed halls of Moria to the enchanted woods of Lothlórien. Along the way, alliances are tested, and the weight of the Ring begins to take its toll on Frodo. With Sauron’s forces growing ever closer, the companions must navigate betrayal, temptation, and the ever-looming presence of darkness. The Fellowship of the Ring lays the foundation for an epic battle between good and evil, setting the stage for the legendary journey that will determine the fate of Middle-earth.

\n','The Lord of the Rings: The Fellowship of the Ring','','publish','closed','closed','','the-lord-of-the-rings-the-fellowship-of-the-ring','','','2025-03-26 18:29:25','2025-03-26 18:29:25','',0,'http://localhost:8888/movies/movie/the-lord-of-the-rings-the-fellowship-of-the-ring/',0,'movie','',0),(16,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

The Dark Knight is a 2008 superhero crime thriller directed by Christopher Nolan, starring Christian Bale as Batman, Heath Ledger as the Joker, and Aaron Eckhart as Harvey Dent. Set in Gotham City, the film follows Batman’s struggle to dismantle organized crime while facing a new and unpredictable threat—the Joker, a chaotic mastermind who seeks to plunge the city into anarchy.

\n\n\n\n

As Batman, alongside police lieutenant Jim Gordon (Gary Oldman) and district attorney Harvey Dent, works to restore order, the Joker unleashes a reign of terror, testing the moral limits of Gotham’s defenders. Meanwhile, Dent’s tragic transformation into the vengeful Two-Face highlights the film’s exploration of justice, corruption, and the fine line between heroism and villainy. Ledger’s haunting performance as the Joker, filled with chilling unpredictability and iconic lines like \"Why so serious?\", became one of the most celebrated portrayals of a villain in film history.

\n\n\n\n

With its gripping narrative, intense action, and deep philosophical themes, The Dark Knight redefined the superhero genre. It was both a critical and commercial success, earning over $1 billion worldwide and securing Ledger a posthumous Academy Award for Best Supporting Actor. Considered one of the greatest films of all time, it remains a benchmark for storytelling in modern cinema.

\n','The Dark Knight','','publish','closed','closed','','the-dark-knight','','','2025-03-26 18:38:55','2025-03-26 18:38:55','',0,'http://localhost:8888/movies/movie/the-dark-knight/',0,'movie','',0),(17,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

The Matrix is a 1999 sci-fi action film directed by the Wachowskis, starring Keanu Reeves, Laurence Fishburne, Carrie-Anne Moss, and Hugo Weaving. The film follows Thomas Anderson (Reeves), a computer hacker known as \"Neo,\" who discovers that the world he knows is an elaborate simulation called the Matrix, controlled by intelligent machines that have enslaved humanity. Guided by the enigmatic Morpheus (Fishburne) and the skilled warrior Trinity (Moss), Neo embarks on a journey to uncover the truth and fight against the oppressive system.

\n\n\n\n

As Neo learns to manipulate the rules of the Matrix, he faces relentless pursuit by Agent Smith (Weaving), a powerful AI enforcer determined to eliminate him. Along the way, he must confront his own doubts and embrace the possibility that he is \"The One\"—a prophesied savior destined to free humanity. With groundbreaking visual effects, including the iconic \"bullet time\" sequences, and deep philosophical themes exploring reality, free will, and artificial intelligence, The Matrix revolutionized the sci-fi and action genres.

\n\n\n\n

A critical and commercial success, The Matrix became a cultural phenomenon, influencing countless films, video games, and discussions about technology and reality. Its legacy continues with sequels, spin-offs, and ongoing philosophical debates, solidifying it as one of the most innovative and thought-provoking films in cinematic history.

\n','The Matrix','','publish','closed','closed','','the-matrix','','','2025-03-26 18:38:03','2025-03-26 18:38:03','',0,'http://localhost:8888/movies/movie/the-matrix/',0,'movie','',0),(18,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

Notting Hill is a 1999 romantic comedy directed by Roger Michell, starring Julia Roberts and Hugh Grant. Set in the charming London neighborhood of Notting Hill, the film follows the unexpected romance between William Thacker (Grant), a humble, bookish travel bookshop owner, and Anna Scott (Roberts), a world-famous Hollywood actress. Their paths cross when Anna visits William’s shop, leading to a series of chance encounters that blossom into a heartfelt and unlikely love story.

\n\n\n\n

As their relationship develops, William struggles to reconcile his ordinary life with Anna’s glamorous and highly scrutinized celebrity world. The couple faces obstacles, including relentless media attention and personal insecurities, forcing them to question whether love alone is enough to bridge the gap between their vastly different lives. The film’s witty dialogue, charming chemistry between its leads, and memorable moments—such as Anna’s iconic \"I\'m just a girl, standing in front of a boy, asking him to love her\" line—have made it a beloved classic.

\n\n\n\n

With its warm humor, endearing characters, and heartfelt romance, Notting Hill remains one of the most iconic romantic comedies of all time. Its blend of fairy-tale love and real-world complications continues to captivate audiences, cementing its place as a timeless favorite in the genre.

\n','Notting Hill','','publish','closed','closed','','notting-hill','','','2025-03-26 18:36:04','2025-03-26 18:36:04','',0,'http://localhost:8888/movies/movie/notting-hill/',0,'movie','',0),(19,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

The Godfather is a 1972 crime drama directed by Francis Ford Coppola, based on Mario Puzo’s novel of the same name. Starring Marlon Brando, Al Pacino, and James Caan, the film follows the powerful Corleone crime family and their struggles to maintain control in the world of organized crime. At the heart of the story is Michael Corleone (Pacino), the reluctant youngest son of Don Vito Corleone (Brando), who is drawn into the family’s violent business despite his initial desire to lead an honest life.

\n\n\n\n

As rival families challenge the Corleone empire, Michael is forced to make brutal decisions that transform him from an outsider into the ruthless head of the family. Through its themes of loyalty, power, and the corrupting influence of ambition, The Godfather explores the inner workings of the mafia while portraying the personal sacrifices that come with leadership. The film’s unforgettable performances, masterful direction, and iconic scenes—such as the chilling horse head sequence and the baptism assassination montage—have made it one of the most revered films in cinema history.

\n\n\n\n

Regarded as a masterpiece, The Godfather won multiple Academy Awards, including Best Picture, and remains a defining film of the gangster genre. Its influence extends beyond cinema, shaping pop culture and redefining storytelling in film.

\n','The Godfather','','publish','closed','closed','','the-godfather','','','2025-03-26 18:34:25','2025-03-26 18:34:25','',0,'http://localhost:8888/movies/movie/the-godfather/',0,'movie','',0),(20,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

Casablanca is a 1942 romantic drama directed by Michael Curtiz, starring Humphrey Bogart, Ingrid Bergman, and Paul Henreid. Set during World War II in the Moroccan city of Casablanca, the film follows Rick Blaine (Bogart), an American expatriate and owner of the popular nightclub Rick’s Café Américain. Cynical and detached, Rick’s world is upended when his former lover, Ilsa Lund (Bergman), arrives with her husband, Victor Laszlo (Henreid), a leader of the anti-Nazi resistance.

\n\n\n\n

As Ilsa and Victor seek safe passage to America, Rick is torn between his lingering feelings for Ilsa and his growing sense of duty. With corrupt officials, Nazi interference, and personal conflicts at play, Rick must decide whether to rekindle his romance or sacrifice his happiness for a greater cause. The film’s themes of love, sacrifice, and moral redemption are captured in its iconic dialogue and unforgettable moments, including the classic line, \"Here’s looking at you, kid.\"

\n\n\n\n

A timeless masterpiece, Casablanca is widely regarded as one of the greatest films in cinema history. Its combination of romance, intrigue, and memorable performances has cemented its legacy, making it a defining classic of Hollywood’s Golden Age.

\n','Casablanca','','publish','closed','closed','','casablanca','','','2025-03-26 18:31:52','2025-03-26 18:31:52','',0,'http://localhost:8888/movies/movie/casablanca/',0,'movie','',0),(21,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','','The Shawshank Redemption','','publish','closed','closed','','the-shawshank-redemption','','','2025-03-26 18:29:03','2025-03-26 18:29:03','',0,'http://localhost:8888/movies/movie/the-shawshank-redemption/',0,'movie','',0),(22,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

Pulp Fiction is a 1994 crime film directed by Quentin Tarantino, known for its nonlinear storytelling, sharp dialogue, and dark humor. The film intertwines multiple narratives involving hitmen, gangsters, and small-time criminals in Los Angeles, creating a mosaic of violence, redemption, and fate.

\n\n\n\n

The story follows Vincent Vega (John Travolta) and Jules Winnfield (Samuel L. Jackson), two philosophical hitmen working for crime boss Marsellus Wallace, as they carry out assignments ranging from retrieving a mysterious briefcase to handling an accidental murder. Meanwhile, a washed-up boxer, Butch Coolidge (Bruce Willis), attempts to escape a fixed fight gone wrong, and Vincent takes Marsellus’ wife, Mia (Uma Thurman), out for an eventful night. These interwoven tales unfold in a non-linear sequence, challenging traditional storytelling conventions while delivering unforgettable moments of tension and dark comedy.

\n\n\n\n

With its stylized violence, pop culture references, and an iconic soundtrack, Pulp Fiction became a cultural phenomenon and a defining film of the 1990s. It won the Palme d’Or at Cannes and revitalized the careers of its lead actors, cementing Tarantino’s reputation as one of the most influential filmmakers of his generation.

\n','Pulp Fiction','','publish','closed','closed','','pulp-fiction','','','2025-03-26 18:25:49','2025-03-26 18:25:49','',0,'http://localhost:8888/movies/movie/pulp-fiction/',0,'movie','',0),(23,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

Back to the Future is a 1985 sci-fi adventure film directed by Robert Zemeckis and starring Michael J. Fox as Marty McFly, a teenager who accidentally travels back in time to 1955 using a DeLorean time machine built by the eccentric Dr. Emmett Brown (Christopher Lloyd). Stranded in the past, Marty must navigate the challenges of 1950s America while ensuring his teenage parents fall in love—otherwise, he risks erasing his own existence.

\n\n\n\n

As he struggles to fix the timeline, Marty encounters a younger version of his awkward father, George, and his high school bully, Biff Tannen. With time running out, he enlists the help of the 1955 version of Doc Brown to harness the power of a lightning strike to return to 1985. Back to the Future masterfully blends humor, adventure, and heart, making it one of the most beloved and influential films in cinematic history. Its success led to two sequels, solidifying it as an iconic trilogy in pop culture.

\n','Back to the Future','','publish','closed','closed','','back-to-the-future','','','2025-03-26 14:14:39','2025-03-26 14:14:39','',0,'http://localhost:8888/movies/movie/back-to-the-future/',0,'movie','',0),(24,1,'2025-03-26 13:55:30','2025-03-26 13:55:30','\n

One Flew Over the Cuckoo’s Nest is a 1962 novel by Ken Kesey that explores themes of power, conformity, and individuality within a mental institution. The story follows Randle Patrick McMurphy, a charismatic and rebellious criminal who fakes insanity to avoid prison and serve his sentence in a psychiatric hospital instead. Once inside, he clashes with the authoritarian Nurse Ratched, whose strict control over the patients suppresses their individuality and autonomy.

\n\n\n\n

Narrated by Chief Bromden, a long-silent patient who pretends to be deaf and mute, the novel delves into the oppressive nature of institutional power and the struggle for personal freedom. McMurphy’s defiant spirit inspires the other patients to challenge the system, leading to both moments of liberation and tragic consequences. Through its vivid characters and powerful social commentary, One Flew Over the Cuckoo’s Nest critiques the dehumanizing aspects of mental health institutions and remains a poignant exploration of rebellion against oppression.

\n','One Flew Over the Cuckoo\'s Nest','','publish','closed','closed','','one-flew-over-the-cuckoos-nest','','','2025-03-26 18:29:41','2025-03-26 18:29:41','',0,'http://localhost:8888/movies/movie/one-flew-over-the-cuckoos-nest/',0,'movie','',0),(26,1,'2025-03-26 14:04:23','2025-03-26 14:04:23','\n

This is a sample headless site for https://github.com/wpengine/hwptoolkit

\n\n\n\n

Content was generated by AI and images from https://unsplash.com/

\n','Sample Page','','inherit','closed','closed','','2-revision-v1','','','2025-03-26 14:04:23','2025-03-26 14:04:23','',2,'http://localhost:8888/movies/?p=26',0,'revision','',0),(27,1,'2025-03-26 14:06:51','2025-03-26 14:06:51','https://unsplash.com/photos/landscape-photography-of-brown-wooden-house-with-trees-around-5dB9WGpJbFc','photo-1506466010722-395aa2bef877','Photo taken by Thomas Schweighofer','inherit','open','closed','','photo-1506466010722-395aa2bef877','','','2025-03-26 14:07:12','2025-03-26 14:07:12','',14,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1506466010722-395aa2bef877.jpeg',0,'attachment','image/jpeg',0),(29,1,'2025-03-26 14:11:41','2025-03-26 14:11:41','https://unsplash.com/photos/closeup-photo-of-bird-P1syptb0tTw','photo-1563278689-3519903a3e97','Photo taken by Hans van Tol','inherit','open','closed','','photo-1563278689-3519903a3e97','','','2025-03-26 14:12:03','2025-03-26 14:12:03','',24,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1563278689-3519903a3e97.jpeg',0,'attachment','image/jpeg',0),(31,1,'2025-03-26 14:14:14','2025-03-26 14:14:14','https://unsplash.com/photos/a-back-to-the-future-car-driving-on-a-rocky-road-Kgzde49RkI8','photo-1654787193446-434ac0108426','Photo taken by Cash Macanaya','inherit','open','closed','','photo-1654787193446-434ac0108426','','','2025-03-26 14:14:37','2025-03-26 14:14:37','',23,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1654787193446-434ac0108426.jpeg',0,'attachment','image/jpeg',0),(32,1,'2025-03-26 18:25:18','2025-03-26 18:25:18','https://unsplash.com/photos/burger-with-cheese-and-lettuce-9Bqiusimq6M','photo-1598182198871-d3f4ab4fd181','Photo taken by Amirali Mirhashemian','inherit','open','closed','','photo-1598182198871-d3f4ab4fd181','','','2025-03-26 18:25:47','2025-03-26 18:25:47','',22,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1598182198871-d3f4ab4fd181.jpeg',0,'attachment','image/jpeg',0),(34,1,'2025-03-26 18:28:33','2025-03-26 18:28:33','https://unsplash.com/photos/library-shelf-near-black-wooden-ladder-lc7xcWebECc','photo-1535905557558-afc4877a26fc','Photo taken by Henry Be','inherit','open','closed','','photo-1535905557558-afc4877a26fc','','','2025-03-26 18:29:01','2025-03-26 18:29:01','',21,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1535905557558-afc4877a26fc.jpeg',0,'attachment','image/jpeg',0),(36,1,'2025-03-26 18:31:29','2025-03-26 18:31:29','https://unsplash.com/photos/white-house-XiHomIVZkB0','photo-1568994660719-e69438848e42','Photo taken by Alice Andreea Georgesco','inherit','open','closed','','photo-1568994660719-e69438848e42','','','2025-03-26 18:31:50','2025-03-26 18:31:50','',20,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1568994660719-e69438848e42.jpeg',0,'attachment','image/jpeg',0),(38,1,'2025-03-26 18:33:39','2025-03-26 18:33:39','https://unsplash.com/photos/photo-of-house-near-cliff-and-body-of-water-uNvgvo2cs7k','photo-1523365154888-8a758819b722','Photo taken by Samuel Ferrara','inherit','open','closed','','photo-1523365154888-8a758819b722','','','2025-03-26 18:34:04','2025-03-26 18:34:04','',19,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1523365154888-8a758819b722.jpeg',0,'attachment','image/jpeg',0),(40,1,'2025-03-26 18:35:40','2025-03-26 18:35:40','https://unsplash.com/photos/people-walking-on-sidewalk-near-unks-store-during-daytime-SAhImiWmFaw','photo-1588638873763-12aa3abac949','Photo taken by Noralí Nayla','inherit','open','closed','','photo-1588638873763-12aa3abac949','','','2025-03-26 18:36:02','2025-03-26 18:36:02','',18,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1588638873763-12aa3abac949.jpeg',0,'attachment','image/jpeg',0),(41,1,'2025-03-26 18:37:38','2025-03-26 18:37:38','https://unsplash.com/photos/green-and-black-telephone-booth-00MAcnHWQms','photo-1581013229140-6b76f8f70224','Photo taken by Danny Lines','inherit','open','closed','','photo-1581013229140-6b76f8f70224','','','2025-03-26 18:38:01','2025-03-26 18:38:01','',17,'http://localhost:8888/movies/wp-content/uploads/sites/2/2025/03/photo-1581013229140-6b76f8f70224.jpeg',0,'attachment','image/jpeg',0),(42,1,'2025-03-31 17:15:06','2025-03-31 17:15:06','\n

This is an example page on the Movie site to demonstrate the catch all template to show that it can load content from any site defined in the next.config.mjs

\n\n\n\n

\n','Bookings','','publish','closed','closed','','bookings','','','2025-03-31 17:47:19','2025-03-31 17:47:19','',0,'http://localhost:8888/movies/?page_id=42',0,'page','',0),(43,1,'2025-03-31 17:14:30','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2025-03-31 17:14:30','0000-00-00 00:00:00','',0,'http://localhost:8888/movies/?p=43',0,'post','',0),(44,1,'2025-03-31 17:15:06','2025-03-31 17:15:06','\n

This is an example page to demostrate the catch all template to show that it can load content from any site defined in the next.config.mjs

\n\n\n\n

\n','Bookings','','inherit','closed','closed','','42-revision-v1','','','2025-03-31 17:15:06','2025-03-31 17:15:06','',42,'http://localhost:8888/movies/?p=44',0,'revision','',0),(45,1,'2025-03-31 17:47:19','2025-03-31 17:47:19','\n

This is an example page on the Movie site to demonstrate the catch all template to show that it can load content from any site defined in the next.config.mjs

\n\n\n\n

\n','Bookings','','inherit','closed','closed','','42-revision-v1','','','2025-03-31 17:47:19','2025-03-31 17:47:19','',42,'http://localhost:8888/movies/?p=45',0,'revision','',0); +/*!40000 ALTER TABLE `wp_2_posts` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_term_relationships` +-- + +DROP TABLE IF EXISTS `wp_2_term_relationships`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_term_relationships` ( + `object_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `term_order` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`object_id`,`term_taxonomy_id`), + KEY `term_taxonomy_id` (`term_taxonomy_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_term_relationships` +-- + +LOCK TABLES `wp_2_term_relationships` WRITE; +/*!40000 ALTER TABLE `wp_2_term_relationships` DISABLE KEYS */; +INSERT INTO `wp_2_term_relationships` VALUES (1,1,0),(12,2,0); +/*!40000 ALTER TABLE `wp_2_term_relationships` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_term_taxonomy` +-- + +DROP TABLE IF EXISTS `wp_2_term_taxonomy`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_term_taxonomy` ( + `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `term_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `taxonomy` varchar(32) NOT NULL DEFAULT '', + `description` longtext NOT NULL, + `parent` bigint(20) unsigned NOT NULL DEFAULT 0, + `count` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`term_taxonomy_id`), + UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`), + KEY `taxonomy` (`taxonomy`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_term_taxonomy` +-- + +LOCK TABLES `wp_2_term_taxonomy` WRITE; +/*!40000 ALTER TABLE `wp_2_term_taxonomy` DISABLE KEYS */; +INSERT INTO `wp_2_term_taxonomy` VALUES (1,1,'category','',0,1),(2,2,'wp_theme','',0,1); +/*!40000 ALTER TABLE `wp_2_term_taxonomy` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_termmeta` +-- + +DROP TABLE IF EXISTS `wp_2_termmeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_termmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `term_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `term_id` (`term_id`), + KEY `meta_key` (`meta_key`(191)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_termmeta` +-- + +LOCK TABLES `wp_2_termmeta` WRITE; +/*!40000 ALTER TABLE `wp_2_termmeta` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_2_termmeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_2_terms` +-- + +DROP TABLE IF EXISTS `wp_2_terms`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_2_terms` ( + `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(200) NOT NULL DEFAULT '', + `slug` varchar(200) NOT NULL DEFAULT '', + `term_group` bigint(10) NOT NULL DEFAULT 0, + PRIMARY KEY (`term_id`), + KEY `slug` (`slug`(191)), + KEY `name` (`name`(191)) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_2_terms` +-- + +LOCK TABLES `wp_2_terms` WRITE; +/*!40000 ALTER TABLE `wp_2_terms` DISABLE KEYS */; +INSERT INTO `wp_2_terms` VALUES (1,'Uncategorized','uncategorized',0),(2,'twentytwentyfive','twentytwentyfive',0); +/*!40000 ALTER TABLE `wp_2_terms` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_blogmeta` +-- + +DROP TABLE IF EXISTS `wp_blogmeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_blogmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `blog_id` bigint(20) NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `meta_key` (`meta_key`(191)), + KEY `blog_id` (`blog_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_blogmeta` +-- + +LOCK TABLES `wp_blogmeta` WRITE; +/*!40000 ALTER TABLE `wp_blogmeta` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_blogmeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_blogs` +-- + +DROP TABLE IF EXISTS `wp_blogs`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_blogs` ( + `blog_id` bigint(20) NOT NULL AUTO_INCREMENT, + `site_id` bigint(20) NOT NULL DEFAULT 0, + `domain` varchar(200) NOT NULL DEFAULT '', + `path` varchar(100) NOT NULL DEFAULT '', + `registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `last_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `public` tinyint(2) NOT NULL DEFAULT 1, + `archived` tinyint(2) NOT NULL DEFAULT 0, + `mature` tinyint(2) NOT NULL DEFAULT 0, + `spam` tinyint(2) NOT NULL DEFAULT 0, + `deleted` tinyint(2) NOT NULL DEFAULT 0, + `lang_id` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`blog_id`), + KEY `domain` (`domain`(50),`path`(5)), + KEY `lang_id` (`lang_id`) +) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_blogs` +-- + +LOCK TABLES `wp_blogs` WRITE; +/*!40000 ALTER TABLE `wp_blogs` DISABLE KEYS */; +INSERT INTO `wp_blogs` VALUES (1,1,'localhost:8888','/','2025-03-25 18:10:53','2025-03-31 17:20:29',1,0,0,0,0,0),(2,1,'localhost:8888','/movies/','2025-03-25 18:23:51','2025-03-31 17:47:19',1,0,0,0,0,0); +/*!40000 ALTER TABLE `wp_blogs` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_commentmeta` +-- + +DROP TABLE IF EXISTS `wp_commentmeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_commentmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `comment_id` (`comment_id`), + KEY `meta_key` (`meta_key`(191)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_commentmeta` +-- + +LOCK TABLES `wp_commentmeta` WRITE; +/*!40000 ALTER TABLE `wp_commentmeta` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_commentmeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_comments` +-- + +DROP TABLE IF EXISTS `wp_comments`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_comments` ( + `comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT 0, + `comment_author` tinytext NOT NULL, + `comment_author_email` varchar(100) NOT NULL DEFAULT '', + `comment_author_url` varchar(200) NOT NULL DEFAULT '', + `comment_author_IP` varchar(100) NOT NULL DEFAULT '', + `comment_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `comment_content` text NOT NULL, + `comment_karma` int(11) NOT NULL DEFAULT 0, + `comment_approved` varchar(20) NOT NULL DEFAULT '1', + `comment_agent` varchar(255) NOT NULL DEFAULT '', + `comment_type` varchar(20) NOT NULL DEFAULT 'comment', + `comment_parent` bigint(20) unsigned NOT NULL DEFAULT 0, + `user_id` bigint(20) unsigned NOT NULL DEFAULT 0, + PRIMARY KEY (`comment_ID`), + KEY `comment_post_ID` (`comment_post_ID`), + KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`), + KEY `comment_date_gmt` (`comment_date_gmt`), + KEY `comment_parent` (`comment_parent`), + KEY `comment_author_email` (`comment_author_email`(10)) +) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_comments` +-- + +LOCK TABLES `wp_comments` WRITE; +/*!40000 ALTER TABLE `wp_comments` DISABLE KEYS */; +INSERT INTO `wp_comments` VALUES (2,7,'James Wilson','james.wilson@example.com','https://github.com/wpengine/hwptoolkit','172.19.0.1','2025-03-31 17:50:20','2025-03-31 17:50:20','Love this list! I\'ve been incorporating squats and planks into my morning routine for the past month and already feel so much stronger. Definitely going to try those shoulder rolls for my desk-job tension. Thanks for sharing!',0,'1','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36','comment',0,0),(3,7,'Sarah Chen','sarah.chen@example.com','https://github.com/wpengine/hwptoolkit','172.19.0.1','2025-03-31 17:54:09','2025-03-31 17:54:09','I\'ve been doing these exercises for two weeks now and already notice improvements in my posture and energy levels. The breathing exercise has been especially helpful for managing my stress at work.',0,'1','Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36','comment',0,0); +/*!40000 ALTER TABLE `wp_comments` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_links` +-- + +DROP TABLE IF EXISTS `wp_links`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_links` ( + `link_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `link_url` varchar(255) NOT NULL DEFAULT '', + `link_name` varchar(255) NOT NULL DEFAULT '', + `link_image` varchar(255) NOT NULL DEFAULT '', + `link_target` varchar(25) NOT NULL DEFAULT '', + `link_description` varchar(255) NOT NULL DEFAULT '', + `link_visible` varchar(20) NOT NULL DEFAULT 'Y', + `link_owner` bigint(20) unsigned NOT NULL DEFAULT 1, + `link_rating` int(11) NOT NULL DEFAULT 0, + `link_updated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `link_rel` varchar(255) NOT NULL DEFAULT '', + `link_notes` mediumtext NOT NULL, + `link_rss` varchar(255) NOT NULL DEFAULT '', + PRIMARY KEY (`link_id`), + KEY `link_visible` (`link_visible`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_links` +-- + +LOCK TABLES `wp_links` WRITE; +/*!40000 ALTER TABLE `wp_links` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_links` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_options` +-- + +DROP TABLE IF EXISTS `wp_options`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_options` ( + `option_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `option_name` varchar(191) NOT NULL DEFAULT '', + `option_value` longtext NOT NULL, + `autoload` varchar(20) NOT NULL DEFAULT 'yes', + PRIMARY KEY (`option_id`), + UNIQUE KEY `option_name` (`option_name`), + KEY `autoload` (`autoload`) +) ENGINE=InnoDB AUTO_INCREMENT=205 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_options` +-- + +LOCK TABLES `wp_options` WRITE; +/*!40000 ALTER TABLE `wp_options` DISABLE KEYS */; +INSERT INTO `wp_options` VALUES (1,'cron','a:16:{i:1742926156;a:2:{s:32:\"recovery_mode_clean_expired_keys\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:34:\"wp_privacy_delete_old_export_files\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"hourly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:3600;}}}i:1742926235;a:1:{s:27:\"acf_update_site_health_data\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1742926760;a:2:{s:19:\"wp_scheduled_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}s:25:\"delete_expired_transients\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1742926761;a:1:{s:21:\"update_network_counts\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1742926762;a:1:{s:30:\"wp_scheduled_auto_draft_delete\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}i:1742926820;a:1:{s:28:\"wp_update_comment_type_batch\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1742927002;a:1:{s:30:\"wp_delete_temp_updater_backups\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1742929749;a:1:{s:16:\"wp_version_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1742931017;a:1:{s:8:\"do_pings\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:0:{}}}}i:1742931549;a:1:{s:17:\"wp_update_plugins\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1742933349;a:1:{s:16:\"wp_update_themes\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:10:\"twicedaily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:43200;}}}i:1743012556;a:1:{s:30:\"wp_site_health_scheduled_check\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1743017269;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"686c8315be36c96dc00d0d7ed3656b43\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:6;}}}}i:1743024134;a:1:{s:29:\"wp-graphql_tracker_send_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}i:1743024137;a:1:{s:32:\"wpgraphql-acf_tracker_send_event\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:6:\"weekly\";s:4:\"args\";a:0:{}s:8:\"interval\";i:604800;}}}s:7:\"version\";i:2;}','on'),(2,'siteurl','http://localhost:8888','on'),(3,'home','http://localhost:8888','on'),(4,'blogname','Sample Headless Site','on'),(5,'blogdescription','This is an example site for https://github.com/wpengine/hwptoolkit','on'),(6,'users_can_register','0','on'),(7,'admin_email','wordpress@example.com','on'),(8,'start_of_week','1','on'),(9,'use_balanceTags','0','on'),(10,'use_smilies','1','on'),(11,'require_name_email','1','on'),(12,'comments_notify','1','on'),(13,'posts_per_rss','10','on'),(14,'rss_use_excerpt','0','on'),(15,'mailserver_url','mail.example.com','on'),(16,'mailserver_login','login@example.com','on'),(17,'mailserver_pass','','on'),(18,'mailserver_port','110','on'),(19,'default_category','1','on'),(20,'default_comment_status','open','on'),(21,'default_ping_status','open','on'),(22,'default_pingback_flag','1','on'),(23,'posts_per_page','10','on'),(24,'date_format','F j, Y','on'),(25,'time_format','g:i a','on'),(26,'links_updated_date_format','F j, Y g:i a','on'),(27,'comment_moderation','0','on'),(28,'moderation_notify','1','on'),(29,'permalink_structure','/blog/%postname%/','on'),(30,'rewrite_rules','a:98:{s:11:\"^wp-json/?$\";s:22:\"index.php?rest_route=/\";s:14:\"^wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:21:\"^index.php/wp-json/?$\";s:22:\"index.php?rest_route=/\";s:24:\"^index.php/wp-json/(.*)?\";s:33:\"index.php?rest_route=/$matches[1]\";s:17:\"^wp-sitemap\\.xml$\";s:23:\"index.php?sitemap=index\";s:17:\"^wp-sitemap\\.xsl$\";s:36:\"index.php?sitemap-stylesheet=sitemap\";s:23:\"^wp-sitemap-index\\.xsl$\";s:34:\"index.php?sitemap-stylesheet=index\";s:48:\"^wp-sitemap-([a-z]+?)-([a-z\\d_-]+?)-(\\d+?)\\.xml$\";s:75:\"index.php?sitemap=$matches[1]&sitemap-subtype=$matches[2]&paged=$matches[3]\";s:34:\"^wp-sitemap-([a-z]+?)-(\\d+?)\\.xml$\";s:47:\"index.php?sitemap=$matches[1]&paged=$matches[2]\";s:10:\"graphql/?$\";s:22:\"index.php?graphql=true\";s:52:\"blog/category/(.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:47:\"blog/category/(.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:52:\"index.php?category_name=$matches[1]&feed=$matches[2]\";s:28:\"blog/category/(.+?)/embed/?$\";s:46:\"index.php?category_name=$matches[1]&embed=true\";s:40:\"blog/category/(.+?)/page/?([0-9]{1,})/?$\";s:53:\"index.php?category_name=$matches[1]&paged=$matches[2]\";s:22:\"blog/category/(.+?)/?$\";s:35:\"index.php?category_name=$matches[1]\";s:49:\"blog/tag/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:44:\"blog/tag/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?tag=$matches[1]&feed=$matches[2]\";s:25:\"blog/tag/([^/]+)/embed/?$\";s:36:\"index.php?tag=$matches[1]&embed=true\";s:37:\"blog/tag/([^/]+)/page/?([0-9]{1,})/?$\";s:43:\"index.php?tag=$matches[1]&paged=$matches[2]\";s:19:\"blog/tag/([^/]+)/?$\";s:25:\"index.php?tag=$matches[1]\";s:50:\"blog/type/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:45:\"blog/type/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?post_format=$matches[1]&feed=$matches[2]\";s:26:\"blog/type/([^/]+)/embed/?$\";s:44:\"index.php?post_format=$matches[1]&embed=true\";s:38:\"blog/type/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?post_format=$matches[1]&paged=$matches[2]\";s:20:\"blog/type/([^/]+)/?$\";s:33:\"index.php?post_format=$matches[1]\";s:12:\"robots\\.txt$\";s:18:\"index.php?robots=1\";s:13:\"favicon\\.ico$\";s:19:\"index.php?favicon=1\";s:12:\"sitemap\\.xml\";s:24:\"index.php??sitemap=index\";s:48:\".*wp-(atom|rdf|rss|rss2|feed|commentsrss2)\\.php$\";s:18:\"index.php?feed=old\";s:20:\".*wp-app\\.php(/.*)?$\";s:19:\"index.php?error=403\";s:16:\".*wp-signup.php$\";s:21:\"index.php?signup=true\";s:18:\".*wp-activate.php$\";s:23:\"index.php?activate=true\";s:18:\".*wp-register.php$\";s:23:\"index.php?register=true\";s:32:\"feed/(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:27:\"(feed|rdf|rss|rss2|atom)/?$\";s:27:\"index.php?&feed=$matches[1]\";s:8:\"embed/?$\";s:21:\"index.php?&embed=true\";s:20:\"page/?([0-9]{1,})/?$\";s:28:\"index.php?&paged=$matches[1]\";s:27:\"comment-page-([0-9]{1,})/?$\";s:38:\"index.php?&page_id=2&cpage=$matches[1]\";s:41:\"comments/feed/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:36:\"comments/(feed|rdf|rss|rss2|atom)/?$\";s:42:\"index.php?&feed=$matches[1]&withcomments=1\";s:17:\"comments/embed/?$\";s:21:\"index.php?&embed=true\";s:44:\"search/(.+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:39:\"search/(.+)/(feed|rdf|rss|rss2|atom)/?$\";s:40:\"index.php?s=$matches[1]&feed=$matches[2]\";s:20:\"search/(.+)/embed/?$\";s:34:\"index.php?s=$matches[1]&embed=true\";s:32:\"search/(.+)/page/?([0-9]{1,})/?$\";s:41:\"index.php?s=$matches[1]&paged=$matches[2]\";s:14:\"search/(.+)/?$\";s:23:\"index.php?s=$matches[1]\";s:52:\"blog/author/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:47:\"blog/author/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:50:\"index.php?author_name=$matches[1]&feed=$matches[2]\";s:28:\"blog/author/([^/]+)/embed/?$\";s:44:\"index.php?author_name=$matches[1]&embed=true\";s:40:\"blog/author/([^/]+)/page/?([0-9]{1,})/?$\";s:51:\"index.php?author_name=$matches[1]&paged=$matches[2]\";s:22:\"blog/author/([^/]+)/?$\";s:33:\"index.php?author_name=$matches[1]\";s:74:\"blog/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:69:\"blog/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:80:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&feed=$matches[4]\";s:50:\"blog/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/embed/?$\";s:74:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&embed=true\";s:62:\"blog/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:81:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]&paged=$matches[4]\";s:44:\"blog/([0-9]{4})/([0-9]{1,2})/([0-9]{1,2})/?$\";s:63:\"index.php?year=$matches[1]&monthnum=$matches[2]&day=$matches[3]\";s:61:\"blog/([0-9]{4})/([0-9]{1,2})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:56:\"blog/([0-9]{4})/([0-9]{1,2})/(feed|rdf|rss|rss2|atom)/?$\";s:64:\"index.php?year=$matches[1]&monthnum=$matches[2]&feed=$matches[3]\";s:37:\"blog/([0-9]{4})/([0-9]{1,2})/embed/?$\";s:58:\"index.php?year=$matches[1]&monthnum=$matches[2]&embed=true\";s:49:\"blog/([0-9]{4})/([0-9]{1,2})/page/?([0-9]{1,})/?$\";s:65:\"index.php?year=$matches[1]&monthnum=$matches[2]&paged=$matches[3]\";s:31:\"blog/([0-9]{4})/([0-9]{1,2})/?$\";s:47:\"index.php?year=$matches[1]&monthnum=$matches[2]\";s:48:\"blog/([0-9]{4})/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:43:\"blog/([0-9]{4})/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?year=$matches[1]&feed=$matches[2]\";s:24:\"blog/([0-9]{4})/embed/?$\";s:37:\"index.php?year=$matches[1]&embed=true\";s:36:\"blog/([0-9]{4})/page/?([0-9]{1,})/?$\";s:44:\"index.php?year=$matches[1]&paged=$matches[2]\";s:18:\"blog/([0-9]{4})/?$\";s:26:\"index.php?year=$matches[1]\";s:27:\".?.+?/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:37:\".?.+?/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:57:\".?.+?/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:52:\".?.+?/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:33:\".?.+?/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:16:\"(.?.+?)/embed/?$\";s:41:\"index.php?pagename=$matches[1]&embed=true\";s:20:\"(.?.+?)/trackback/?$\";s:35:\"index.php?pagename=$matches[1]&tb=1\";s:40:\"(.?.+?)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:35:\"(.?.+?)/(feed|rdf|rss|rss2|atom)/?$\";s:47:\"index.php?pagename=$matches[1]&feed=$matches[2]\";s:28:\"(.?.+?)/page/?([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&paged=$matches[2]\";s:35:\"(.?.+?)/comment-page-([0-9]{1,})/?$\";s:48:\"index.php?pagename=$matches[1]&cpage=$matches[2]\";s:24:\"(.?.+?)(?:/([0-9]+))?/?$\";s:47:\"index.php?pagename=$matches[1]&page=$matches[2]\";s:32:\"blog/[^/]+/attachment/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:42:\"blog/[^/]+/attachment/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:62:\"blog/[^/]+/attachment/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:57:\"blog/[^/]+/attachment/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:57:\"blog/[^/]+/attachment/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:38:\"blog/[^/]+/attachment/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";s:21:\"blog/([^/]+)/embed/?$\";s:37:\"index.php?name=$matches[1]&embed=true\";s:25:\"blog/([^/]+)/trackback/?$\";s:31:\"index.php?name=$matches[1]&tb=1\";s:45:\"blog/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:40:\"blog/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:43:\"index.php?name=$matches[1]&feed=$matches[2]\";s:33:\"blog/([^/]+)/page/?([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&paged=$matches[2]\";s:40:\"blog/([^/]+)/comment-page-([0-9]{1,})/?$\";s:44:\"index.php?name=$matches[1]&cpage=$matches[2]\";s:29:\"blog/([^/]+)(?:/([0-9]+))?/?$\";s:43:\"index.php?name=$matches[1]&page=$matches[2]\";s:21:\"blog/[^/]+/([^/]+)/?$\";s:32:\"index.php?attachment=$matches[1]\";s:31:\"blog/[^/]+/([^/]+)/trackback/?$\";s:37:\"index.php?attachment=$matches[1]&tb=1\";s:51:\"blog/[^/]+/([^/]+)/feed/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:46:\"blog/[^/]+/([^/]+)/(feed|rdf|rss|rss2|atom)/?$\";s:49:\"index.php?attachment=$matches[1]&feed=$matches[2]\";s:46:\"blog/[^/]+/([^/]+)/comment-page-([0-9]{1,})/?$\";s:50:\"index.php?attachment=$matches[1]&cpage=$matches[2]\";s:27:\"blog/[^/]+/([^/]+)/embed/?$\";s:43:\"index.php?attachment=$matches[1]&embed=true\";}','on'),(31,'hack_file','0','on'),(32,'blog_charset','UTF-8','on'),(33,'moderation_keys','','off'),(34,'active_plugins','a:6:{i:0;s:37:\"advanced-custom-fields-6.3.12/acf.php\";i:1;s:41:\"wordpress-importer/wordpress-importer.php\";i:2;s:55:\"wp-graphql-content-blocks/wp-graphql-content-blocks.php\";i:3;s:25:\"wp-graphql/wp-graphql.php\";i:4;s:31:\"wpgraphql-acf/wpgraphql-acf.php\";i:5;s:31:\"wpgraphql-ide/wpgraphql-ide.php\";}','on'),(35,'category_base','','on'),(36,'ping_sites','http://rpc.pingomatic.com/','on'),(37,'comment_max_links','2','on'),(38,'gmt_offset','0','on'),(39,'default_email_category','1','on'),(40,'recently_edited','','off'),(41,'template','twentytwentyfive','on'),(42,'stylesheet','twentytwentyfive','on'),(43,'comment_registration','0','on'),(44,'html_type','text/html','on'),(45,'use_trackback','0','on'),(46,'default_role','subscriber','on'),(47,'db_version','58975','on'),(48,'uploads_use_yearmonth_folders','1','on'),(49,'upload_path','','on'),(50,'blog_public','1','on'),(51,'default_link_category','2','on'),(52,'show_on_front','page','on'),(53,'tag_base','','on'),(54,'show_avatars','1','on'),(55,'avatar_rating','G','on'),(56,'upload_url_path','','on'),(57,'thumbnail_size_w','150','on'),(58,'thumbnail_size_h','150','on'),(59,'thumbnail_crop','1','on'),(60,'medium_size_w','300','on'),(61,'medium_size_h','300','on'),(62,'avatar_default','mystery','on'),(63,'large_size_w','1024','on'),(64,'large_size_h','1024','on'),(65,'image_default_link_type','none','on'),(66,'image_default_size','','on'),(67,'image_default_align','','on'),(68,'close_comments_for_old_posts','0','on'),(69,'close_comments_days_old','14','on'),(70,'thread_comments','1','on'),(71,'thread_comments_depth','5','on'),(72,'page_comments','0','on'),(73,'comments_per_page','50','on'),(74,'default_comments_page','newest','on'),(75,'comment_order','asc','on'),(76,'sticky_posts','a:0:{}','on'),(77,'widget_categories','a:0:{}','on'),(78,'widget_text','a:0:{}','on'),(79,'widget_rss','a:0:{}','on'),(80,'uninstall_plugins','a:0:{}','off'),(81,'timezone_string','','on'),(82,'page_for_posts','0','on'),(83,'page_on_front','2','on'),(84,'default_post_format','0','on'),(85,'link_manager_enabled','0','on'),(86,'finished_splitting_shared_terms','1','on'),(87,'site_icon','0','on'),(88,'medium_large_size_w','768','on'),(89,'medium_large_size_h','0','on'),(90,'wp_page_for_privacy_policy','3','on'),(91,'show_comments_cookies_opt_in','1','on'),(92,'admin_email_lifespan','1758478149','on'),(93,'disallowed_keys','','off'),(94,'comment_previously_approved','1','on'),(95,'auto_plugin_theme_update_emails','a:0:{}','off'),(96,'auto_update_core_dev','enabled','on'),(97,'auto_update_core_minor','enabled','on'),(98,'auto_update_core_major','enabled','on'),(99,'wp_force_deactivated_plugins','a:0:{}','on'),(100,'wp_attachment_pages_enabled','0','on'),(101,'initial_db_version','58975','on'),(102,'wp_user_roles','a:5:{s:13:\"administrator\";a:2:{s:4:\"name\";s:13:\"Administrator\";s:12:\"capabilities\";a:62:{s:13:\"switch_themes\";b:1;s:11:\"edit_themes\";b:1;s:16:\"activate_plugins\";b:1;s:12:\"edit_plugins\";b:1;s:10:\"edit_users\";b:1;s:10:\"edit_files\";b:1;s:14:\"manage_options\";b:1;s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:6:\"import\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:8:\"level_10\";b:1;s:7:\"level_9\";b:1;s:7:\"level_8\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;s:12:\"delete_users\";b:1;s:12:\"create_users\";b:1;s:17:\"unfiltered_upload\";b:1;s:14:\"edit_dashboard\";b:1;s:14:\"update_plugins\";b:1;s:14:\"delete_plugins\";b:1;s:15:\"install_plugins\";b:1;s:13:\"update_themes\";b:1;s:14:\"install_themes\";b:1;s:11:\"update_core\";b:1;s:10:\"list_users\";b:1;s:12:\"remove_users\";b:1;s:13:\"promote_users\";b:1;s:18:\"edit_theme_options\";b:1;s:13:\"delete_themes\";b:1;s:6:\"export\";b:1;s:18:\"manage_graphql_ide\";b:1;}}s:6:\"editor\";a:2:{s:4:\"name\";s:6:\"Editor\";s:12:\"capabilities\";a:34:{s:17:\"moderate_comments\";b:1;s:17:\"manage_categories\";b:1;s:12:\"manage_links\";b:1;s:12:\"upload_files\";b:1;s:15:\"unfiltered_html\";b:1;s:10:\"edit_posts\";b:1;s:17:\"edit_others_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:10:\"edit_pages\";b:1;s:4:\"read\";b:1;s:7:\"level_7\";b:1;s:7:\"level_6\";b:1;s:7:\"level_5\";b:1;s:7:\"level_4\";b:1;s:7:\"level_3\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:17:\"edit_others_pages\";b:1;s:20:\"edit_published_pages\";b:1;s:13:\"publish_pages\";b:1;s:12:\"delete_pages\";b:1;s:19:\"delete_others_pages\";b:1;s:22:\"delete_published_pages\";b:1;s:12:\"delete_posts\";b:1;s:19:\"delete_others_posts\";b:1;s:22:\"delete_published_posts\";b:1;s:20:\"delete_private_posts\";b:1;s:18:\"edit_private_posts\";b:1;s:18:\"read_private_posts\";b:1;s:20:\"delete_private_pages\";b:1;s:18:\"edit_private_pages\";b:1;s:18:\"read_private_pages\";b:1;}}s:6:\"author\";a:2:{s:4:\"name\";s:6:\"Author\";s:12:\"capabilities\";a:10:{s:12:\"upload_files\";b:1;s:10:\"edit_posts\";b:1;s:20:\"edit_published_posts\";b:1;s:13:\"publish_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_2\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;s:22:\"delete_published_posts\";b:1;}}s:11:\"contributor\";a:2:{s:4:\"name\";s:11:\"Contributor\";s:12:\"capabilities\";a:5:{s:10:\"edit_posts\";b:1;s:4:\"read\";b:1;s:7:\"level_1\";b:1;s:7:\"level_0\";b:1;s:12:\"delete_posts\";b:1;}}s:10:\"subscriber\";a:2:{s:4:\"name\";s:10:\"Subscriber\";s:12:\"capabilities\";a:2:{s:4:\"read\";b:1;s:7:\"level_0\";b:1;}}}','on'),(103,'fresh_site','0','off'),(104,'user_count','1','off'),(105,'widget_block','a:6:{i:2;a:1:{s:7:\"content\";s:19:\"\";}i:3;a:1:{s:7:\"content\";s:154:\"

Recent Posts

\";}i:4;a:1:{s:7:\"content\";s:227:\"

Recent Comments

\";}i:5;a:1:{s:7:\"content\";s:146:\"

Archives

\";}i:6;a:1:{s:7:\"content\";s:150:\"

Categories

\";}s:12:\"_multiwidget\";i:1;}','auto'),(106,'sidebars_widgets','a:4:{s:19:\"wp_inactive_widgets\";a:0:{}s:9:\"sidebar-1\";a:3:{i:0;s:7:\"block-2\";i:1;s:7:\"block-3\";i:2;s:7:\"block-4\";}s:9:\"sidebar-2\";a:2:{i:0;s:7:\"block-5\";i:1;s:7:\"block-6\";}s:13:\"array_version\";i:3;}','auto'),(107,'widget_pages','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(108,'widget_calendar','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(109,'widget_archives','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(110,'widget_media_audio','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(111,'widget_media_image','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(112,'widget_media_gallery','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(113,'widget_media_video','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(114,'widget_meta','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(115,'widget_search','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(116,'widget_recent-posts','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(117,'widget_recent-comments','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(118,'widget_tag_cloud','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(119,'widget_nav_menu','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(120,'widget_custom_html','a:1:{s:12:\"_multiwidget\";i:1;}','auto'),(121,'_transient_wp_core_block_css_files','a:2:{s:7:\"version\";s:5:\"6.7.2\";s:5:\"files\";a:540:{i:0;s:23:\"archives/editor-rtl.css\";i:1;s:27:\"archives/editor-rtl.min.css\";i:2;s:19:\"archives/editor.css\";i:3;s:23:\"archives/editor.min.css\";i:4;s:22:\"archives/style-rtl.css\";i:5;s:26:\"archives/style-rtl.min.css\";i:6;s:18:\"archives/style.css\";i:7;s:22:\"archives/style.min.css\";i:8;s:20:\"audio/editor-rtl.css\";i:9;s:24:\"audio/editor-rtl.min.css\";i:10;s:16:\"audio/editor.css\";i:11;s:20:\"audio/editor.min.css\";i:12;s:19:\"audio/style-rtl.css\";i:13;s:23:\"audio/style-rtl.min.css\";i:14;s:15:\"audio/style.css\";i:15;s:19:\"audio/style.min.css\";i:16;s:19:\"audio/theme-rtl.css\";i:17;s:23:\"audio/theme-rtl.min.css\";i:18;s:15:\"audio/theme.css\";i:19;s:19:\"audio/theme.min.css\";i:20;s:21:\"avatar/editor-rtl.css\";i:21;s:25:\"avatar/editor-rtl.min.css\";i:22;s:17:\"avatar/editor.css\";i:23;s:21:\"avatar/editor.min.css\";i:24;s:20:\"avatar/style-rtl.css\";i:25;s:24:\"avatar/style-rtl.min.css\";i:26;s:16:\"avatar/style.css\";i:27;s:20:\"avatar/style.min.css\";i:28;s:21:\"button/editor-rtl.css\";i:29;s:25:\"button/editor-rtl.min.css\";i:30;s:17:\"button/editor.css\";i:31;s:21:\"button/editor.min.css\";i:32;s:20:\"button/style-rtl.css\";i:33;s:24:\"button/style-rtl.min.css\";i:34;s:16:\"button/style.css\";i:35;s:20:\"button/style.min.css\";i:36;s:22:\"buttons/editor-rtl.css\";i:37;s:26:\"buttons/editor-rtl.min.css\";i:38;s:18:\"buttons/editor.css\";i:39;s:22:\"buttons/editor.min.css\";i:40;s:21:\"buttons/style-rtl.css\";i:41;s:25:\"buttons/style-rtl.min.css\";i:42;s:17:\"buttons/style.css\";i:43;s:21:\"buttons/style.min.css\";i:44;s:22:\"calendar/style-rtl.css\";i:45;s:26:\"calendar/style-rtl.min.css\";i:46;s:18:\"calendar/style.css\";i:47;s:22:\"calendar/style.min.css\";i:48;s:25:\"categories/editor-rtl.css\";i:49;s:29:\"categories/editor-rtl.min.css\";i:50;s:21:\"categories/editor.css\";i:51;s:25:\"categories/editor.min.css\";i:52;s:24:\"categories/style-rtl.css\";i:53;s:28:\"categories/style-rtl.min.css\";i:54;s:20:\"categories/style.css\";i:55;s:24:\"categories/style.min.css\";i:56;s:19:\"code/editor-rtl.css\";i:57;s:23:\"code/editor-rtl.min.css\";i:58;s:15:\"code/editor.css\";i:59;s:19:\"code/editor.min.css\";i:60;s:18:\"code/style-rtl.css\";i:61;s:22:\"code/style-rtl.min.css\";i:62;s:14:\"code/style.css\";i:63;s:18:\"code/style.min.css\";i:64;s:18:\"code/theme-rtl.css\";i:65;s:22:\"code/theme-rtl.min.css\";i:66;s:14:\"code/theme.css\";i:67;s:18:\"code/theme.min.css\";i:68;s:22:\"columns/editor-rtl.css\";i:69;s:26:\"columns/editor-rtl.min.css\";i:70;s:18:\"columns/editor.css\";i:71;s:22:\"columns/editor.min.css\";i:72;s:21:\"columns/style-rtl.css\";i:73;s:25:\"columns/style-rtl.min.css\";i:74;s:17:\"columns/style.css\";i:75;s:21:\"columns/style.min.css\";i:76;s:33:\"comment-author-name/style-rtl.css\";i:77;s:37:\"comment-author-name/style-rtl.min.css\";i:78;s:29:\"comment-author-name/style.css\";i:79;s:33:\"comment-author-name/style.min.css\";i:80;s:29:\"comment-content/style-rtl.css\";i:81;s:33:\"comment-content/style-rtl.min.css\";i:82;s:25:\"comment-content/style.css\";i:83;s:29:\"comment-content/style.min.css\";i:84;s:26:\"comment-date/style-rtl.css\";i:85;s:30:\"comment-date/style-rtl.min.css\";i:86;s:22:\"comment-date/style.css\";i:87;s:26:\"comment-date/style.min.css\";i:88;s:31:\"comment-edit-link/style-rtl.css\";i:89;s:35:\"comment-edit-link/style-rtl.min.css\";i:90;s:27:\"comment-edit-link/style.css\";i:91;s:31:\"comment-edit-link/style.min.css\";i:92;s:32:\"comment-reply-link/style-rtl.css\";i:93;s:36:\"comment-reply-link/style-rtl.min.css\";i:94;s:28:\"comment-reply-link/style.css\";i:95;s:32:\"comment-reply-link/style.min.css\";i:96;s:30:\"comment-template/style-rtl.css\";i:97;s:34:\"comment-template/style-rtl.min.css\";i:98;s:26:\"comment-template/style.css\";i:99;s:30:\"comment-template/style.min.css\";i:100;s:42:\"comments-pagination-numbers/editor-rtl.css\";i:101;s:46:\"comments-pagination-numbers/editor-rtl.min.css\";i:102;s:38:\"comments-pagination-numbers/editor.css\";i:103;s:42:\"comments-pagination-numbers/editor.min.css\";i:104;s:34:\"comments-pagination/editor-rtl.css\";i:105;s:38:\"comments-pagination/editor-rtl.min.css\";i:106;s:30:\"comments-pagination/editor.css\";i:107;s:34:\"comments-pagination/editor.min.css\";i:108;s:33:\"comments-pagination/style-rtl.css\";i:109;s:37:\"comments-pagination/style-rtl.min.css\";i:110;s:29:\"comments-pagination/style.css\";i:111;s:33:\"comments-pagination/style.min.css\";i:112;s:29:\"comments-title/editor-rtl.css\";i:113;s:33:\"comments-title/editor-rtl.min.css\";i:114;s:25:\"comments-title/editor.css\";i:115;s:29:\"comments-title/editor.min.css\";i:116;s:23:\"comments/editor-rtl.css\";i:117;s:27:\"comments/editor-rtl.min.css\";i:118;s:19:\"comments/editor.css\";i:119;s:23:\"comments/editor.min.css\";i:120;s:22:\"comments/style-rtl.css\";i:121;s:26:\"comments/style-rtl.min.css\";i:122;s:18:\"comments/style.css\";i:123;s:22:\"comments/style.min.css\";i:124;s:20:\"cover/editor-rtl.css\";i:125;s:24:\"cover/editor-rtl.min.css\";i:126;s:16:\"cover/editor.css\";i:127;s:20:\"cover/editor.min.css\";i:128;s:19:\"cover/style-rtl.css\";i:129;s:23:\"cover/style-rtl.min.css\";i:130;s:15:\"cover/style.css\";i:131;s:19:\"cover/style.min.css\";i:132;s:22:\"details/editor-rtl.css\";i:133;s:26:\"details/editor-rtl.min.css\";i:134;s:18:\"details/editor.css\";i:135;s:22:\"details/editor.min.css\";i:136;s:21:\"details/style-rtl.css\";i:137;s:25:\"details/style-rtl.min.css\";i:138;s:17:\"details/style.css\";i:139;s:21:\"details/style.min.css\";i:140;s:20:\"embed/editor-rtl.css\";i:141;s:24:\"embed/editor-rtl.min.css\";i:142;s:16:\"embed/editor.css\";i:143;s:20:\"embed/editor.min.css\";i:144;s:19:\"embed/style-rtl.css\";i:145;s:23:\"embed/style-rtl.min.css\";i:146;s:15:\"embed/style.css\";i:147;s:19:\"embed/style.min.css\";i:148;s:19:\"embed/theme-rtl.css\";i:149;s:23:\"embed/theme-rtl.min.css\";i:150;s:15:\"embed/theme.css\";i:151;s:19:\"embed/theme.min.css\";i:152;s:19:\"file/editor-rtl.css\";i:153;s:23:\"file/editor-rtl.min.css\";i:154;s:15:\"file/editor.css\";i:155;s:19:\"file/editor.min.css\";i:156;s:18:\"file/style-rtl.css\";i:157;s:22:\"file/style-rtl.min.css\";i:158;s:14:\"file/style.css\";i:159;s:18:\"file/style.min.css\";i:160;s:23:\"footnotes/style-rtl.css\";i:161;s:27:\"footnotes/style-rtl.min.css\";i:162;s:19:\"footnotes/style.css\";i:163;s:23:\"footnotes/style.min.css\";i:164;s:23:\"freeform/editor-rtl.css\";i:165;s:27:\"freeform/editor-rtl.min.css\";i:166;s:19:\"freeform/editor.css\";i:167;s:23:\"freeform/editor.min.css\";i:168;s:22:\"gallery/editor-rtl.css\";i:169;s:26:\"gallery/editor-rtl.min.css\";i:170;s:18:\"gallery/editor.css\";i:171;s:22:\"gallery/editor.min.css\";i:172;s:21:\"gallery/style-rtl.css\";i:173;s:25:\"gallery/style-rtl.min.css\";i:174;s:17:\"gallery/style.css\";i:175;s:21:\"gallery/style.min.css\";i:176;s:21:\"gallery/theme-rtl.css\";i:177;s:25:\"gallery/theme-rtl.min.css\";i:178;s:17:\"gallery/theme.css\";i:179;s:21:\"gallery/theme.min.css\";i:180;s:20:\"group/editor-rtl.css\";i:181;s:24:\"group/editor-rtl.min.css\";i:182;s:16:\"group/editor.css\";i:183;s:20:\"group/editor.min.css\";i:184;s:19:\"group/style-rtl.css\";i:185;s:23:\"group/style-rtl.min.css\";i:186;s:15:\"group/style.css\";i:187;s:19:\"group/style.min.css\";i:188;s:19:\"group/theme-rtl.css\";i:189;s:23:\"group/theme-rtl.min.css\";i:190;s:15:\"group/theme.css\";i:191;s:19:\"group/theme.min.css\";i:192;s:21:\"heading/style-rtl.css\";i:193;s:25:\"heading/style-rtl.min.css\";i:194;s:17:\"heading/style.css\";i:195;s:21:\"heading/style.min.css\";i:196;s:19:\"html/editor-rtl.css\";i:197;s:23:\"html/editor-rtl.min.css\";i:198;s:15:\"html/editor.css\";i:199;s:19:\"html/editor.min.css\";i:200;s:20:\"image/editor-rtl.css\";i:201;s:24:\"image/editor-rtl.min.css\";i:202;s:16:\"image/editor.css\";i:203;s:20:\"image/editor.min.css\";i:204;s:19:\"image/style-rtl.css\";i:205;s:23:\"image/style-rtl.min.css\";i:206;s:15:\"image/style.css\";i:207;s:19:\"image/style.min.css\";i:208;s:19:\"image/theme-rtl.css\";i:209;s:23:\"image/theme-rtl.min.css\";i:210;s:15:\"image/theme.css\";i:211;s:19:\"image/theme.min.css\";i:212;s:29:\"latest-comments/style-rtl.css\";i:213;s:33:\"latest-comments/style-rtl.min.css\";i:214;s:25:\"latest-comments/style.css\";i:215;s:29:\"latest-comments/style.min.css\";i:216;s:27:\"latest-posts/editor-rtl.css\";i:217;s:31:\"latest-posts/editor-rtl.min.css\";i:218;s:23:\"latest-posts/editor.css\";i:219;s:27:\"latest-posts/editor.min.css\";i:220;s:26:\"latest-posts/style-rtl.css\";i:221;s:30:\"latest-posts/style-rtl.min.css\";i:222;s:22:\"latest-posts/style.css\";i:223;s:26:\"latest-posts/style.min.css\";i:224;s:18:\"list/style-rtl.css\";i:225;s:22:\"list/style-rtl.min.css\";i:226;s:14:\"list/style.css\";i:227;s:18:\"list/style.min.css\";i:228;s:22:\"loginout/style-rtl.css\";i:229;s:26:\"loginout/style-rtl.min.css\";i:230;s:18:\"loginout/style.css\";i:231;s:22:\"loginout/style.min.css\";i:232;s:25:\"media-text/editor-rtl.css\";i:233;s:29:\"media-text/editor-rtl.min.css\";i:234;s:21:\"media-text/editor.css\";i:235;s:25:\"media-text/editor.min.css\";i:236;s:24:\"media-text/style-rtl.css\";i:237;s:28:\"media-text/style-rtl.min.css\";i:238;s:20:\"media-text/style.css\";i:239;s:24:\"media-text/style.min.css\";i:240;s:19:\"more/editor-rtl.css\";i:241;s:23:\"more/editor-rtl.min.css\";i:242;s:15:\"more/editor.css\";i:243;s:19:\"more/editor.min.css\";i:244;s:30:\"navigation-link/editor-rtl.css\";i:245;s:34:\"navigation-link/editor-rtl.min.css\";i:246;s:26:\"navigation-link/editor.css\";i:247;s:30:\"navigation-link/editor.min.css\";i:248;s:29:\"navigation-link/style-rtl.css\";i:249;s:33:\"navigation-link/style-rtl.min.css\";i:250;s:25:\"navigation-link/style.css\";i:251;s:29:\"navigation-link/style.min.css\";i:252;s:33:\"navigation-submenu/editor-rtl.css\";i:253;s:37:\"navigation-submenu/editor-rtl.min.css\";i:254;s:29:\"navigation-submenu/editor.css\";i:255;s:33:\"navigation-submenu/editor.min.css\";i:256;s:25:\"navigation/editor-rtl.css\";i:257;s:29:\"navigation/editor-rtl.min.css\";i:258;s:21:\"navigation/editor.css\";i:259;s:25:\"navigation/editor.min.css\";i:260;s:24:\"navigation/style-rtl.css\";i:261;s:28:\"navigation/style-rtl.min.css\";i:262;s:20:\"navigation/style.css\";i:263;s:24:\"navigation/style.min.css\";i:264;s:23:\"nextpage/editor-rtl.css\";i:265;s:27:\"nextpage/editor-rtl.min.css\";i:266;s:19:\"nextpage/editor.css\";i:267;s:23:\"nextpage/editor.min.css\";i:268;s:24:\"page-list/editor-rtl.css\";i:269;s:28:\"page-list/editor-rtl.min.css\";i:270;s:20:\"page-list/editor.css\";i:271;s:24:\"page-list/editor.min.css\";i:272;s:23:\"page-list/style-rtl.css\";i:273;s:27:\"page-list/style-rtl.min.css\";i:274;s:19:\"page-list/style.css\";i:275;s:23:\"page-list/style.min.css\";i:276;s:24:\"paragraph/editor-rtl.css\";i:277;s:28:\"paragraph/editor-rtl.min.css\";i:278;s:20:\"paragraph/editor.css\";i:279;s:24:\"paragraph/editor.min.css\";i:280;s:23:\"paragraph/style-rtl.css\";i:281;s:27:\"paragraph/style-rtl.min.css\";i:282;s:19:\"paragraph/style.css\";i:283;s:23:\"paragraph/style.min.css\";i:284;s:35:\"post-author-biography/style-rtl.css\";i:285;s:39:\"post-author-biography/style-rtl.min.css\";i:286;s:31:\"post-author-biography/style.css\";i:287;s:35:\"post-author-biography/style.min.css\";i:288;s:30:\"post-author-name/style-rtl.css\";i:289;s:34:\"post-author-name/style-rtl.min.css\";i:290;s:26:\"post-author-name/style.css\";i:291;s:30:\"post-author-name/style.min.css\";i:292;s:26:\"post-author/editor-rtl.css\";i:293;s:30:\"post-author/editor-rtl.min.css\";i:294;s:22:\"post-author/editor.css\";i:295;s:26:\"post-author/editor.min.css\";i:296;s:25:\"post-author/style-rtl.css\";i:297;s:29:\"post-author/style-rtl.min.css\";i:298;s:21:\"post-author/style.css\";i:299;s:25:\"post-author/style.min.css\";i:300;s:33:\"post-comments-form/editor-rtl.css\";i:301;s:37:\"post-comments-form/editor-rtl.min.css\";i:302;s:29:\"post-comments-form/editor.css\";i:303;s:33:\"post-comments-form/editor.min.css\";i:304;s:32:\"post-comments-form/style-rtl.css\";i:305;s:36:\"post-comments-form/style-rtl.min.css\";i:306;s:28:\"post-comments-form/style.css\";i:307;s:32:\"post-comments-form/style.min.css\";i:308;s:27:\"post-content/editor-rtl.css\";i:309;s:31:\"post-content/editor-rtl.min.css\";i:310;s:23:\"post-content/editor.css\";i:311;s:27:\"post-content/editor.min.css\";i:312;s:26:\"post-content/style-rtl.css\";i:313;s:30:\"post-content/style-rtl.min.css\";i:314;s:22:\"post-content/style.css\";i:315;s:26:\"post-content/style.min.css\";i:316;s:23:\"post-date/style-rtl.css\";i:317;s:27:\"post-date/style-rtl.min.css\";i:318;s:19:\"post-date/style.css\";i:319;s:23:\"post-date/style.min.css\";i:320;s:27:\"post-excerpt/editor-rtl.css\";i:321;s:31:\"post-excerpt/editor-rtl.min.css\";i:322;s:23:\"post-excerpt/editor.css\";i:323;s:27:\"post-excerpt/editor.min.css\";i:324;s:26:\"post-excerpt/style-rtl.css\";i:325;s:30:\"post-excerpt/style-rtl.min.css\";i:326;s:22:\"post-excerpt/style.css\";i:327;s:26:\"post-excerpt/style.min.css\";i:328;s:34:\"post-featured-image/editor-rtl.css\";i:329;s:38:\"post-featured-image/editor-rtl.min.css\";i:330;s:30:\"post-featured-image/editor.css\";i:331;s:34:\"post-featured-image/editor.min.css\";i:332;s:33:\"post-featured-image/style-rtl.css\";i:333;s:37:\"post-featured-image/style-rtl.min.css\";i:334;s:29:\"post-featured-image/style.css\";i:335;s:33:\"post-featured-image/style.min.css\";i:336;s:34:\"post-navigation-link/style-rtl.css\";i:337;s:38:\"post-navigation-link/style-rtl.min.css\";i:338;s:30:\"post-navigation-link/style.css\";i:339;s:34:\"post-navigation-link/style.min.css\";i:340;s:28:\"post-template/editor-rtl.css\";i:341;s:32:\"post-template/editor-rtl.min.css\";i:342;s:24:\"post-template/editor.css\";i:343;s:28:\"post-template/editor.min.css\";i:344;s:27:\"post-template/style-rtl.css\";i:345;s:31:\"post-template/style-rtl.min.css\";i:346;s:23:\"post-template/style.css\";i:347;s:27:\"post-template/style.min.css\";i:348;s:24:\"post-terms/style-rtl.css\";i:349;s:28:\"post-terms/style-rtl.min.css\";i:350;s:20:\"post-terms/style.css\";i:351;s:24:\"post-terms/style.min.css\";i:352;s:24:\"post-title/style-rtl.css\";i:353;s:28:\"post-title/style-rtl.min.css\";i:354;s:20:\"post-title/style.css\";i:355;s:24:\"post-title/style.min.css\";i:356;s:26:\"preformatted/style-rtl.css\";i:357;s:30:\"preformatted/style-rtl.min.css\";i:358;s:22:\"preformatted/style.css\";i:359;s:26:\"preformatted/style.min.css\";i:360;s:24:\"pullquote/editor-rtl.css\";i:361;s:28:\"pullquote/editor-rtl.min.css\";i:362;s:20:\"pullquote/editor.css\";i:363;s:24:\"pullquote/editor.min.css\";i:364;s:23:\"pullquote/style-rtl.css\";i:365;s:27:\"pullquote/style-rtl.min.css\";i:366;s:19:\"pullquote/style.css\";i:367;s:23:\"pullquote/style.min.css\";i:368;s:23:\"pullquote/theme-rtl.css\";i:369;s:27:\"pullquote/theme-rtl.min.css\";i:370;s:19:\"pullquote/theme.css\";i:371;s:23:\"pullquote/theme.min.css\";i:372;s:39:\"query-pagination-numbers/editor-rtl.css\";i:373;s:43:\"query-pagination-numbers/editor-rtl.min.css\";i:374;s:35:\"query-pagination-numbers/editor.css\";i:375;s:39:\"query-pagination-numbers/editor.min.css\";i:376;s:31:\"query-pagination/editor-rtl.css\";i:377;s:35:\"query-pagination/editor-rtl.min.css\";i:378;s:27:\"query-pagination/editor.css\";i:379;s:31:\"query-pagination/editor.min.css\";i:380;s:30:\"query-pagination/style-rtl.css\";i:381;s:34:\"query-pagination/style-rtl.min.css\";i:382;s:26:\"query-pagination/style.css\";i:383;s:30:\"query-pagination/style.min.css\";i:384;s:25:\"query-title/style-rtl.css\";i:385;s:29:\"query-title/style-rtl.min.css\";i:386;s:21:\"query-title/style.css\";i:387;s:25:\"query-title/style.min.css\";i:388;s:20:\"query/editor-rtl.css\";i:389;s:24:\"query/editor-rtl.min.css\";i:390;s:16:\"query/editor.css\";i:391;s:20:\"query/editor.min.css\";i:392;s:19:\"quote/style-rtl.css\";i:393;s:23:\"quote/style-rtl.min.css\";i:394;s:15:\"quote/style.css\";i:395;s:19:\"quote/style.min.css\";i:396;s:19:\"quote/theme-rtl.css\";i:397;s:23:\"quote/theme-rtl.min.css\";i:398;s:15:\"quote/theme.css\";i:399;s:19:\"quote/theme.min.css\";i:400;s:23:\"read-more/style-rtl.css\";i:401;s:27:\"read-more/style-rtl.min.css\";i:402;s:19:\"read-more/style.css\";i:403;s:23:\"read-more/style.min.css\";i:404;s:18:\"rss/editor-rtl.css\";i:405;s:22:\"rss/editor-rtl.min.css\";i:406;s:14:\"rss/editor.css\";i:407;s:18:\"rss/editor.min.css\";i:408;s:17:\"rss/style-rtl.css\";i:409;s:21:\"rss/style-rtl.min.css\";i:410;s:13:\"rss/style.css\";i:411;s:17:\"rss/style.min.css\";i:412;s:21:\"search/editor-rtl.css\";i:413;s:25:\"search/editor-rtl.min.css\";i:414;s:17:\"search/editor.css\";i:415;s:21:\"search/editor.min.css\";i:416;s:20:\"search/style-rtl.css\";i:417;s:24:\"search/style-rtl.min.css\";i:418;s:16:\"search/style.css\";i:419;s:20:\"search/style.min.css\";i:420;s:20:\"search/theme-rtl.css\";i:421;s:24:\"search/theme-rtl.min.css\";i:422;s:16:\"search/theme.css\";i:423;s:20:\"search/theme.min.css\";i:424;s:24:\"separator/editor-rtl.css\";i:425;s:28:\"separator/editor-rtl.min.css\";i:426;s:20:\"separator/editor.css\";i:427;s:24:\"separator/editor.min.css\";i:428;s:23:\"separator/style-rtl.css\";i:429;s:27:\"separator/style-rtl.min.css\";i:430;s:19:\"separator/style.css\";i:431;s:23:\"separator/style.min.css\";i:432;s:23:\"separator/theme-rtl.css\";i:433;s:27:\"separator/theme-rtl.min.css\";i:434;s:19:\"separator/theme.css\";i:435;s:23:\"separator/theme.min.css\";i:436;s:24:\"shortcode/editor-rtl.css\";i:437;s:28:\"shortcode/editor-rtl.min.css\";i:438;s:20:\"shortcode/editor.css\";i:439;s:24:\"shortcode/editor.min.css\";i:440;s:24:\"site-logo/editor-rtl.css\";i:441;s:28:\"site-logo/editor-rtl.min.css\";i:442;s:20:\"site-logo/editor.css\";i:443;s:24:\"site-logo/editor.min.css\";i:444;s:23:\"site-logo/style-rtl.css\";i:445;s:27:\"site-logo/style-rtl.min.css\";i:446;s:19:\"site-logo/style.css\";i:447;s:23:\"site-logo/style.min.css\";i:448;s:27:\"site-tagline/editor-rtl.css\";i:449;s:31:\"site-tagline/editor-rtl.min.css\";i:450;s:23:\"site-tagline/editor.css\";i:451;s:27:\"site-tagline/editor.min.css\";i:452;s:26:\"site-tagline/style-rtl.css\";i:453;s:30:\"site-tagline/style-rtl.min.css\";i:454;s:22:\"site-tagline/style.css\";i:455;s:26:\"site-tagline/style.min.css\";i:456;s:25:\"site-title/editor-rtl.css\";i:457;s:29:\"site-title/editor-rtl.min.css\";i:458;s:21:\"site-title/editor.css\";i:459;s:25:\"site-title/editor.min.css\";i:460;s:24:\"site-title/style-rtl.css\";i:461;s:28:\"site-title/style-rtl.min.css\";i:462;s:20:\"site-title/style.css\";i:463;s:24:\"site-title/style.min.css\";i:464;s:26:\"social-link/editor-rtl.css\";i:465;s:30:\"social-link/editor-rtl.min.css\";i:466;s:22:\"social-link/editor.css\";i:467;s:26:\"social-link/editor.min.css\";i:468;s:27:\"social-links/editor-rtl.css\";i:469;s:31:\"social-links/editor-rtl.min.css\";i:470;s:23:\"social-links/editor.css\";i:471;s:27:\"social-links/editor.min.css\";i:472;s:26:\"social-links/style-rtl.css\";i:473;s:30:\"social-links/style-rtl.min.css\";i:474;s:22:\"social-links/style.css\";i:475;s:26:\"social-links/style.min.css\";i:476;s:21:\"spacer/editor-rtl.css\";i:477;s:25:\"spacer/editor-rtl.min.css\";i:478;s:17:\"spacer/editor.css\";i:479;s:21:\"spacer/editor.min.css\";i:480;s:20:\"spacer/style-rtl.css\";i:481;s:24:\"spacer/style-rtl.min.css\";i:482;s:16:\"spacer/style.css\";i:483;s:20:\"spacer/style.min.css\";i:484;s:20:\"table/editor-rtl.css\";i:485;s:24:\"table/editor-rtl.min.css\";i:486;s:16:\"table/editor.css\";i:487;s:20:\"table/editor.min.css\";i:488;s:19:\"table/style-rtl.css\";i:489;s:23:\"table/style-rtl.min.css\";i:490;s:15:\"table/style.css\";i:491;s:19:\"table/style.min.css\";i:492;s:19:\"table/theme-rtl.css\";i:493;s:23:\"table/theme-rtl.min.css\";i:494;s:15:\"table/theme.css\";i:495;s:19:\"table/theme.min.css\";i:496;s:24:\"tag-cloud/editor-rtl.css\";i:497;s:28:\"tag-cloud/editor-rtl.min.css\";i:498;s:20:\"tag-cloud/editor.css\";i:499;s:24:\"tag-cloud/editor.min.css\";i:500;s:23:\"tag-cloud/style-rtl.css\";i:501;s:27:\"tag-cloud/style-rtl.min.css\";i:502;s:19:\"tag-cloud/style.css\";i:503;s:23:\"tag-cloud/style.min.css\";i:504;s:28:\"template-part/editor-rtl.css\";i:505;s:32:\"template-part/editor-rtl.min.css\";i:506;s:24:\"template-part/editor.css\";i:507;s:28:\"template-part/editor.min.css\";i:508;s:27:\"template-part/theme-rtl.css\";i:509;s:31:\"template-part/theme-rtl.min.css\";i:510;s:23:\"template-part/theme.css\";i:511;s:27:\"template-part/theme.min.css\";i:512;s:30:\"term-description/style-rtl.css\";i:513;s:34:\"term-description/style-rtl.min.css\";i:514;s:26:\"term-description/style.css\";i:515;s:30:\"term-description/style.min.css\";i:516;s:27:\"text-columns/editor-rtl.css\";i:517;s:31:\"text-columns/editor-rtl.min.css\";i:518;s:23:\"text-columns/editor.css\";i:519;s:27:\"text-columns/editor.min.css\";i:520;s:26:\"text-columns/style-rtl.css\";i:521;s:30:\"text-columns/style-rtl.min.css\";i:522;s:22:\"text-columns/style.css\";i:523;s:26:\"text-columns/style.min.css\";i:524;s:19:\"verse/style-rtl.css\";i:525;s:23:\"verse/style-rtl.min.css\";i:526;s:15:\"verse/style.css\";i:527;s:19:\"verse/style.min.css\";i:528;s:20:\"video/editor-rtl.css\";i:529;s:24:\"video/editor-rtl.min.css\";i:530;s:16:\"video/editor.css\";i:531;s:20:\"video/editor.min.css\";i:532;s:19:\"video/style-rtl.css\";i:533;s:23:\"video/style-rtl.min.css\";i:534;s:15:\"video/style.css\";i:535;s:19:\"video/style.min.css\";i:536;s:19:\"video/theme-rtl.css\";i:537;s:23:\"video/theme-rtl.min.css\";i:538;s:15:\"video/theme.css\";i:539;s:19:\"video/theme.min.css\";}}','on'),(124,'_transient_doing_cron','1743531658.5035851001739501953125','on'),(125,'_site_transient_update_plugins','O:8:\"stdClass\":4:{s:12:\"last_checked\";i:1743023558;s:8:\"response\";a:0:{}s:12:\"translations\";a:0:{}s:9:\"no_update\";a:5:{s:9:\"hello.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:25:\"w.org/plugins/hello-dolly\";s:4:\"slug\";s:11:\"hello-dolly\";s:6:\"plugin\";s:9:\"hello.php\";s:11:\"new_version\";s:5:\"1.7.2\";s:3:\"url\";s:42:\"https://wordpress.org/plugins/hello-dolly/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/plugin/hello-dolly.1.7.3.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:64:\"https://ps.w.org/hello-dolly/assets/icon-256x256.jpg?rev=2052855\";s:2:\"1x\";s:64:\"https://ps.w.org/hello-dolly/assets/icon-128x128.jpg?rev=2052855\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:67:\"https://ps.w.org/hello-dolly/assets/banner-1544x500.jpg?rev=2645582\";s:2:\"1x\";s:66:\"https://ps.w.org/hello-dolly/assets/banner-772x250.jpg?rev=2052855\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"4.6\";}s:25:\"wp-graphql/wp-graphql.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:24:\"w.org/plugins/wp-graphql\";s:4:\"slug\";s:10:\"wp-graphql\";s:6:\"plugin\";s:25:\"wp-graphql/wp-graphql.php\";s:11:\"new_version\";s:5:\"2.1.1\";s:3:\"url\";s:41:\"https://wordpress.org/plugins/wp-graphql/\";s:7:\"package\";s:53:\"https://downloads.wordpress.org/plugin/wp-graphql.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:63:\"https://ps.w.org/wp-graphql/assets/icon-256x256.png?rev=3111985\";s:2:\"1x\";s:63:\"https://ps.w.org/wp-graphql/assets/icon-128x128.png?rev=3111985\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:66:\"https://ps.w.org/wp-graphql/assets/banner-1544x500.png?rev=3111985\";s:2:\"1x\";s:65:\"https://ps.w.org/wp-graphql/assets/banner-772x250.png?rev=3111985\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"6.0\";}s:31:\"wpgraphql-acf/wpgraphql-acf.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:27:\"w.org/plugins/wpgraphql-acf\";s:4:\"slug\";s:13:\"wpgraphql-acf\";s:6:\"plugin\";s:31:\"wpgraphql-acf/wpgraphql-acf.php\";s:11:\"new_version\";s:5:\"2.4.1\";s:3:\"url\";s:44:\"https://wordpress.org/plugins/wpgraphql-acf/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/plugin/wpgraphql-acf.2.4.1.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:66:\"https://ps.w.org/wpgraphql-acf/assets/icon-256x256.png?rev=3125402\";s:2:\"1x\";s:66:\"https://ps.w.org/wpgraphql-acf/assets/icon-128x128.png?rev=3125402\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:69:\"https://ps.w.org/wpgraphql-acf/assets/banner-1544x500.png?rev=3125402\";s:2:\"1x\";s:68:\"https://ps.w.org/wpgraphql-acf/assets/banner-772x250.png?rev=3125402\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"5.9\";}s:31:\"wpgraphql-ide/wpgraphql-ide.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:27:\"w.org/plugins/wpgraphql-ide\";s:4:\"slug\";s:13:\"wpgraphql-ide\";s:6:\"plugin\";s:31:\"wpgraphql-ide/wpgraphql-ide.php\";s:11:\"new_version\";s:5:\"4.0.3\";s:3:\"url\";s:44:\"https://wordpress.org/plugins/wpgraphql-ide/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/plugin/wpgraphql-ide.4.0.3.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:66:\"https://ps.w.org/wpgraphql-ide/assets/icon-256x256.png?rev=3248045\";s:2:\"1x\";s:66:\"https://ps.w.org/wpgraphql-ide/assets/icon-128x128.png?rev=3248045\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:69:\"https://ps.w.org/wpgraphql-ide/assets/banner-1544x500.png?rev=3248045\";s:2:\"1x\";s:68:\"https://ps.w.org/wpgraphql-ide/assets/banner-772x250.png?rev=3248045\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"5.7\";}s:37:\"advanced-custom-fields-6.3.12/acf.php\";O:8:\"stdClass\":12:{s:4:\"slug\";s:22:\"advanced-custom-fields\";s:6:\"plugin\";s:37:\"advanced-custom-fields-6.3.12/acf.php\";s:11:\"new_version\";s:6:\"6.3.12\";s:3:\"url\";s:36:\"https://www.advancedcustomfields.com\";s:6:\"tested\";s:5:\"6.7.2\";s:7:\"package\";s:0:\"\";s:5:\"icons\";a:1:{s:7:\"default\";s:64:\"https://connect.advancedcustomfields.com/assets/icon-256x256.png\";}s:7:\"banners\";a:2:{s:3:\"low\";s:66:\"https://connect.advancedcustomfields.com/assets/banner-772x250.jpg\";s:4:\"high\";s:67:\"https://connect.advancedcustomfields.com/assets/banner-1544x500.jpg\";}s:8:\"requires\";s:3:\"6.0\";s:12:\"requires_php\";s:3:\"7.4\";s:12:\"release_date\";s:8:\"20250121\";s:6:\"reason\";s:10:\"up_to_date\";}}}','off'),(126,'wp_graphql_version','2.1.1','auto'),(127,'wpgraphql_ide_capabilities','66867b6d9cfe967eef8f8026bfe52701','auto'),(128,'acf_first_activated_version','6.3.12','on'),(129,'acf_site_health','{\"event_first_activated\":1742926235,\"last_updated\":1742926235}','off'),(132,'upload_space_check_disabled','1','off'),(133,'acf_version','6.3.12','auto'),(134,'graphql_general_settings','','auto'),(135,'graphql_ide_settings','','auto'),(138,'_transient_timeout_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3','1743545003','off'),(139,'_transient_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3','1743501803','off'),(142,'_transient_timeout_feed_mod_d117b5738fbd35bd8c0391cda1f2b5d9','1743545004','off'),(143,'_transient_feed_mod_d117b5738fbd35bd8c0391cda1f2b5d9','1743501804','off'),(148,'wpesu-plugin-wp-graphql-content-blocks-expiry','1742946300','off'),(149,'wpesu-plugin-wp-graphql-content-blocks','{\n \"name\": \"WPGraphQL Content Blocks\",\n \"slug\": \"wp-graphql-content-blocks\",\n \"version\": \"4.8.2\",\n \"author\": \"WP Engine\",\n \"author_profile\": \"https://profiles.wordpress.org/wpengine/\",\n \"contributors\": {\n \"justlevine\": {\n \"profile\": \"https://profiles.wordpress.org/justlevine/\",\n \"avatar\": \"https://secure.gravatar.com/avatar/33212bff2915bd72792772a2d3203abe0402352b6be6ba65081036f10560c6e6?r=g\",\n \"display_name\": \"justlevine\"\n },\n \"wpengine\": {\n \"profile\": \"https://profiles.wordpress.org/wpengine/\",\n \"avatar\": \"https://secure.gravatar.com/avatar/6d44461b684d2f3d8f6fcf3d657cb889?s=96&d=monsterid&r=g\",\n \"display_name\": \"WP Engine\"\n }\n },\n \"requires\": \"5.7\",\n \"tested\": \"6.7.2\",\n \"requires_php\": \"7.4\",\n \"requires_plugins\": [],\n \"rating\": 100,\n \"ratings\": {\n \"5\": 1,\n \"4\": 0,\n \"3\": 0,\n \"2\": 0,\n \"1\": 0\n },\n \"num_ratings\": 1,\n \"support_url\": \"https://github.com/wpengine/wp-graphql-content-blocks/issues\",\n \"support_threads\": 0,\n \"support_threads_resolved\": 0,\n \"active_installs\": 10,\n \"last_updated\": \"2025-03-05 18:23 GMT\",\n \"added\": \"2025-02-10\",\n \"homepage\": \"https://github.com/wpengine/wp-graphql-content-blocks/\",\n \"sections\": {\n \"description\": \"WordPress plugin that extends WPGraphQL to support querying (Gutenberg) Blocks as data.\",\n \"changelog\": \"

4.8.2

  • Fixes fatal error for the Site Health info page for Semver checks.
  • 4.8.1

  • Fixes fatal error when you de-activate WPGraphQL
  • 4.8.0

  • Querying Object-Type Block Attributes in WPGraphQL
  • 4.7.0

  • Adds support for resolving and returning related term items as a terms connection for the CorePostTerms block along with taxonomy connection. Adds support for resolving and returning the prefix and suffix items within the correspondent fields of the CorePostTerms block.
  • \",\n \"installation\": \"https://faustjs.org/tutorial/get-started-with-wp-graphql-content-blocks\",\n \"reviews\": \"\"\n },\n \"download_link\": \"https://wpe-plugin-updates.wpengine.com/wp-graphql-content-blocks/wp-graphql-content-blocks.4.8.2.zip\",\n \"upgrade_notice\": [],\n \"screenshots\": {},\n \"tags\": {},\n \"versions\": {\n \"4.6.0\": \"https://wpe-plugin-updates.wpengine.com/wp-graphql-content-blocks/wp-graphql-content-blocks.4.6.0.zip\",\n \"4.7.0\": \"https://wpe-plugin-updates.wpengine.com/wp-graphql-content-blocks/wp-graphql-content-blocks.4.7.0.zip\",\n \"4.8.0\": \"https://wpe-plugin-updates.wpengine.com/wp-graphql-content-blocks/wp-graphql-content-blocks.4.8.0.zip\",\n \"4.8.1\": \"https://wpe-plugin-updates.wpengine.com/wp-graphql-content-blocks/wp-graphql-content-blocks.4.8.1.zip\",\n \"4.8.2\": \"https://wpe-plugin-updates.wpengine.com/wp-graphql-content-blocks/wp-graphql-content-blocks.4.8.2.zip\"\n },\n \"business_model\": false,\n \"repository_url\": \"\",\n \"commercial_support_url\": \"\",\n \"donate_link\": \"\",\n \"banners\": {},\n \"preview_link\": \"\",\n \"stable_tag\": \"4.8.2\",\n \"pluginURI\": \"https://developers.wpengine.com/\",\n \"description\": \"WordPress plugin that extends WPGraphQL to support querying (Gutenberg) Blocks as data.\",\n \"authorURI\": \"https://wpengine.com/\",\n \"textDomain\": \"wp-graphql-content-blocks\",\n \"network\": \"\"\n}\n','off'),(150,'theme_mods_twentytwentyfive','a:1:{s:18:\"custom_css_post_id\";i:-1;}','auto'),(151,'_transient_wp_styles_for_blocks','a:2:{s:4:\"hash\";s:32:\"6a64f06d5174183821b9e5e1b0e89c36\";s:6:\"blocks\";a:52:{s:11:\"core/button\";s:0:\"\";s:14:\"core/site-logo\";s:0:\"\";s:18:\"core/post-template\";s:0:\"\";s:12:\"core/columns\";s:769:\":root :where(.wp-block-columns-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-columns-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-flow) > *{margin-block-start: var(--wp--preset--spacing--50);margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-columns-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-constrained) > *{margin-block-start: var(--wp--preset--spacing--50);margin-block-end: 0;}:root :where(.wp-block-columns-is-layout-flex){gap: var(--wp--preset--spacing--50);}:root :where(.wp-block-columns-is-layout-grid){gap: var(--wp--preset--spacing--50);}\";s:14:\"core/pullquote\";s:306:\":root :where(.wp-block-pullquote){font-size: var(--wp--preset--font-size--xx-large);font-weight: 300;line-height: 1.2;padding-top: var(--wp--preset--spacing--30);padding-bottom: var(--wp--preset--spacing--30);}:root :where(.wp-block-pullquote p:last-of-type){margin-bottom: var(--wp--preset--spacing--30);}\";s:32:\"c48738dcb285a3f6ab83acff204fc486\";s:106:\":root :where(.wp-block-pullquote cite){font-size: var(--wp--preset--font-size--small);font-style: normal;}\";s:11:\"core/avatar\";s:57:\":root :where(.wp-block-avatar img){border-radius: 100px;}\";s:12:\"core/buttons\";s:665:\":root :where(.wp-block-buttons-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-buttons-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-flow) > *{margin-block-start: 16px;margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-constrained) > *{margin-block-start: 16px;margin-block-end: 0;}:root :where(.wp-block-buttons-is-layout-flex){gap: 16px;}:root :where(.wp-block-buttons-is-layout-grid){gap: 16px;}\";s:9:\"core/code\";s:427:\":root :where(.wp-block-code){background-color: var(--wp--preset--color--accent-5);color: var(--wp--preset--color--contrast);font-family: var(--wp--preset--font-family--fira-code);font-size: var(--wp--preset--font-size--medium);font-weight: 300;padding-top: var(--wp--preset--spacing--40);padding-right: var(--wp--preset--spacing--40);padding-bottom: var(--wp--preset--spacing--40);padding-left: var(--wp--preset--spacing--40);}\";s:24:\"core/comment-author-name\";s:169:\":root :where(.wp-block-comment-author-name){color: var(--wp--preset--color--accent-4);font-size: var(--wp--preset--font-size--small);margin-top: 5px;margin-bottom: 0px;}\";s:32:\"c0002c260f8238c4212f3e4c369fc4f7\";s:143:\":root :where(.wp-block-comment-author-name a:where(:not(.wp-element-button))){color: var(--wp--preset--color--accent-4);text-decoration: none;}\";s:32:\"1e7c38b45537b325dbbbaec17a301676\";s:112:\":root :where(.wp-block-comment-author-name a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:20:\"core/comment-content\";s:178:\":root :where(.wp-block-comment-content){font-size: var(--wp--preset--font-size--medium);margin-top: var(--wp--preset--spacing--30);margin-bottom: var(--wp--preset--spacing--30);}\";s:17:\"core/comment-date\";s:127:\":root :where(.wp-block-comment-date){color: var(--wp--preset--color--contrast);font-size: var(--wp--preset--font-size--small);}\";s:32:\"c83ca7b3e52884c70f7830c54f99b318\";s:114:\":root :where(.wp-block-comment-date a:where(:not(.wp-element-button))){color: var(--wp--preset--color--contrast);}\";s:22:\"core/comment-edit-link\";s:90:\":root :where(.wp-block-comment-edit-link){font-size: var(--wp--preset--font-size--small);}\";s:32:\"41d70710612536a90e368c12bcb0efea\";s:119:\":root :where(.wp-block-comment-edit-link a:where(:not(.wp-element-button))){color: var(--wp--preset--color--contrast);}\";s:23:\"core/comment-reply-link\";s:91:\":root :where(.wp-block-comment-reply-link){font-size: var(--wp--preset--font-size--small);}\";s:32:\"13c96340dbf37700add1f4c5cae19f3e\";s:120:\":root :where(.wp-block-comment-reply-link a:where(:not(.wp-element-button))){color: var(--wp--preset--color--contrast);}\";s:23:\"core/post-comments-form\";s:565:\":root :where(.wp-block-post-comments-form){font-size: var(--wp--preset--font-size--medium);padding-top: var(--wp--preset--spacing--40);padding-bottom: var(--wp--preset--spacing--40);}:root :where(.wp-block-post-comments-form textarea, .wp-block-post-comments-form input:not([type=submit])){border-radius:.25rem; border-color: var(--wp--preset--color--accent-6) !important;}:root :where(.wp-block-post-comments-form input[type=checkbox]){margin:0 .2rem 0 0 !important;}:root :where(.wp-block-post-comments-form label){font-size: var(--wp--preset--font-size--small);}\";s:24:\"core/comments-pagination\";s:182:\":root :where(.wp-block-comments-pagination){font-size: var(--wp--preset--font-size--medium);margin-top: var(--wp--preset--spacing--40);margin-bottom: var(--wp--preset--spacing--40);}\";s:29:\"core/comments-pagination-next\";s:98:\":root :where(.wp-block-comments-pagination-next){font-size: var(--wp--preset--font-size--medium);}\";s:32:\"core/comments-pagination-numbers\";s:101:\":root :where(.wp-block-comments-pagination-numbers){font-size: var(--wp--preset--font-size--medium);}\";s:33:\"core/comments-pagination-previous\";s:102:\":root :where(.wp-block-comments-pagination-previous){font-size: var(--wp--preset--font-size--medium);}\";s:14:\"core/post-date\";s:124:\":root :where(.wp-block-post-date){color: var(--wp--preset--color--accent-4);font-size: var(--wp--preset--font-size--small);}\";s:32:\"ac0d4e00f5ec22d14451759983e5bd43\";s:133:\":root :where(.wp-block-post-date a:where(:not(.wp-element-button))){color: var(--wp--preset--color--accent-4);text-decoration: none;}\";s:32:\"0ae6ffd1b886044c2da62d75d05ab13d\";s:102:\":root :where(.wp-block-post-date a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:25:\"core/post-navigation-link\";s:94:\":root :where(.wp-block-post-navigation-link){font-size: var(--wp--preset--font-size--medium);}\";s:15:\"core/post-terms\";s:158:\":root :where(.wp-block-post-terms){font-size: var(--wp--preset--font-size--small);font-weight: 600;}:root :where(.wp-block-post-terms a){white-space: nowrap;}\";s:15:\"core/post-title\";s:0:\"\";s:32:\"bb496d3fcd9be3502ce57ff8281e5687\";s:92:\":root :where(.wp-block-post-title a:where(:not(.wp-element-button))){text-decoration: none;}\";s:32:\"12380ab98fdc81351bb32a39bbfc9249\";s:103:\":root :where(.wp-block-post-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:10:\"core/quote\";s:1315:\":root :where(.wp-block-quote){border-color: currentColor;border-width: 0 0 0 2px;border-style: solid;font-size: var(--wp--preset--font-size--large);font-weight: 300;margin-right: 0;margin-left: 0;padding-top: var(--wp--preset--spacing--30);padding-right: var(--wp--preset--spacing--40);padding-bottom: var(--wp--preset--spacing--30);padding-left: var(--wp--preset--spacing--40);}:root :where(.wp-block-quote-is-layout-flow) > :first-child{margin-block-start: 0;}:root :where(.wp-block-quote-is-layout-flow) > :last-child{margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-flow) > *{margin-block-start: var(--wp--preset--spacing--30);margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-constrained) > :first-child{margin-block-start: 0;}:root :where(.wp-block-quote-is-layout-constrained) > :last-child{margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-constrained) > *{margin-block-start: var(--wp--preset--spacing--30);margin-block-end: 0;}:root :where(.wp-block-quote-is-layout-flex){gap: var(--wp--preset--spacing--30);}:root :where(.wp-block-quote-is-layout-grid){gap: var(--wp--preset--spacing--30);}:root :where(.wp-block-quote.has-text-align-right ){border-width: 0 2px 0 0;}:root :where(.wp-block-quote.has-text-align-center ){border-width: 0;border-inline: 0; padding-inline: 0;}\";s:32:\"1de7a22e22013106efc5be82788cb6c0\";s:176:\":root :where(.wp-block-quote cite){font-size: var(--wp--preset--font-size--small);font-style: normal;font-weight: 300;}:root :where(.wp-block-quote cite sub){font-size: 0.65em}\";s:21:\"core/query-pagination\";s:107:\":root :where(.wp-block-query-pagination){font-size: var(--wp--preset--font-size--medium);font-weight: 500;}\";s:11:\"core/search\";s:380:\":root :where(.wp-block-search .wp-block-search__label, .wp-block-search .wp-block-search__input, .wp-block-search .wp-block-search__button){font-size: var(--wp--preset--font-size--medium);line-height: 1.6;}:root :where(.wp-block-search .wp-block-search__input){border-radius:3.125rem;padding-left:1.5625rem;padding-right:1.5625rem;border-color:var(--wp--preset--color--accent-6);}\";s:32:\"14fa6a3d0cfbde171cbc0fb04aa8a6cf\";s:138:\":root :where(.wp-block-search .wp-element-button,.wp-block-search .wp-block-button__link){border-radius: 3.125rem;margin-left: 1.125rem;}\";s:32:\"05993ee2f3de94b5d1350998a7e9b6b0\";s:130:\":root :where(.wp-block-search .wp-element-button:hover,.wp-block-search .wp-block-button__link:hover){border-color: transparent;}\";s:14:\"core/separator\";s:148:\":root :where(.wp-block-separator){border-color: currentColor;border-width: 0 0 1px 0;border-style: solid;color: var(--wp--preset--color--accent-6);}\";s:17:\"core/site-tagline\";s:86:\":root :where(.wp-block-site-tagline){font-size: var(--wp--preset--font-size--medium);}\";s:15:\"core/site-title\";s:75:\":root :where(.wp-block-site-title){font-weight: 700;letter-spacing: -.5px;}\";s:32:\"f513d889cf971b13995cc3fffed2f39b\";s:92:\":root :where(.wp-block-site-title a:where(:not(.wp-element-button))){text-decoration: none;}\";s:32:\"22c37a317cc0ebd50155b5ad78564f37\";s:103:\":root :where(.wp-block-site-title a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:21:\"core/term-description\";s:90:\":root :where(.wp-block-term-description){font-size: var(--wp--preset--font-size--medium);}\";s:15:\"core/navigation\";s:84:\":root :where(.wp-block-navigation){font-size: var(--wp--preset--font-size--medium);}\";s:32:\"25289a01850f5a0264ddb79a9a3baf3d\";s:92:\":root :where(.wp-block-navigation a:where(:not(.wp-element-button))){text-decoration: none;}\";s:32:\"026c04da08398d655a95047f1f235d97\";s:103:\":root :where(.wp-block-navigation a:where(:not(.wp-element-button)):hover){text-decoration: underline;}\";s:9:\"core/list\";s:52:\":root :where(.wp-block-list li){margin-top: 0.5rem;}\";s:12:\"core/heading\";s:0:\"\";s:14:\"core/paragraph\";s:0:\"\";s:10:\"core/group\";s:0:\"\";s:11:\"core/column\";s:0:\"\";}}','on'),(152,'WPLANG','','auto'),(153,'new_admin_email','wordpress@example.com','auto'),(158,'recently_activated','a:0:{}','off'),(159,'post_count','9','on'),(160,'category_children','a:0:{}','auto'),(169,'_site_transient_timeout_wp_theme_files_patterns-b24c4b64a1fe6f9f73313f730ddfc1cf','1743025357','off'),(170,'_site_transient_wp_theme_files_patterns-b24c4b64a1fe6f9f73313f730ddfc1cf','a:2:{s:7:\"version\";s:3:\"1.0\";s:8:\"patterns\";a:98:{s:21:\"banner-about-book.php\";a:4:{s:5:\"title\";s:28:\"Banner with book description\";s:4:\"slug\";s:34:\"twentytwentyfive/banner-about-book\";s:11:\"description\";s:66:\"Banner with book description and accompanying image for promotion.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:28:\"banner-cover-big-heading.php\";a:4:{s:5:\"title\";s:22:\"Cover with big heading\";s:4:\"slug\";s:41:\"twentytwentyfive/banner-cover-big-heading\";s:11:\"description\";s:82:\"A full-width cover section with a large background image and an oversized heading.\";s:10:\"categories\";a:3:{i:0;s:6:\"banner\";i:1;s:5:\"about\";i:2;s:8:\"featured\";}}s:22:\"banner-intro-image.php\";a:4:{s:5:\"title\";s:49:\"Short heading and paragraph and image on the left\";s:4:\"slug\";s:35:\"twentytwentyfive/banner-intro-image\";s:11:\"description\";s:68:\"A Intro pattern with Short heading, paragraph and image on the left.\";s:10:\"categories\";a:2:{i:0;s:6:\"banner\";i:1;s:8:\"featured\";}}s:16:\"banner-intro.php\";a:4:{s:5:\"title\";s:35:\"Intro with left-aligned description\";s:4:\"slug\";s:29:\"twentytwentyfive/banner-intro\";s:11:\"description\";s:66:\"A large left-aligned heading with a brand name emphasized in bold.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:17:\"banner-poster.php\";a:4:{s:5:\"title\";s:19:\"Poster-like section\";s:4:\"slug\";s:30:\"twentytwentyfive/banner-poster\";s:11:\"description\";s:78:\"A section that can be used as a banner or a landing page to announce an event.\";s:10:\"categories\";a:2:{i:0;s:6:\"banner\";i:1;s:5:\"media\";}}s:43:\"banner-with-description-and-images-grid.php\";a:4:{s:5:\"title\";s:39:\"Banner with description and images grid\";s:4:\"slug\";s:47:\"twentytwentyfive/banner-description-images-grid\";s:11:\"description\";s:75:\"A banner with a short paragraph, and two images displayed in a grid layout.\";s:10:\"categories\";a:2:{i:0;s:6:\"banner\";i:1;s:8:\"featured\";}}s:18:\"binding-format.php\";a:4:{s:5:\"title\";s:16:\"Post format name\";s:4:\"slug\";s:31:\"twentytwentyfive/binding-format\";s:11:\"description\";s:75:\"Prints the name of the post format with the help of the Block Bindings API.\";s:10:\"categories\";a:1:{i:0;s:28:\"twentytwentyfive_post-format\";}}s:12:\"comments.php\";a:5:{s:5:\"title\";s:8:\"Comments\";s:4:\"slug\";s:25:\"twentytwentyfive/comments\";s:11:\"description\";s:63:\"Comments area with comments list, pagination, and comment form.\";s:10:\"categories\";a:1:{i:0;s:4:\"text\";}s:10:\"blockTypes\";a:1:{i:0;s:13:\"core/comments\";}}s:32:\"contact-centered-social-link.php\";a:5:{s:5:\"title\";s:30:\"Centered link and social links\";s:4:\"slug\";s:45:\"twentytwentyfive/contact-centered-social-link\";s:11:\"description\";s:73:\"Centered contact section with a prominent message and social media links.\";s:10:\"categories\";a:1:{i:0;s:7:\"contact\";}s:8:\"keywords\";a:3:{i:0;s:7:\"contact\";i:1;s:3:\"faq\";i:2;s:9:\"questions\";}}s:26:\"contact-info-locations.php\";a:6:{s:5:\"title\";s:27:\"Contact, info and locations\";s:4:\"slug\";s:39:\"twentytwentyfive/contact-info-locations\";s:11:\"description\";s:78:\"Contact section with social media links, email, and multiple location details.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:7:\"contact\";}s:8:\"keywords\";a:2:{i:0;s:7:\"contact\";i:1;s:8:\"location\";}}s:29:\"contact-location-and-link.php\";a:4:{s:5:\"title\";s:25:\"Contact location and link\";s:4:\"slug\";s:42:\"twentytwentyfive/contact-location-and-link\";s:11:\"description\";s:89:\"Contact section with a location address, a directions link, and an image of the location.\";s:10:\"categories\";a:2:{i:0;s:7:\"contact\";i:1;s:8:\"featured\";}}s:18:\"cta-book-links.php\";a:4:{s:5:\"title\";s:30:\"Call to action with book links\";s:4:\"slug\";s:31:\"twentytwentyfive/cta-book-links\";s:11:\"description\";s:74:\"A call to action section with links to get the book in different websites.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:22:\"cta-book-locations.php\";a:4:{s:5:\"title\";s:29:\"Call to action with locations\";s:4:\"slug\";s:35:\"twentytwentyfive/cta-book-locations\";s:11:\"description\";s:82:\"A call to action section with links to get the book in the most popular locations.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:24:\"cta-centered-heading.php\";a:4:{s:5:\"title\";s:16:\"Centered heading\";s:4:\"slug\";s:37:\"twentytwentyfive/cta-centered-heading\";s:11:\"description\";s:53:\"A hero with a centered heading, paragraph and button.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:19:\"cta-events-list.php\";a:4:{s:5:\"title\";s:11:\"Events list\";s:4:\"slug\";s:32:\"twentytwentyfive/cta-events-list\";s:11:\"description\";s:37:\"A list of events with call to action.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:26:\"cta-grid-products-link.php\";a:5:{s:5:\"title\";s:54:\"Call to action with grid layout with products and link\";s:4:\"slug\";s:39:\"twentytwentyfive/cta-grid-products-link\";s:11:\"description\";s:42:\"A call to action featuring product images.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:14:\"call-to-action\";i:1;s:8:\"featured\";}}s:22:\"cta-heading-search.php\";a:4:{s:5:\"title\";s:23:\"Heading and search form\";s:4:\"slug\";s:35:\"twentytwentyfive/cta-heading-search\";s:11:\"description\";s:54:\"Large heading with a search form for quick navigation.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:18:\"cta-newsletter.php\";a:5:{s:5:\"title\";s:18:\"Newsletter sign-up\";s:4:\"slug\";s:31:\"twentytwentyfive/cta-newsletter\";s:11:\"description\";s:0:\"\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}s:8:\"keywords\";a:2:{i:0;s:14:\"call-to-action\";i:1;s:10:\"newsletter\";}}s:15:\"event-3-col.php\";a:5:{s:5:\"title\";s:46:\"Events, 3 columns with event images and titles\";s:4:\"slug\";s:28:\"twentytwentyfive/event-3-col\";s:11:\"description\";s:95:\"A header with title and text and three columns that show 3 events with their images and titles.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}s:8:\"keywords\";a:3:{i:0;s:6:\"events\";i:1;s:7:\"columns\";i:2;s:6:\"images\";}}s:14:\"event-rsvp.php\";a:7:{s:5:\"title\";s:10:\"Event RSVP\";s:4:\"slug\";s:27:\"twentytwentyfive/event-rsvp\";s:11:\"description\";s:64:\"RSVP for an upcoming event with a cover image and event details.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}s:8:\"keywords\";a:3:{i:0;s:14:\"call-to-action\";i:1;s:4:\"rsvp\";i:2;s:5:\"event\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:18:\"event-schedule.php\";a:5:{s:5:\"title\";s:14:\"Event schedule\";s:4:\"slug\";s:31:\"twentytwentyfive/event-schedule\";s:11:\"description\";s:54:\"A section with specified dates and times for an event.\";s:10:\"categories\";a:1:{i:0;s:5:\"about\";}s:8:\"keywords\";a:4:{i:0;s:6:\"events\";i:1;s:6:\"agenda\";i:2;s:8:\"schedule\";i:3;s:8:\"lectures\";}}s:19:\"footer-centered.php\";a:5:{s:5:\"title\";s:15:\"Centered footer\";s:4:\"slug\";s:32:\"twentytwentyfive/footer-centered\";s:11:\"description\";s:44:\"Footer with centered site title and tagline.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:18:\"footer-columns.php\";a:5:{s:5:\"title\";s:19:\"Footer with columns\";s:4:\"slug\";s:31:\"twentytwentyfive/footer-columns\";s:11:\"description\";s:45:\"Footer columns with title, tagline and links.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:21:\"footer-newsletter.php\";a:5:{s:5:\"title\";s:29:\"Footer with newsletter signup\";s:4:\"slug\";s:34:\"twentytwentyfive/footer-newsletter\";s:11:\"description\";s:51:\"Footer with large site title and newsletter signup.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:17:\"footer-social.php\";a:5:{s:5:\"title\";s:33:\"Centered footer with social links\";s:4:\"slug\";s:30:\"twentytwentyfive/footer-social\";s:11:\"description\";s:49:\"Footer with centered site title and social links.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:10:\"footer.php\";a:5:{s:5:\"title\";s:6:\"Footer\";s:4:\"slug\";s:23:\"twentytwentyfive/footer\";s:11:\"description\";s:51:\"Footer columns with logo, title, tagline and links.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:16:\"format-audio.php\";a:4:{s:5:\"title\";s:12:\"Audio format\";s:4:\"slug\";s:29:\"twentytwentyfive/format-audio\";s:11:\"description\";s:73:\"An audio post format with an image, title, audio player, and description.\";s:10:\"categories\";a:1:{i:0;s:28:\"twentytwentyfive_post-format\";}}s:15:\"format-link.php\";a:4:{s:5:\"title\";s:11:\"Link format\";s:4:\"slug\";s:28:\"twentytwentyfive/format-link\";s:11:\"description\";s:77:\"A link post format with a description and an emphasized link for key content.\";s:10:\"categories\";a:1:{i:0;s:28:\"twentytwentyfive_post-format\";}}s:15:\"grid-videos.php\";a:4:{s:5:\"title\";s:16:\"Grid with videos\";s:4:\"slug\";s:28:\"twentytwentyfive/grid-videos\";s:11:\"description\";s:19:\"A grid with videos.\";s:10:\"categories\";a:1:{i:0;s:5:\"about\";}}s:24:\"grid-with-categories.php\";a:5:{s:5:\"title\";s:20:\"Grid with categories\";s:4:\"slug\";s:37:\"twentytwentyfive/grid-with-categories\";s:11:\"description\";s:41:\"A grid section with different categories.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:19:\"header-centered.php\";a:5:{s:5:\"title\";s:15:\"Centered header\";s:4:\"slug\";s:32:\"twentytwentyfive/header-centered\";s:11:\"description\";s:47:\"Header with centered site title and navigation.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:18:\"header-columns.php\";a:5:{s:5:\"title\";s:19:\"Header with columns\";s:4:\"slug\";s:31:\"twentytwentyfive/header-columns\";s:11:\"description\";s:49:\"Header with site title and navigation in columns.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:22:\"header-large-title.php\";a:5:{s:5:\"title\";s:23:\"Header with large title\";s:4:\"slug\";s:35:\"twentytwentyfive/header-large-title\";s:11:\"description\";s:58:\"Header with large site title and right-aligned navigation.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:10:\"header.php\";a:5:{s:5:\"title\";s:6:\"Header\";s:4:\"slug\";s:23:\"twentytwentyfive/header\";s:11:\"description\";s:38:\"Header with site title and navigation.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:36:\"heading-and-paragraph-with-image.php\";a:4:{s:5:\"title\";s:45:\"Heading and paragraph with image on the right\";s:4:\"slug\";s:49:\"twentytwentyfive/heading-and-paragraph-with-image\";s:11:\"description\";s:89:\"A two-column section with a heading and paragraph on the left, and an image on the right.\";s:10:\"categories\";a:1:{i:0;s:5:\"about\";}}s:13:\"hero-book.php\";a:5:{s:5:\"title\";s:9:\"Hero book\";s:4:\"slug\";s:26:\"twentytwentyfive/hero-book\";s:11:\"description\";s:66:\"A hero section for the book with a description and pre-order link.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}s:8:\"keywords\";a:3:{i:0;s:7:\"podcast\";i:1;s:4:\"hero\";i:2;s:7:\"stories\";}}s:25:\"hero-full-width-image.php\";a:4:{s:5:\"title\";s:22:\"Hero, full width image\";s:4:\"slug\";s:38:\"twentytwentyfive/hero-full-width-image\";s:11:\"description\";s:68:\"A hero with a full width image, heading, short paragraph and button.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:41:\"hero-overlapped-book-cover-with-links.php\";a:4:{s:5:\"title\";s:38:\"Hero, overlapped book cover with links\";s:4:\"slug\";s:54:\"twentytwentyfive/hero-overlapped-book-cover-with-links\";s:11:\"description\";s:47:\"A hero with an overlapped book cover and links.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:16:\"hero-podcast.php\";a:5:{s:5:\"title\";s:12:\"Hero podcast\";s:4:\"slug\";s:29:\"twentytwentyfive/hero-podcast\";s:11:\"description\";s:0:\"\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}s:8:\"keywords\";a:3:{i:0;s:7:\"podcast\";i:1;s:4:\"hero\";i:2;s:7:\"stories\";}}s:14:\"hidden-404.php\";a:4:{s:5:\"title\";s:3:\"404\";s:4:\"slug\";s:27:\"twentytwentyfive/hidden-404\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:23:\"hidden-blog-heading.php\";a:4:{s:5:\"title\";s:19:\"Hidden blog heading\";s:4:\"slug\";s:36:\"twentytwentyfive/hidden-blog-heading\";s:11:\"description\";s:52:\"Hidden heading for the home page and index template.\";s:8:\"inserter\";b:0;}s:17:\"hidden-search.php\";a:4:{s:5:\"title\";s:6:\"Search\";s:4:\"slug\";s:30:\"twentytwentyfive/hidden-search\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:18:\"hidden-sidebar.php\";a:4:{s:5:\"title\";s:7:\"Sidebar\";s:4:\"slug\";s:31:\"twentytwentyfive/hidden-sidebar\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:21:\"hidden-written-by.php\";a:4:{s:5:\"title\";s:10:\"Written by\";s:4:\"slug\";s:34:\"twentytwentyfive/hidden-written-by\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:9:\"logos.php\";a:4:{s:5:\"title\";s:5:\"Logos\";s:4:\"slug\";s:22:\"twentytwentyfive/logos\";s:11:\"description\";s:77:\"Showcasing the podcast\'s clients with a heading and a series of client logos.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:24:\"media-instagram-grid.php\";a:5:{s:5:\"title\";s:14:\"Instagram grid\";s:4:\"slug\";s:37:\"twentytwentyfive/media-instagram-grid\";s:11:\"description\";s:62:\"A grid section with photos and a link to an Instagram profile.\";s:13:\"viewportWidth\";i:1440;s:10:\"categories\";a:3:{i:0;s:5:\"media\";i:1;s:7:\"gallery\";i:2;s:8:\"featured\";}}s:14:\"more-posts.php\";a:5:{s:5:\"title\";s:10:\"More posts\";s:4:\"slug\";s:27:\"twentytwentyfive/more-posts\";s:11:\"description\";s:45:\"Displays a list of posts with title and date.\";s:10:\"categories\";a:1:{i:0;s:5:\"query\";}s:10:\"blockTypes\";a:1:{i:0;s:10:\"core/query\";}}s:21:\"overlapped-images.php\";a:4:{s:5:\"title\";s:41:\"Overlapping images and paragraph on right\";s:4:\"slug\";s:34:\"twentytwentyfive/overlapped-images\";s:11:\"description\";s:53:\"A section with overlapping images, and a description.\";s:10:\"categories\";a:2:{i:0;s:5:\"about\";i:1;s:8:\"featured\";}}s:22:\"page-business-home.php\";a:8:{s:5:\"title\";s:17:\"Business homepage\";s:4:\"slug\";s:35:\"twentytwentyfive/page-business-home\";s:11:\"description\";s:28:\"A business homepage pattern.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:20:\"page-coming-soon.php\";a:8:{s:5:\"title\";s:11:\"Coming soon\";s:4:\"slug\";s:33:\"twentytwentyfive/page-coming-soon\";s:11:\"description\";s:96:\"A full-width cover banner that can be applied to a page or it can work as a single landing page.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:15:\"page-cv-bio.php\";a:7:{s:5:\"title\";s:6:\"CV/bio\";s:4:\"slug\";s:28:\"twentytwentyfive/page-cv-bio\";s:11:\"description\";s:36:\"A pattern for a CV/Bio landing page.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:3:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:5:\"about\";i:2;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:21:\"page-landing-book.php\";a:8:{s:5:\"title\";s:21:\"Landing page for book\";s:4:\"slug\";s:34:\"twentytwentyfive/page-landing-book\";s:11:\"description\";s:104:\"A landing page for the book with a hero section, pre-order links, locations, FAQs and newsletter signup.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:22:\"page-landing-event.php\";a:8:{s:5:\"title\";s:22:\"Landing page for event\";s:4:\"slug\";s:35:\"twentytwentyfive/page-landing-event\";s:11:\"description\";s:87:\"A landing page for the event with a hero section, description, FAQs and call to action.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:24:\"page-landing-podcast.php\";a:8:{s:5:\"title\";s:24:\"Landing page for podcast\";s:4:\"slug\";s:37:\"twentytwentyfive/page-landing-podcast\";s:11:\"description\";s:111:\"A landing page for the podcast with a hero section, description, logos, grid with videos and newsletter signup.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:50:\"page-link-in-bio-heading-paragraph-links-image.php\";a:7:{s:5:\"title\";s:59:\"Link in bio heading, paragraph, links and full-height image\";s:4:\"slug\";s:63:\"twentytwentyfive/page-link-in-bio-heading-paragraph-links-image\";s:11:\"description\";s:84:\"A link in bio landing page with a heading, paragraph, links and a full height image.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:3:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:6:\"banner\";i:2;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:33:\"page-link-in-bio-wide-margins.php\";a:7:{s:5:\"title\";s:48:\"Link in bio with profile, links and wide margins\";s:4:\"slug\";s:46:\"twentytwentyfive/page-link-in-bio-wide-margins\";s:11:\"description\";s:86:\"A link in bio landing page with social links, a profile photo and a brief description.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:3:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:6:\"banner\";i:2;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:39:\"page-link-in-bio-with-tight-margins.php\";a:8:{s:5:\"title\";s:30:\"Link in bio with tight margins\";s:4:\"slug\";s:52:\"twentytwentyfive/page-link-in-bio-with-tight-margins\";s:11:\"description\";s:90:\"A full-width, full-height link in bio section with an image, a paragraph and social links.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:6:\"banner\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:23:\"page-portfolio-home.php\";a:8:{s:5:\"title\";s:18:\"Portfolio homepage\";s:4:\"slug\";s:36:\"twentytwentyfive/page-portfolio-home\";s:11:\"description\";s:29:\"A portfolio homepage pattern.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:5:\"posts\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:18:\"page-shop-home.php\";a:8:{s:5:\"title\";s:13:\"Shop homepage\";s:4:\"slug\";s:31:\"twentytwentyfive/page-shop-home\";s:11:\"description\";s:24:\"A shop homepage pattern.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:21:\"twentytwentyfive_page\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:19:\"post-navigation.php\";a:5:{s:5:\"title\";s:15:\"Post navigation\";s:4:\"slug\";s:32:\"twentytwentyfive/post-navigation\";s:11:\"description\";s:29:\"Next and previous post links.\";s:10:\"categories\";a:1:{i:0;s:4:\"text\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/post-navigation-link\";}}s:17:\"pricing-2-col.php\";a:5:{s:5:\"title\";s:18:\"Pricing, 2 columns\";s:4:\"slug\";s:30:\"twentytwentyfive/pricing-2-col\";s:11:\"description\";s:88:\"Pricing section with two columns, pricing plan, description, and call-to-action buttons.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:17:\"pricing-3-col.php\";a:4:{s:5:\"title\";s:18:\"Pricing, 3 columns\";s:4:\"slug\";s:30:\"twentytwentyfive/pricing-3-col\";s:11:\"description\";s:100:\"A three-column boxed pricing table designed to showcase services, descriptions, and pricing options.\";s:10:\"categories\";a:3:{i:0;s:14:\"call-to-action\";i:1;s:6:\"banner\";i:2;s:8:\"services\";}}s:18:\"services-3-col.php\";a:4:{s:5:\"title\";s:19:\"Services, 3 columns\";s:4:\"slug\";s:31:\"twentytwentyfive/services-3-col\";s:11:\"description\";s:56:\"Three columns with images and text to showcase services.\";s:10:\"categories\";a:3:{i:0;s:14:\"call-to-action\";i:1;s:6:\"banner\";i:2;s:8:\"services\";}}s:36:\"services-subscriber-only-section.php\";a:4:{s:5:\"title\";s:33:\"Services, subscriber only section\";s:4:\"slug\";s:49:\"twentytwentyfive/services-subscriber-only-section\";s:11:\"description\";s:72:\"A subscriber-only section highlighting exclusive services and offerings.\";s:10:\"categories\";a:2:{i:0;s:14:\"call-to-action\";i:1;s:8:\"services\";}}s:24:\"services-team-photos.php\";a:4:{s:5:\"title\";s:21:\"Services, team photos\";s:4:\"slug\";s:37:\"twentytwentyfive/services-team-photos\";s:11:\"description\";s:59:\"Display team photos in a services section with grid layout.\";s:10:\"categories\";a:3:{i:0;s:6:\"banner\";i:1;s:14:\"call-to-action\";i:2;s:8:\"featured\";}}s:37:\"template-404-vertical-header-blog.php\";a:5:{s:5:\"title\";s:23:\"Right-aligned blog, 404\";s:4:\"slug\";s:50:\"twentytwentyfive/template-404-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:13:\"templateTypes\";a:1:{i:0;s:3:\"404\";}}s:30:\"template-archive-news-blog.php\";a:6:{s:5:\"title\";s:17:\"News blog archive\";s:4:\"slug\";s:43:\"twentytwentyfive/template-archive-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:31:\"template-archive-photo-blog.php\";a:6:{s:5:\"title\";s:18:\"Photo blog archive\";s:4:\"slug\";s:44:\"twentytwentyfive/template-archive-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:30:\"template-archive-text-blog.php\";a:6:{s:5:\"title\";s:23:\"Text-only blog, archive\";s:4:\"slug\";s:43:\"twentytwentyfive/template-archive-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:41:\"template-archive-vertical-header-blog.php\";a:6:{s:5:\"title\";s:34:\"Archive for the right-aligned blog\";s:4:\"slug\";s:54:\"twentytwentyfive/template-archive-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:27:\"template-home-news-blog.php\";a:6:{s:5:\"title\";s:14:\"News blog home\";s:4:\"slug\";s:40:\"twentytwentyfive/template-home-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:28:\"template-home-photo-blog.php\";a:6:{s:5:\"title\";s:15:\"Photo blog home\";s:4:\"slug\";s:41:\"twentytwentyfive/template-home-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:38:\"template-home-posts-grid-news-blog.php\";a:5:{s:5:\"title\";s:34:\"News blog with featured posts grid\";s:4:\"slug\";s:51:\"twentytwentyfive/template-home-posts-grid-news-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:27:\"template-home-text-blog.php\";a:6:{s:5:\"title\";s:20:\"Text-only blog, home\";s:4:\"slug\";s:40:\"twentytwentyfive/template-home-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:10:\"front-page\";i:1;s:4:\"home\";}}s:38:\"template-home-vertical-header-blog.php\";a:6:{s:5:\"title\";s:31:\"Homepage for right-aligned blog\";s:4:\"slug\";s:51:\"twentytwentyfive/template-home-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:40:\"template-home-with-sidebar-news-blog.php\";a:6:{s:5:\"title\";s:22:\"News blog with sidebar\";s:4:\"slug\";s:53:\"twentytwentyfive/template-home-with-sidebar-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:28:\"template-page-photo-blog.php\";a:5:{s:5:\"title\";s:15:\"Photo blog page\";s:4:\"slug\";s:41:\"twentytwentyfive/template-page-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:13:\"templateTypes\";a:1:{i:0;s:4:\"page\";}}s:38:\"template-page-vertical-header-blog.php\";a:5:{s:5:\"title\";s:40:\"Page template for the right-aligned blog\";s:4:\"slug\";s:51:\"twentytwentyfive/template-page-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:13:\"templateTypes\";a:1:{i:0;s:4:\"page\";}}s:33:\"template-query-loop-news-blog.php\";a:4:{s:5:\"title\";s:20:\"News blog query loop\";s:4:\"slug\";s:46:\"twentytwentyfive/template-query-loop-news-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:34:\"template-query-loop-photo-blog.php\";a:6:{s:5:\"title\";s:16:\"Photo blog posts\";s:4:\"slug\";s:47:\"twentytwentyfive/template-query-loop-photo-blog\";s:11:\"description\";s:54:\"A list of posts, 3 columns, with only featured images.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:5:\"query\";}s:10:\"blockTypes\";a:1:{i:0;s:10:\"core/query\";}}s:33:\"template-query-loop-text-blog.php\";a:4:{s:5:\"title\";s:21:\"Text-only blog, posts\";s:4:\"slug\";s:46:\"twentytwentyfive/template-query-loop-text-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:44:\"template-query-loop-vertical-header-blog.php\";a:4:{s:5:\"title\";s:19:\"Right-aligned posts\";s:4:\"slug\";s:57:\"twentytwentyfive/template-query-loop-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:23:\"template-query-loop.php\";a:5:{s:5:\"title\";s:23:\"List of posts, 1 column\";s:4:\"slug\";s:36:\"twentytwentyfive/template-query-loop\";s:11:\"description\";s:61:\"A list of posts, 1 column, with featured image and post date.\";s:10:\"categories\";a:1:{i:0;s:5:\"query\";}s:10:\"blockTypes\";a:1:{i:0;s:10:\"core/query\";}}s:29:\"template-search-news-blog.php\";a:6:{s:5:\"title\";s:24:\"News blog search results\";s:4:\"slug\";s:42:\"twentytwentyfive/template-search-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:30:\"template-search-photo-blog.php\";a:6:{s:5:\"title\";s:25:\"Photo blog search results\";s:4:\"slug\";s:43:\"twentytwentyfive/template-search-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:29:\"template-search-text-blog.php\";a:6:{s:5:\"title\";s:22:\"Text-only blog, search\";s:4:\"slug\";s:42:\"twentytwentyfive/template-search-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:40:\"template-search-vertical-header-blog.php\";a:6:{s:5:\"title\";s:26:\"Right-aligned blog, search\";s:4:\"slug\";s:53:\"twentytwentyfive/template-search-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:40:\"template-single-left-aligned-content.php\";a:6:{s:5:\"title\";s:30:\"Post with left-aligned content\";s:4:\"slug\";s:47:\"twentytwentyfive/post-with-left-aligned-content\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:29:\"template-single-news-blog.php\";a:6:{s:5:\"title\";s:34:\"News blog single post with sidebar\";s:4:\"slug\";s:42:\"twentytwentyfive/template-single-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:26:\"template-single-offset.php\";a:6:{s:5:\"title\";s:34:\"Offset post without featured image\";s:4:\"slug\";s:39:\"twentytwentyfive/template-single-offset\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:30:\"template-single-photo-blog.php\";a:6:{s:5:\"title\";s:22:\"Photo blog single post\";s:4:\"slug\";s:43:\"twentytwentyfive/template-single-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:29:\"template-single-text-blog.php\";a:6:{s:5:\"title\";s:27:\"Text-only blog, single post\";s:4:\"slug\";s:42:\"twentytwentyfive/template-single-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:40:\"template-single-vertical-header-blog.php\";a:6:{s:5:\"title\";s:25:\"Right-aligned single post\";s:4:\"slug\";s:53:\"twentytwentyfive/template-single-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:22:\"testimonials-2-col.php\";a:5:{s:5:\"title\";s:21:\"2 columns with avatar\";s:4:\"slug\";s:35:\"twentytwentyfive/testimonials-2-col\";s:11:\"description\";s:42:\"Two columns with testimonials and avatars.\";s:10:\"categories\";a:1:{i:0;s:12:\"testimonials\";}s:8:\"keywords\";a:1:{i:0;s:11:\"testimonial\";}}s:22:\"testimonials-6-col.php\";a:5:{s:5:\"title\";s:35:\"3 column layout with 6 testimonials\";s:4:\"slug\";s:35:\"twentytwentyfive/testimonials-6-col\";s:11:\"description\";s:86:\"A section with three columns and two rows, each containing a testimonial and citation.\";s:10:\"categories\";a:1:{i:0;s:12:\"testimonials\";}s:8:\"keywords\";a:1:{i:0;s:11:\"testimonial\";}}s:22:\"testimonials-large.php\";a:5:{s:5:\"title\";s:32:\"Review with large image on right\";s:4:\"slug\";s:35:\"twentytwentyfive/testimonials-large\";s:11:\"description\";s:46:\"A testimonial with a large image on the right.\";s:10:\"categories\";a:1:{i:0;s:12:\"testimonials\";}s:8:\"keywords\";a:1:{i:0;s:11:\"testimonial\";}}s:13:\"text-faqs.php\";a:6:{s:5:\"title\";s:4:\"FAQs\";s:4:\"slug\";s:26:\"twentytwentyfive/text-faqs\";s:11:\"description\";s:68:\"A FAQs section with a FAQ heading and list of questions and answers.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:4:\"text\";i:1;s:5:\"about\";}s:8:\"keywords\";a:5:{i:0;s:3:\"faq\";i:1;s:5:\"about\";i:2;s:10:\"frequently\";i:3;s:5:\"asked\";i:4;s:9:\"questions\";}}s:19:\"vertical-header.php\";a:6:{s:5:\"title\";s:15:\"Vertical header\";s:4:\"slug\";s:32:\"twentytwentyfive/vertical-header\";s:11:\"description\";s:46:\"Vertical Header with site title and navigation\";s:13:\"viewportWidth\";i:300;s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:34:\"core/template-part/vertical-header\";}}}}','off'),(171,'wp-graphql_allow_tracking','yes','auto'),(172,'wp-graphql_tracking_notice','hide','auto'),(173,'wp-graphql_tracking_last_send','1743024135','auto'),(174,'wpgraphql-acf_allow_tracking','yes','auto'),(175,'wpgraphql-acf_tracking_notice','hide','auto'),(176,'wpgraphql-acf_tracking_last_send','1743024138','auto'),(191,'_transient_timeout_acf_plugin_updates','1743585829','off'),(192,'_transient_acf_plugin_updates','a:5:{s:7:\"plugins\";a:0:{}s:9:\"no_update\";a:1:{s:37:\"advanced-custom-fields-6.3.12/acf.php\";a:12:{s:4:\"slug\";s:22:\"advanced-custom-fields\";s:6:\"plugin\";s:37:\"advanced-custom-fields-6.3.12/acf.php\";s:11:\"new_version\";s:6:\"6.3.12\";s:3:\"url\";s:36:\"https://www.advancedcustomfields.com\";s:6:\"tested\";s:5:\"6.7.2\";s:7:\"package\";s:0:\"\";s:5:\"icons\";a:1:{s:7:\"default\";s:64:\"https://connect.advancedcustomfields.com/assets/icon-256x256.png\";}s:7:\"banners\";a:2:{s:3:\"low\";s:66:\"https://connect.advancedcustomfields.com/assets/banner-772x250.jpg\";s:4:\"high\";s:67:\"https://connect.advancedcustomfields.com/assets/banner-1544x500.jpg\";}s:8:\"requires\";s:3:\"6.0\";s:12:\"requires_php\";s:3:\"7.4\";s:12:\"release_date\";s:8:\"20250121\";s:6:\"reason\";s:10:\"up_to_date\";}}s:10:\"expiration\";i:172800;s:6:\"status\";i:1;s:7:\"checked\";a:1:{s:37:\"advanced-custom-fields-6.3.12/acf.php\";s:6:\"6.3.12\";}}','off'),(199,'_transient_timeout_feed_9bbd59226dc36b9b26cd43f15694c5c3','1743545003','off'),(200,'_transient_feed_9bbd59226dc36b9b26cd43f15694c5c3','a:6:{s:5:\"child\";a:1:{s:0:\"\";a:1:{s:3:\"rss\";a:1:{i:0;a:6:{s:4:\"data\";s:3:\"\n\n\n\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:7:\"version\";s:3:\"2.0\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:1:{s:7:\"channel\";a:1:{i:0;a:6:{s:4:\"data\";s:52:\"\n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:8:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"WordPress News\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"https://wordpress.org/news\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:59:\"The latest news about WordPress and the WordPress community\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:13:\"lastBuildDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 13:21:47 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"language\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"en-US\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:9:\"generator\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"https://wordpress.org/?v=6.8-alpha-59827\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:5:\"image\";a:1:{i:0;a:6:{s:4:\"data\";s:11:\"\n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:5:{s:3:\"url\";a:1:{i:0;a:5:{s:4:\"data\";s:29:\"https://s.w.org/favicon.ico?2\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"WordPress News\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"https://wordpress.org/news\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:5:\"width\";a:1:{i:0;a:5:{s:4:\"data\";s:2:\"32\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:6:\"height\";a:1:{i:0;a:5:{s:4:\"data\";s:2:\"32\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}s:4:\"item\";a:10:{i:0;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"WordPress 6.8 Release Candidate 1\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"https://wordpress.org/news/2025/03/wordpress-6-8-release-candidate-1/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 16:19:41 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18639\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:267:\"WordPress 6.8 RC 1 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing over the next three weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:9280:\"\n

    The first Release Candidate (“RC1”) for WordPress 6.8 is ready for download and testing!

    \n\n\n\n

    This version of the WordPress software is under development.  Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, it’s recommended that you evaluate RC1 on a test server and site.

    \n\n\n\n

    Reaching this phase of the release cycle is an important milestone.  While release candidates are considered ready for release, testing remains crucial to ensure that everything in WordPress 6.8 is the best it can be.

    \n\n\n\n

    You can test WordPress 6.8 RC1 in four ways:

    \n\n\n\n
    PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
    Direct DownloadDownload the RC1 version (zip) and install it on a WordPress website.
    Command LineUse the following WP-CLI command: wp core update --version=6.8-RC1
    WordPress PlaygroundUse the 6.8 RC1 WordPress Playground instance (available within 35 minutes after the release is ready) to test the software directly in your browser without the need for a separate site or setup.
    \n\n\n\n

    The current target for the WordPress 6.8 release is April 15, 2025.  Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for further details.

    \n\n\n\n

    What’s in WordPress 6.8 RC1?

    \n\n\n\n

    Get a recap of WordPress 6.8’s highlighted features in the Beta 1 announcement.  For more technical information related to issues addressed since Beta 3, you can browse the following links:

    \n\n\n\n\n\n\n\n

    Want to look deeper into the details and technical notes for this release? These recent posts cover some of the latest updates:

    \n\n\n\n\n\n\n\n

    How you can contribute

    \n\n\n\n

    WordPress is open source software made possible by a passionate community of people collaborating on and contributing to its development.  The resources below outline various ways you can help the world’s most popular open source web platform, regardless of your technical expertise.

    \n\n\n\n

    Get involved in testing

    \n\n\n\n

    Testing for issues is critical to ensuring WordPress is performant and stable.  It’s also a meaningful way for anyone to contribute.  This detailed guide will walk you through testing features in WordPress 6.8.  For those new to testing, follow this general testing guide for more details on getting set up.

    \n\n\n\n

    If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report.  You can also check your issue against a list of known bugs.

    \n\n\n\n

    Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

    \n\n\n\n

    Search for vulnerabilities

    \n\n\n\n

    From now until the final release of WordPress 6.8 (scheduled for April 15, 2025), the monetary reward for reporting new, unreleased security vulnerabilities is doubled.  Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

    \n\n\n\n

    Update your theme or plugin

    \n\n\n\n

    For plugin and theme authors, your products play an integral role in extending the functionality and value of WordPress for all users.

    \n\n\n\n

    Thanks for continuing to test your themes and plugins with the WordPress 6.8 beta releases.  With RC1, you’ll want to conclude your testing and update the “Tested up to” version in your plugin’s readme file to 6.8.

    \n\n\n\n

    If you find compatibility issues, please post detailed information to the support forum.

    \n\n\n\n

    Help translate WordPress

    \n\n\n\n

    Do you speak a language other than English?  ¿Español?  Français?  Русский?  日本語? हिन्दी? বাংলা? मराठी?  You can help translate WordPress into more than 100 languages.  This release milestone (RC1) also marks the hard string freeze point of the 6.8 release cycle.

    \n\n\n\n

    An RC1 haiku

    \n\n\n\n

    March fades, nearly there,
    Six-eight hums—a steady beat,
    RC greets the world.

    \n\n\n\n

    Thank you to the following contributors for collaborating on this post: @joemcgill @benjamin_zekavica @courane01 @mkrndmane @audrasjb @areziaal @ankit-k-gupta @krupajnanda @bph.

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18639\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:1;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"WordPress 6.8 Beta 3\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-3/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 15:35:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18634\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:289:\"WordPress 6.8 Beta 3 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next four weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:5627:\"\n

    WordPress 6.8 Beta 3 is now ready for testing!

    \n\n\n\n

    This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, it is recommended you evaluate Beta 3 on a test server and site.

    \n\n\n\n

    You can test WordPress 6.8 Beta 3 in four ways:

    \n\n\n\n
    PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
    Direct DownloadDownload the Beta 3 version (zip) and install it on a WordPress website.
    Command LineUse the following WP-CLI command: wp core update --version=6.8-beta3
    WordPress PlaygroundUse the 6.8 Beta 3 WordPress Playground instance to test the software directly in your browser without the need for a separate site or setup.
    \n\n\n\n

    The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

    \n\n\n\n

    Catch up on what’s new in WordPress 6.8: Read the Beta 1 and Beta 2 announcements for details and highlights.

    \n\n\n\n

    How to test this release

    \n\n\n\n

    Your help testing the WordPress 6.8 Beta 3 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important. This detailed guide will walk you through testing features in WordPress 6.8.

    \n\n\n\n

    If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

    \n\n\n\n

    Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

    \n\n\n\n

    Vulnerability bounty doubles during Beta/RC

    \n\n\n\n

    Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

    \n\n\n\n

    Beta 3 updates and highlights

    \n\n\n\n

    WordPress 6.8 Beta 3 contains more than 3 Editor updates and fixes since the Beta 2 release, including 16 tickets for WordPress core.

    \n\n\n\n

    Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 3 using these links:

    \n\n\n\n\n\n\n\n

    A Beta 3 haiku

    \n\n\n\n

    Beta three refines,
    WordPress shapes with steady hands,
    Code grows into form.

    \n\n\n\n

    Props to @benjamin_zekavica @krupajnanda @ankit-k-gupta @joemcgill for proofreading and review.

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18634\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:2;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"WordPress 6.8 Beta 2\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-2/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 15:46:13 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18619\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:289:\"WordPress 6.8 Beta 2 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next five weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:5940:\"\n

    WordPress 6.8 Beta 2 is now ready for testing!

    \n\n\n\n

    This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, you should evaluate Beta 2 on a test server and site.

    \n\n\n\n

    You can test WordPress 6.8 Beta 2 in four ways:

    \n\n\n\n
    PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. (Select the “Bleeding edge” channel and “Beta/RC Only” stream.)
    Direct DownloadDownload the Beta 2 version (zip) and install it on a WordPress website.
    Command LineUse this WP-CLI command: wp core update --version=6.8-beta2
    WordPress PlaygroundUse the 6.8 Beta 2 WordPress Playground instance to test the software directly in your browser.  No setup is required–just click and go! 
    \n\n\n\n

    The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

    \n\n\n\n

    Catch up on what’s new in WordPress 6.8: Read the Beta 1 announcement for details and highlights.

    \n\n\n\n

    How to test this release

    \n\n\n\n

    Your help testing the WordPress 6.8 Beta 2 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important.  This detailed guide will walk you through testing features in WordPress 6.8.

    \n\n\n\n

    If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

    \n\n\n\n

    Curious about testing releases in general? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

    \n\n\n\n

    Vulnerability bounty doubles during Beta/RC

    \n\n\n\n

    Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

    \n\n\n\n

    Beta 2 updates and highlights

    \n\n\n\n

    WordPress 6.8 Beta 2 contains more than 14 Editor updates and fixes since the Beta 1 release, including 21 tickets for WordPress core.

    \n\n\n\n

    Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 1 using these links:

    \n\n\n\n\n\n\n\n

    A Beta 2 haiku

    \n\n\n\n

    Second wave refines,
    Lines of code like rivers flow,
    WordPress finds its form.

    \n\n\n\n

    Props to @ankitkumarshah @vgnavada @krupajnanda @michelleames @audrasjb @marybaum @ecgan for proofreading and review.

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18619\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:3;a:6:{s:4:\"data\";s:69:\"\n \n \n \n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"WordPress 6.8 Beta 1\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-1/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 04 Mar 2025 17:09:45 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:5:{i:0;a:5:{s:4:\"data\";s:11:\"Development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:2;a:5:{s:4:\"data\";s:3:\"6.8\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:3;a:5:{s:4:\"data\";s:11:\"development\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:4;a:5:{s:4:\"data\";s:8:\"releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18582\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:288:\"WordPress 6.8 Beta 1 is ready for download and testing! The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next six weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:10596:\"\n

    WordPress 6.8 Beta 1 is ready for download and testing!

    \n\n\n\n

    This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, set up a test environment or a local site to explore the new features.

    \n\n\n\n

    How to Test WordPress 6.8 Beta 1

    \n\n\n\n

    You can test this beta release in any of the following ways: 

    \n\n\n\n
    WordPress Beta Tester PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. Select the “Bleeding edge” channel and “Beta/RC Only” stream.
    Direct DownloadDownload the Beta 1 version (zip) and install it on a WordPress website.
    Command Line (WP-CLI)Use this WP-CLI command: wp core update --version=6.8-beta1
    WordPress PlaygroundUse a 6.8 Beta 1 WordPress Playground instance to test the software directly in your browser. No setup required–-just click and go!
    \n\n\n\n

    The scheduled final release date for WordPress 6.8 is April 15, 2025. Your help testing Beta and RC versions over the next six weeks is vital to ensuring the final release is everything it should be: stable, powerful, and intuitive.

    \n\n\n\n

    How important is your testing?

    \n\n\n\n

    Testing for issues is a critical part of developing any software, and it’s a meaningful way for anyone to contribute—whether or not you have experience.  Details on what to test in WordPress 6.8 are here.

    \n\n\n\n

    If you encounter an issue, please share it in the Alpha/Beta area of the support forums. If you are comfortable submitting a reproducible bug report, you can do so via WordPress Trac. You can also check your issue against this list of known bugs.

    \n\n\n\n

    Curious about testing releases in general and how to get started? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

    \n\n\n\n

    WordPress 6.8 will include many new features that were previously only available in the Gutenberg plugin. Learn more about Gutenberg updates since WordPress 6.7 in the What’s New in Gutenberg posts for versions 19.4, 19.5, 19.6, 19.7, 19.8, 19.9, 20.0, 20.1, 20.2, 20.3, and 20.4.

    \n\n\n\n

    What’s New in WordPress 6.8 Beta 1

    \n\n\n\n

    This is a polish release, with user enhancements throughout incorporated into the latest Gutenberg updates. WordPress 6.8 brings a luster and gloss that only a polish release can.

    \n\n\n\n

    WordPress 6.8 Beta 1 contains over 370 enhancements and 520 bug fixes for the editor, including design improvements, polishing the query loop, and more than 230 tickets for WordPress 6.8 Core. Here’s a glimpse of what’s coming:

    \n\n\n\n

    Editor improvements

    \n\n\n\n

    Easier ways to see your options in Data Views, and you can opt to ignore sticky posts in the Query Loop. Plus you’ll find lots of little improvements in the editor!

    \n\n\n\n

    The Style Book comes to Classic themes

    \n\n\n\n

    The Style Book now features a structured layout so you can preview site colors, typography, and block styles more easily. You can use the Style Book in classic themes with editor-styles or a theme.json file and includes clearer labels, and you can find them under Appearance > Design.

    \n\n\n\n

    Support for Speculation browser API

    \n\n\n\n

    WordPress 6.8 introduces native support for speculative loading, leveraging the Speculation Rules API to improve site performance with near-instant page loads. This feature prefetches or prerenders URLs based on user interactions, such as hovering over links, reducing load times for subsequent pages.

    \n\n\n\n

    By default, WordPress 6.8 applies a conservative prefetching strategy, balancing performance gains with resource efficiency. Developers can customize speculative loading behavior using new filters, since the API does not include UI-based controls. The existing Speculative Loading feature plugin will adapt to the core implementation, allowing deeper customization.  Please test this feature in supported browsers (currently Chrome 108+ and Edge 108+, with more browsers evaluating) and provide feedback on #62503 to help refine its implementation.

    \n\n\n\n

    Major security boost

    \n\n\n\n

    WordPress 6.8 will use bcrypt for password hashing, which significantly hardens WordPress. Other hashing is getting hardened, too, throughout the security apparatus. You won’t have to change anything in your daily workflow.

    \n\n\n\n

    The features included in this first beta may change before the final release of WordPress 6.8, based on what testers like you find.

    \n\n\n\n

    Get an overview of the 6.8 release cycle and check the Make WordPress Core blog for 6.8-related posts in the next few weeks for further details.

    \n\n\n\n

    Caveat on testing 6.8 Beta 1 in versions older than 5.1

    \n\n\n\n

    Due to an update made to the upgrade routine during this release, (see r59803), any upgrade from versions older than 5.1 will fail. Folks are working to resolve this specific issue, so please hold off on reporting on this while testing the Beta 1 release.

    \n\n\n\n

    Vulnerability bounty doubles during Beta & Release Candidate

    \n\n\n\n

    The WordPress community sponsors a monetary reward for reporting new, unreleased security vulnerabilities. This reward doubles during the period between Beta 1 on March 4, 2025 and the final Release Candidate (RC) scheduled for April 15, 2025.  Please follow responsible disclosure practices as detailed in the project’s security practices and policies. You can find those on the HackerOne page and in the security white paper.

    \n\n\n\n

    Just for you: a Beta 1 haiku

    \n\n\n\n

    March winds shift the tide.
    Hands unite in open source;
    WordPress moves ahead.

    \n\n\n\n

    Props to @audrasjb @marybaum @mamaduka @michelleames @bph @jorbin @joemcgill @krupajnanda @desrosj @benjamin_zekavica @lysyjan87 for reviewing and collaborating on this post!

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18582\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:4;a:6:{s:4:\"data\";s:60:\"\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:38:\"Shaping Tomorrow at WordCamp Asia 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://wordpress.org/news/2025/02/shaping-tomorrow-at-wordcamp-asia-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 22 Feb 2025 15:04:04 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:2:{i:0;a:5:{s:4:\"data\";s:6:\"Events\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"WordCamp\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18515\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:394:\"Over 1,400 attendees from 71 countries gathered at the Philippine International Convention Center in Manila, and nearly 15,000 more joined online, for WordCamp Asia 2025. It’s the people. It’s the friendships and the stories. Matt Mullenweg, WordPress Cofounder The flagship WordPress event started with a dedicated Contributor Day, followed by two days of engaging talks, […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Nicholas Garofalo\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:56717:\"\n
    \"WordCamp
    \n\n\n\n

    Over 1,400 attendees from 71 countries gathered at the Philippine International Convention Center in Manila, and nearly 15,000 more joined online, for WordCamp Asia 2025.

    \n\n\n\n
    \n

    It’s the people. It’s the friendships and the stories.

    Matt Mullenweg, WordPress Cofounder
    \n
    \n\n\n\n

    The flagship WordPress event started with a dedicated Contributor Day, followed by two days of engaging talks, panels, hands-on workshops, and networking. Notable guests included WordPress Cofounder Matt Mullenweg and Gutenberg Lead Architect Matías Ventura, who were joined by a diverse lineup of speakers and panelists.

    \n\n\n\n

    Throughout the event, the sponsor hall buzzed with activity as companies from across the WordPress ecosystem showcased their latest products, engaged with attendees, and offered live demos and giveaways. Each day, attendees refueled with diverse food offerings featuring Filipino favorites, turning meals into a prime networking opportunity where new connections were made and ideas were exchanged.

    \n\n\n\n

    New Ways to Engage

    \n\n\n\n

    This year’s event introduced several new programs to the schedule:

    \n\n\n\n
      \n
    • Solutions Spotlight—a series of dynamic 10-minute lightning talks that gave an inside look at innovative products, cutting-edge strategies, and real-world solutions from top-tier sponsors, all designed to help attendees succeed in the WordPress ecosystem. These fast-paced sessions offered a unique opportunity to discover how leading brands are solving challenges, empowering users, and shaping the future of WordPress.
    • \n\n\n\n
    • YouthCamp, a dedicated event for kids and teens ages 8-17, offered a full day of free, hands-on sessions designed to spark creativity and introduce the world of WordPress and open source. Through interactive workshops covering web basics, design, and development, participants gained practical skills while exploring the power of building online. 
    • \n\n\n\n
    • The new Career and Social Corners enhanced networking, fostered meaningful connections, and created new opportunities for those within the WordPress community. Career Corner was the go-to space for attendees exploring career opportunities, connecting with sponsors, and discovering exciting new roles. Meanwhile, Social Corner offered a relaxed, lounge-style environment where attendees could engage in informal discussions over refreshments.
    • \n
    \n\n\n\n

    Contributor Day

    \n\n\n\n

    WordCamp Asia kicked off with an incredible Contributor Day, bringing together almost 800 contributors, many of them new, to collaborate, share knowledge, and give back to WordPress. With 37 dedicated table leads and 16 experts from the Human Library guiding the way, participants of all experience levels engaged in meaningful discussions, tackled important tasks, and made a lasting impact on the WordPress project.

    \n\n\n\n\n\n\n\n

    Key contributions included resolving a critical media bug, advancing vertical text editing in Gutenberg, and refining the editing experience with dozens of issue closures. Performance optimizations and accessibility improvements abounded, joined by seven fresh patterns, and over 44,000 newly translated strings.

    \n\n\n\n

    New tools and workflows were explored to enhance testing and development. The day also saw meaningful conversations between hosting providers and users, improvements to event organizing processes, and hands-on training.

    \n\n\n\n

    With innovative ideas, new faces, and significant progress across multiple areas, Contributor Day reinforced the spirit of open source collaboration that drives WordPress forward.

    \n\n\n\n

    The Future is WordPress

    \n\n\n\n

    On the first full conference day, attendees gathered to celebrate the power of open source collaboration and innovation. Opening remarks from global and local event leads reflected on the incredible journey of WordCamp Asia, tracing its roots back to the first Southeast Asian WordCamp in Manila in 2008. This full-circle moment underscored how the WordPress community has flourished over the years, driven by shared knowledge and a commitment to an open web. The excitement continued with a highly anticipated opening keynote from Matías Ventura, who shared insights into the future of Gutenberg and WordPress, inspiring attendees to embrace the next wave of innovation and creativity in content publishing.

    \n\n\n\n
    \n\n
    \n\n\n\n

    The day then began in earnest. Talks highlighted new ways to integrate WordPress with external applications, opening possibilities for more interactive and scalable digital experiences. Simultaneously, content strategists and marketers explored evolving best practices in SEO, learning how to optimize their sites for visibility, engagement, and long-term growth. These sessions emphasized the importance of adaptability in a constantly evolving digital landscape, ensuring that WordPress users stay ahead of industry trends.

    \n\n\n\n

    Workshops throughout the day provided hands-on learning experiences tailored to a wide range of skill levels. Developers refined their expertise, gaining practical knowledge they could apply to their own projects. Accessibility advocates led discussions on designing for inclusivity, showcasing strategies to make WordPress-powered websites more navigable and user-friendly for people of all abilities.

    \n\n\n\n

    As the conference continued into the afternoon, conversations expanded to performance optimization and emerging technologies shaping the future of WordPress. A dedicated session explored AI-driven workflows, demonstrating how artificial intelligence can enhance site performance, automate repetitive tasks, and create more personalized user experiences. These discussions showcased the evolving role of WordPress as a versatile platform that extends beyond traditional publishing.

    \n\n\n\n

    The first day culminated in a thought-provoking keynote panel, WordPress in 2030, where industry leaders explored the future of the platform. The discussion covered the expanding open source community, emerging technologies, and the role of education and mentorship. Panelists shared their perspectives on the opportunities and challenges ahead, encouraging attendees to actively shape the future of WordPress by contributing, innovating, and advocating for an open web.

    \n\n\n\n
    \"Panelists
    \n\n\n\n

    Returning for the final day of WordCamp Asia 2025, attendees explored a new set of sessions designed to push the boundaries of web development and strategy. Technical discussions on advanced Gutenberg block development highlighted innovative ways to build more dynamic and interactive content experiences, while another session examined performance optimization strategies to enhance site speed, accessibility, and overall user engagement. Content creators and marketers gained valuable insights into audience growth, effective storytelling, and data-driven content strategies to maximize impact.

    \n\n\n\n

    The final sessions of the conference reinforced WordPress’s adaptability and innovation, equipping attendees with new skills and strategies.

    \n\n\n\n

    Q&A

    \n\n\n\n

    As the final day drew to a close, Matt shared historic photos from WordCamp Davao 2008 in the Philippines, and then answered questions from the audience.

    \n\n\n\n
    \n\n
    \n\n\n\n

    Questions covered a variety of topics, incluiding: publishing on the open web, AI, headless WordPress, education, and Matt’s personal motivations. It was clear throughout the Q&A that the future of WordPress is as bright as the island-themed attire at the event’s after-party.

    \n\n\n\n

    Closing

    \n\n\n\n

    Thank you to all the hard-working organizers who made this event possible, the speakers who took the stage, the visitors who ventured to Manila, and everyone who tuned in from around the world. Our hope is that every WordCamp attendee leaves with new knowledge, new friends, and new inspiration to build a better web.

    \n\n\n\n\n\n\n\n

    Be sure to mark your calendars for other major WordPress events in 2025: WordCamp Europe (Basel, Switzerland) and WordCamp US (Portland, Oregon, USA). Then join us in Mumbai, India for WordCamp Asia 2026!

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18515\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:5;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:25:\"Report: WordPress in 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:60:\"https://wordpress.org/news/2025/02/wordpress-in-2025-report/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 15 Feb 2025 03:19:09 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:7:\"General\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18475\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:379:\"This year is set to be transformative for WordPress, yet many decision-makers risk overlooking the immense opportunities ahead. Our new “WordPress in 2025” report highlights why WordPress should be a cornerstone of your long-term strategy. Stay ahead of the curve—read the report now to see how WordPress can drive growth and innovation for your business in the […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:9:\"Noel Tock\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:3721:\"\n

    This year is set to be transformative for WordPress, yet many decision-makers risk overlooking the immense opportunities ahead. Our new “WordPress in 2025” report highlights why WordPress should be a cornerstone of your long-term strategy. Stay ahead of the curve—read the report now to see how WordPress can drive growth and innovation for your business in the years to come.

    \n\n\n\n
    \"\"
    \n\n\n\n

    Some of the key points we explore: 

    \n\n\n\n
      \n
    • As proprietary “next-gen” CMS hype fizzles out and enterprise budgets shift priorities, open-source CMSs like WordPress are primed to gain ground in the commoditized CMS space. WordPress’ maturity and extensibility provide a high starting point for innovation.
    • \n\n\n\n
    • WordPress’ Block Editor has seen tremendous investment, amassing over 34,000 commits – more than entire competing CMS projects. New capabilities like Full Site Editing (FSE) give enterprises unprecedented ability to enable no-code site building.
    • \n\n\n\n
    • Just as being the first user-friendly publishing tool propelled WordPress’ initial growth, AI presents a similar opportunity. WordPress’ contributor community can build not just AI features, but an exciting multi-agent, LLM-agnostic ecosystem representing an intelligent content operating system.
    • \n\n\n\n
    • Pure-play headless vendors are working backwards to add no-code editing, while WordPress has long supported robust headless capabilities alongside its mature editor. For complex sites, hybrid architectures leveraging both are the pragmatic path forward.
    • \n
    \n\n\n\n

    Download the full WordPress in 2025 (PDF) report directly to learn more.

    \n\n\n\n

    Don’t miss WP:25, the virtual event.

    \n\n\n\n

    Save your spot at our free event, WP:25, exploring the future of WordPress and featuring key people working with many of the ideas discussed in the report.

    \n\n\n\n
    \n\n\n\n

    About the report’s author, Noel Tock — Having built his first website back in 1995, Noel has long been watching the evolution of the CMS space. As a co-owner at one of the leading enterprise WordPress agencies, Human Made, his belief in the power of open source is as great as ever. Human Made is a WordPress VIP Gold Partner specializing in DXP, headless, AI and more.

    \n\n\n\n

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18475\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:6;a:6:{s:4:\"data\";s:60:\"\n \n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"WordCamp Asia 2025: Manila Magic\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"https://wordpress.org/news/2025/02/wordcamp-asia-2025-manila-magic/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 14 Feb 2025 16:04:45 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:2:{i:0;a:5:{s:4:\"data\";s:6:\"Events\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}i:1;a:5:{s:4:\"data\";s:8:\"WordCamp\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18482\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:409:\"The first major WordCamp of the year is here! WordCamp Asia 2025 lands in Manila, Philippines, from February 20-22, bringing together open source enthusiasts, developers, and WordPress professionals from across the region—and the world. With three packed days of learning, networking, and collaboration, this year’s event promises fresh insights, dynamic discussions, and plenty of opportunities […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:13:\"Bernard Meyer\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:4844:\"\n
    \"WordCamp
    \n\n\n\n

    The first major WordCamp of the year is here! WordCamp Asia 2025 lands in Manila, Philippines, from February 20-22, bringing together open source enthusiasts, developers, and WordPress professionals from across the region—and the world.

    \n\n\n\n

    With three packed days of learning, networking, and collaboration, this year’s event promises fresh insights, dynamic discussions, and plenty of opportunities to connect.

    \n\n\n\n

    Solutions spotlight

    \n\n\n\n

    Throughout the conference days, multiple presentations will focus on the solutions provided by our amazing sponsors. This is a great opportunity to learn more about their initiatives and solutions.

    \n\n\n\n\n\n\n\n

    Keynotes, panels, and deep dives

    \n\n\n\n

    The main conference, which will be held on February 21-22, will feature a lineup of notable keynote speakers, including digital innovation leaders and open-source advocates. Attendees can expect diverse sessions on business strategy, development of best practices, and technical advancements.

    \n\n\n\n

    For those looking to sharpen their skills, presentations will dive deep into topics like SEO for WordPress, performance optimization, and AI-powered content creation. Plus, don’t miss the electrifying WordPress Speed Build Battle, where developers race to create stunning sites in record time.

    \n\n\n\n

    YouthCamp

    \n\n\n\n

    On February 22, WordCamp Asia 2025 will host YouthCamp, a pre-registered event designed to introduce young minds to WordPress and its endless possibilities. This initiative aims to engage the next generation of WordPress users, developers, and contributors through hands-on activities and interactive sessions

    \n\n\n\n

    Closing Q&A with Matt Mullenweg

    \n\n\n\n

    WordPress Cofounder Matt Mullenweg will wrap up the event with a live Q&A session on February 22. Whether attending in person or tuning in online, you can catch his insights live on the WordPress YouTube channel at 4:00 p.m. Philippine Time (08:00 UTC).

    \n\n\n\n

    After party

    \n\n\n\n

    As the sun sets on WordCamp Asia 2025, the excitement continues with the After Party (theme: Island Vibe)! Get ready to experience the vibrant spirit of the Philippines with a lively gathering at The Forum at PICC. Expect a night filled with great conversations, music, and a celebration of the WordPress community.

    \n\n\n\n

    Get WordCamp-ready

    \n\n\n\n\n\n\n\n

    As always, be part of the conversation! Whether you’re attending in Manila or following along online, share your experiences using #WCAsia and #WordPress.

    \n\n\n\n

    Manila is calling—see you at WordCamp Asia 2025!

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18482\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:7;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"WordPress 6.7.2 Maintenance Release\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"https://wordpress.org/news/2025/02/wordpress-6-7-2-maintenance-release/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Feb 2025 16:52:23 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18445\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:371:\"WordPress 6.7.2 is now available! This minor release includes 35 bug fixes, addressing issues affecting multiple components including the block editor, HTML API, and Customize. WordPress 6.7.2 is a short-cycle release. The next major release will be version 6.8 planned for April 15, 2025. If you have sites that support automatic background updates, the update […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Aaron Jorbin\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:8487:\"\n

    WordPress 6.7.2 is now available!

    \n\n\n\n

    This minor release includes 35 bug fixes, addressing issues affecting multiple components including the block editor, HTML API, and Customize.

    \n\n\n\n

    WordPress 6.7.2 is a short-cycle release. The next major release will be version 6.8 planned for April 15, 2025.

    \n\n\n\n

    If you have sites that support automatic background updates, the update process will begin automatically.

    \n\n\n\n

    You can download WordPress 6.7.2 from WordPress.org, or visit your WordPress Dashboard, click “Updates”, and then click “Update Now”. For more information on this release, please visit the HelpHub site.

    \n\n\n\n

    Thank you to these WordPress contributors

    \n\n\n\n

    This release was led by Aaron Jorbin.

    \n\n\n\n

    WordPress 6.7.2 would not have been possible without the contributions of the following people. Their asynchronous coordination to deliver maintenance fixes into a stable release is a testament to the power and capability of the WordPress community.

    \n\n\n\n

    Aaron Jorbin, Alex Lende, Alexandre Buffet, Andreas Pedersen, Andrew Ozz, Ankit Kumar Shah, apermo, Benedikt Ledl, bernhard-reiter, Brian Alexander, Carlos Bravo, Carolina Nymark, Cyrille, Daniel Post, darerodz, David Calhoun, David Smith, Dennis Snell, dhewercorus, Dion Hulse, Doug Wollison, Ella, Eshaan Dabasiya, Fabian Kägy, Fabian Todt, Felix Arntz, Felix Renicks, Francis Cabusas, Frank B., George Mamadashvili, ghinamt, Glynn Quelch, Greg Ziółkowski, James Koster, Jarda Snajdr, Jb Audras, jdnd, jeryj, Joe Dolson, Joe McGill, Jon Surrell, Jonathan Desrosiers, juanwp22, Juliette Reinders Folmer, Karthick, Kazuto Takeshita, Kelly Choyce-Dwan, Ketan Niruke, Lena Morita, levskipg, Maciej Ma?kowiak, Mario Santos, Matthew Boynes, Mayank Tripathi, Michal Czaplinski, Miguel Fonseca, Mitchell Austin, mreishus, Mukesh Panchal, Nadir Seghir a11n, Narendra Sishodiya, Naresh Bheda, neotrope, Nick Diego, Olga Gleckler, Parth vataliya, Pascal Birchler, paullb, Peter Wilson, Pitam Dey, redkite, Rishav Dutta, robertstaddon, rvoigt, Sagar Tamang, Sainath Poojary, seanlanglands, Sergey Biryukov, Scott Reilly, Shyam Kariya, smerriman, Stephen Bernhardt, Sukhendu Sekhar Guria, TobiasBg, Tonya Mork, Vishy Moghan, Weston Ruter, wongjn, Yogesh Bhutkar, zaoyao

    \n\n\n\n

    How to contribute

    \n\n\n\n

    To get involved in WordPress core development, head over to Trac, pick a ticket, and join the conversation in the #core and #6-8-release-leads channels. Need help? Check out the Core Contributor Handbook.

    \n\n\n\n

    Props to @joedolson, @joemcgill and @audrasjb for proofreading.

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18445\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:8;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:16:\"Joost/Karim Fork\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://wordpress.org/news/2025/01/jkpress/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 11 Jan 2025 02:06:06 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Meta\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18394\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:319:\"Making great software, great product that stands the test of time and not just survives but thrives through monumental technological shifts is incredibly hard. That challenge is part of the reason I love doing it. There is never a dull day, and the reward of seeing the code you wrote used by the most amazing […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt Mullenweg\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:9904:\"\n

    Making great software, great product that stands the test of time and not just survives but thrives through monumental technological shifts is incredibly hard. That challenge is part of the reason I love doing it. There is never a dull day, and the reward of seeing the code you wrote used by the most amazing creators in the world is an indescribable pleasure. When I see what people create with WordPress, some days I feel like I’m grinding pigment for Leonardo da Vinci or slitting a quill for Beethoven.

    \n\n\n\n

    In open source, one thing that makes it even harder to ship great software is bringing together disparate groups of contributors who may have entirely different incentives or missions or philosophies about how to make great work. Working together on a team is such a delicate balance, and even one person rowing in the wrong direction can throw everyone else off.

    \n\n\n\n

    That’s why periodically I think it is very healthy for open source projects to fork, it allows for people to try out and experiment with different forms of governance, leadership, decision-making, and technical approaches. As I’ve said, forking is beautiful, and forks have my full support and we’ll even link and promote them.

    \n\n\n\n

    Joost is a self-proclaimed leader in the SEO space, an industry known for making the web better. He asked for and I gave him WordPress marketing leadership responsibility in January 2019 and he stepped down in June of 2019, I think we would both agree in those 5 months he was not effective at leading the marketing team or doing the work himself.

    \n\n\n\n

    Karim leads a small WordPress agency called Crowd Favorite which counts clients such as Lexus and ABC and employs ~50 people.

    \n\n\n\n

    Both are men I have shared meals with and consider of the highest integrity. I would trust them to watch any of my 15 godchildren for a day. These are good humans. Now go do the work. It probably won’t happen on day one, but Joost and Karim’s fork, which I’ll call JKPress until they come up with a better name, has a number of ideas they want to try out around governance and architecture. While Joost and Karim will be unilaterally in charge in the beginning, it sounds like they want to set up:

    \n\n\n\n
      \n
    1. A non-profit foundation, with a broad board to control their new project.
    2. \n\n\n\n
    3. A website owned by that foundation which hosts community resources like a plugin directory, forums, etc.
    4. \n\n\n\n
    5. No more centralized and moderated plugin and theme directories with security guidelines or restrictions are what plugins are allowed to do like putting banners in your admin or gathering data, everything done in a federated/distributed manner.
    6. \n\n\n\n
    7. The trademarks for their new project will either be public domain or held by their foundation.
    8. \n\n\n\n
    9. “Modernization” of the technology stack, perhaps going a Laravel-like approach or changing how WordPress’ architecture works.
    10. \n\n\n\n
    11. Teams and committees to make decisions for everything, so no single person has too much power or authority.
    12. \n
    \n\n\n\n

    Karim has a similar post. Joost says he has the time and energy to lead:

    \n\n\n\n
    \n

    So @photomatt – I saw the post by @automattic.

    I'm ready to lead the next releases. I am sure plenty of people and companies are willing to help me and we've got plenty of ideas on what we should be doing.#WordPress

    — Joost de Valk (@jdevalk) January 10, 2025
    \n
    \n\n\n\n

    Now, as core committer Jb Audras (not employed by me or Automattic) points out, within WordPress we have a process in which people earn the right to lead a release:

    \n\n\n\n
    \n

    Before leading any major release of WordPress, please start with leading a minor one @jdevalk. Then, apply to be Triage Lead or Coordination Lead Deputy for a major release. These are the steps everyone in our community should follow before claiming to run « the next releases ».

    — Jb Audras (@AudrasJb) January 10, 2025
    \n
    \n\n\n\n

    However in Joost and Karim’s new project, they don’t need to follow our process or put in the hours to prove their worth within the WordPress.org ecosystem, they can just lead by example by shipping code and product to people that they can use, evaluate, and test out for themselves. If they need financial or hosting support is sounds like WP Engine wants to support their fork:

    \n\n\n\n
    \n

    We appreciate @jdevalk and @karimmarucchi thoughtful call for constructive conversation, change and evolved leadership within the WordPress community. Moments of disruption challenge all of us to reflect and to act.

    WordPress’s success as the most widely used CMS is not the…

    — WP Engine (@wpengine) December 20, 2024
    \n
    \n\n\n\n

    Awesome! (Maybe it’s so successful they rebrand as JK Engine in the future.) WP Engine, with its half a billion in revenue and 1,000+ employees, has more than enough resources to support and maintain a legitimate fork of WordPress. And they are welcome to use all the GPL code myself and others have created to do so, including many parts of WordPress.org that are open source released under the GPL, and Gutenberg which is GPL + MPL.

    \n\n\n\n

    Joost also is a major investor (owner?) in Post Status (which he tried to sell to me a few months ago, and I declined to buy, perhaps kicking off his consternation with me), so they have a news media site and Slack instance already ready to go. He also is an investor in PatchStack and appears to be trying to create a new business around something called Progress Planner, both of which could be incorporated into the new non-profit project to give them some competitive distinctions from WordPress.

    \n\n\n\n

    To make this easy and hopefully give this project the push it needs to get off the ground, I’m deactivating the .org accounts of Joost, Karim, Se Reed, Heather Burns, and Morten Rand-Hendriksen. I strongly encourage anyone who wants to try different leadership models or align with WP Engine to join up with their new effort.

    \n\n\n\n

    In the meantime, on top of my day job running a 1,700+ person company with 25+ products, which I typically work 60-80 hours a week on, I’ll find time on nights and weekends to work on WordPress 6.8 and beyond. Myself and other “non-sponsored” contributors have been doing this a long time and while we may need to reduce scope a bit I think we can put out a solid release in March.

    \n\n\n\n

    Joost and Karim have a number of bold and interesting ideas, and I’m genuinely curious to see how they work out. The beauty of open source is they can take all of the GPL code in WordPress and ship their vision. You don’t need permission, you can just do things. If they create something that’s awesome, we may even merge it back into WordPress, that ability for code and ideas to freely flow between projects is part of what makes open source such an engine for innovation. I propose that in a year we do a WordPress + JKPress summit, look at what we’ve shipped and learned in the process, which I’d be happy to host and sponsor in NYC next January 2026. The broader community will benefit greatly from this effort, as it’s giving us a true chance to try something different and see how it goes.

    \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18394\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:9;a:6:{s:4:\"data\";s:57:\"\n \n \n \n \n \n \n \n\n \n \n \n \n \n \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:4:{s:0:\"\";a:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"WordPress Themes Need More Weird: A Call for Creative Digital Homes\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:102:\"https://wordpress.org/news/2025/01/wordpress-themes-need-more-weird-a-call-for-creative-digital-homes/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 02 Jan 2025 18:53:06 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"category\";a:1:{i:0;a:5:{s:4:\"data\";s:6:\"Design\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18358\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:11:\"isPermaLink\";s:5:\"false\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:409:\"The modern web has gradually shifted from a vibrant tapestry of personal expression to a landscape of identical designs, where millions of websites share not just similar structures, but identical visual language, spacing, and interaction patterns. As we collectively gravitate toward the same “proven” layouts and “conversion-optimized” designs, we’re not just losing visual diversity – […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:10:\"Nick Hamze\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:7673:\"\n

    The modern web has gradually shifted from a vibrant tapestry of personal expression to a landscape of identical designs, where millions of websites share not just similar structures, but identical visual language, spacing, and interaction patterns. As we collectively gravitate toward the same “proven” layouts and “conversion-optimized” designs, we’re not just losing visual diversity – we’re ceding control over how we present ourselves to the world. This matters because genuine self-expression online isn’t just about aesthetics – it’s about maintaining spaces where authentic voices can flourish. 

    \n\n\n\n

    When every blog has the same hero section, when every portfolio follows the same grid, when every restaurant site looks interchangeable, we create an echo chamber of sameness. The cost isn’t just visual monotony – it’s the slow erosion of the web’s ability to surprise, delight, and showcase truly individual perspectives. WordPress, with its emphasis on complete ownership and control, offers an opportunity to break free from this convergence of design, allowing creators to build digital spaces that truly reflect their unique voice and vision.

    \n\n\n\n

    Think of WordPress themes like album covers. They should have personality and create an immediate visual impact. The web has become too sanitized, with everyone chasing the same minimal, “professional” look.

    \n\n\n\n

    Great themes should:

    \n\n\n\n
      \n
    • Have a strong point of view – like how Kubrick (the classic WordPress theme) defined an era with its distinctive header gradient. Don’t try to be everything to everyone.
    • \n\n\n\n
    • Embrace specific aesthetics boldly – whether that’s brutalist design, pixel art, hand-drawn elements, or distinctive typography. Create themes that excite people rather than just working for everyone.
    • \n\n\n\n
    • Design for specific use cases – like a theme for photographers that’s all about full-bleed images or a theme for writers that treats typography as art or a theme for musicians that feels like an album cover.
    • \n\n\n\n
    • Break some rules thoughtfully – because not every theme needs a hamburger menu. Not every theme needs to be mobile-first. Sometimes constraints create character.
    • \n
    \n\n\n\n

    We need more themes that make people say “Wow!” or “That’s different!” rather than “That’s clean and professional.” The web needs more personality, more risk-taking, more fun.

    \n\n\n\n

    After spending countless hours digging through the WordPress theme repository, searching for designs that break the mold and spark excitement, I came up nearly empty-handed. Don’t get me wrong – there are plenty of well-built themes out there. But where’s the daring? The personality? The unexpected?

    \n\n\n\n

    If you’ve got a wild theme idea burning in your mind – that portfolio theme that looks like a vintage trading card collection, that blog theme inspired by zine culture, that restaurant theme that feels like a hand-drawn menu – now’s the time to build it. WordPress desperately needs your creativity, your weird ideas, your willingness to break the visual rules. The future of the web shouldn’t be a monochrome landscape of identical layouts. Let’s make WordPress themes exciting again. Let’s make the web weird again.

    \n\n\n\n\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"18358\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}s:27:\"http://www.w3.org/2005/Atom\";a:1:{s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:0:\"\";s:7:\"attribs\";a:1:{s:0:\"\";a:3:{s:4:\"href\";s:32:\"https://wordpress.org/news/feed/\";s:3:\"rel\";s:4:\"self\";s:4:\"type\";s:19:\"application/rss+xml\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:44:\"http://purl.org/rss/1.0/modules/syndication/\";a:2:{s:12:\"updatePeriod\";a:1:{i:0;a:5:{s:4:\"data\";s:9:\"\n hourly \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:15:\"updateFrequency\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"\n 1 \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:30:\"com-wordpress:feed-additions:1\";a:1:{s:4:\"site\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"14607090\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}}}}}}s:4:\"type\";i:128;s:7:\"headers\";O:48:\"WpOrg\\Requests\\Utility\\CaseInsensitiveDictionary\":1:{s:7:\"\0*\0data\";a:12:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Tue, 01 Apr 2025 10:03:23 GMT\";s:12:\"content-type\";s:34:\"application/rss+xml; charset=UTF-8\";s:4:\"vary\";s:37:\"Accept-Encoding, accept, content-type\";s:25:\"strict-transport-security\";s:12:\"max-age=3600\";s:6:\"x-olaf\";s:3:\"⛄\";s:13:\"last-modified\";s:29:\"Tue, 25 Mar 2025 16:26:23 GMT\";s:4:\"link\";s:63:\"; rel=\"https://api.w.org/\"\";s:15:\"x-frame-options\";s:10:\"SAMEORIGIN\";s:16:\"content-encoding\";s:2:\"br\";s:7:\"alt-svc\";s:19:\"h3=\":443\"; ma=86400\";s:4:\"x-nc\";s:9:\"HIT ord 2\";}}s:5:\"build\";i:1743023515;s:21:\"cache_expiration_time\";i:1743545003;s:23:\"__cache_expiration_time\";i:1743545003;}','off'),(201,'_transient_timeout_feed_d117b5738fbd35bd8c0391cda1f2b5d9','1743545004','off'),(202,'_transient_feed_d117b5738fbd35bd8c0391cda1f2b5d9','a:6:{s:5:\"child\";a:1:{s:0:\"\";a:1:{s:3:\"rss\";a:1:{i:0;a:6:{s:4:\"data\";s:3:\"\n\n\n\";s:7:\"attribs\";a:1:{s:0:\"\";a:1:{s:7:\"version\";s:3:\"2.0\";}}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:1:{s:7:\"channel\";a:1:{i:0;a:6:{s:4:\"data\";s:61:\"\n \n \n \n \n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:1:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:16:\"WordPress Planet\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"http://planet.wordpress.org/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:8:\"language\";a:1:{i:0;a:5:{s:4:\"data\";s:2:\"en\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:47:\"WordPress Planet - http://planet.wordpress.org/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"item\";a:50:{i:0;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"Do The Woo Community: Engaging Young People in the WordPress Community\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=88452\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://dothewoo.io/blog/engaging-young-people-in-the-wordpress-community/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:248:\"The WordPress community must engage younger generations by simplifying onboarding, providing education, promoting career opportunities, and fostering connections, ensuring sustainable contributions to the platform’s future development and growth.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 31 Mar 2025 09:10:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:1;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:123:\"Gutenberg Times: Field Guide, No-Code Theme, Pattern Library, why you might not need a Custom Block — Weekend Edition 323\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=38176\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:127:\"https://gutenbergtimes.com/field-guide-no-code-theme-pattern-library-why-you-might-not-need-a-custom-block-weekend-edition-323/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:18955:\"

    Hi,

    \n\n\n\n

    Spring is here. On the weekend I saw Forsythia bushes in full bloom all over the city. Yesterday, I passed the National Museum and saw their Magnolia trees blooming as well. The temperatures are still too low for my taste, but not for long. ?️

    \n\n\n\n\"\"\n\n\n\n

    “Isn’t this a WordPress newsletter”, you might think. I know, I know. Let’s get on with it, then. Carpe diem! ?

    \n\n\n\n

    Have a fabulous weekend!

    \n\n\n\n

    Yours, ?
    Birgit

    \n\n\n\n

    PS: The links for mentioned people are now going to their Blue Sky profile, and if I couldn’t find them, it’s till their X (formerly known as Twitter) profile.

    \n\n\n\n

    Follow us on Bluesky @bph.social and @gutenbergtimes.com

    \n\n\n\n\n\n\n\n
    \n\n\n\n

    The Page Builder summit 2025 is on the calendar now: Anchen le Roux and Nathan Wrigley announced the eighth edition of the virtual conference will take place from 12th to 16th of May 2025. Save the date, and add your name to the Waitlist, to receive info, when registration opens. “The summit is a 5-day event that will help WordPress developers, designers, freelancers, and agencies to build better websites faster and more efficient. As well as learn more about the page builders and the awesome things you can do with them. “, they wrote.

    \n\n\n\n
    \n\n\n\n

    Web Agency Summit 2025 will happen April 7-11, 2025. “Learn proven strategies top agencies are using today to scale sustainably, streamline operations, attract high-value clients, and stay ahead of the curve.”

    \n\n\n\n
    \n\n\n\n

    WordSesh returns May 13–15, 2025. It is a virtual conference for WordPress professionals. Its host, Brian Richards, is a seasoned virtual conference producer and WordPress educator. His speaker and session curation is top-notch. Sign up to receive updates on the next event.

    \n\n\n\n

    Developing Gutenberg and WordPress

    \n\n\n\n

    WordPress 6.8 Release Candidate 1 is now available for testing. Final release is scheduled for April 15, 2025

    \n\n\n\n
      \n
    • You can check out the post Help Test WordPress 6.8 with detailed instructions and videos on selected features.
    • \n\n\n\n
    • The Field Guide holds relevant information for developers about the new version.
    • \n\n\n\n
    • The Source of Truth compliments with detailed information on block editor features for end users, plugin, and theme developers.
    • \n
    \n\n\n\n

    The latest Dev Notes for WordPress 6.8

    \n\n\n\n\n\n\n\n
    \n\n\n\n

    Gutenberg 20.6

    \n\n\n\n

    George Mamadashvili released Gutenberg 20.6 RC 1 version, and it’s ready for testing. What to expect in this version?

    \n\n\n\n
      \n
    • The Table of contents block received a new option to control the level of heading included. (69063)
    • \n\n\n\n
    • The Navigation block now sports a slider to control the transparency for submenu background. (69063)
    • \n\n\n\n
    • The RSS block now has an option to allow opening the links in a new tab and set the rel attribute. (69641)
    • \n
    \n\n\n
    \n \n
    \n \n \n \n
    \n\n\n
    \n

    ?️ Latest episode: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia with special guest Jessica Lyschik.

    \n\n\n\n\"Jessica\n
    \n\n\n\n

    Plugins, Themes, and Tools for #nocode site builders and owners

    \n\n\n\n

    Wes Theron created a video tutorial to teach you How to Build a WordPress Theme the No-Code Way. He shows you where to update your colors, choose your fonts, modify the Single page template and then use the Create block Theme plugin to save all the settings into a new theme’s file structure.

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    In this short video on X (former Twitter), Jamie Marsland shows us How to create a One-Pager website with WordPress, using the site editor, core blocks and some custom CSS.

    \n\n\n\n
    \n\n\n\n

    MahdiAli Khanusiya, is the designer behind the PatternWP plugin that offers a big library of WordPress block patterns and full-page templates. Using it will instantly increase the range of designs and layout you can offer your customers, and streamline your production process. There is also a pro version available.

    \n\n\n\n\"\"\n\n\n\n

    Theme Development for Full Site Editing and Blocks

    \n\n\n\n

    Latest six block themes in the WordPress repository:

    \n\n\n\n\n\n\n\n\"\"\n\n\n\n

     “Keeping up with Gutenberg – Index 2025” 
    A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. The previous years are also available: 2020 | 2021 | 2022 | 2023 | 2024

    \n\n\n\n

    Building Blocks and Tools for the Block editor.

    \n\n\n\n

    In his post How to extend core WordPress blocks with Blocks API, Joel Olawanle, technical editor at Kinsta, introduced you to the basic extension methods like Block Styles and Block Variations with code examples and multiple ways to accomplish the tasks.

    \n\n\n\n
    \n\n\n\n

    Alfredo Navas, web developer at WebDev Studios, wrote a tutorial on how to use the Block Bindings API and why you might not need a Custom Block. Navas walks you through registering a Custom Source, how to create a Block Variation with custom data and making it all work in the editor and on the front end.

    \n\n\n\n
    \n\n\n\n

    In last week’s livestream, Ryan Welcher created a new WordPress block theme for the Block Developer Cookbook and gave it a new look. You can watch him turning change his color scheme and turn his existing theme into a style variation.

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    Brian Coords found a way to create Dynamic WordPress Playground Blueprints with Cloudflare Workers and shared in his video how he built a system to spin up demo WooCommerce stores. The code lives on GitHub

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n

    Need a plugin .zip from Gutenberg’s master branch?
    Gutenberg Times provides daily build for testing and review.

    \n\n\n\n

    Now also available via WordPress Playground. There is no need for a test site locally or on a server. Have you been using it? Email me with your experience

    \n\n\n\n

    \"GitHub

    \n\n\n\n

    Questions? Suggestions? Ideas?
    Don’t hesitate to send them via email or
    send me a message on WordPress Slack or Twitter @bph.

    \n\n\n\n
    \n\n\n\n

    For questions to be answered on the Gutenberg Changelog,
    send them to changelog@gutenbergtimes.com

    \n\n\n\n
    \n\n\n\n

    Featured Image:

    \n\n\n\n
    \n\n\n\n

    Don’t want to miss the next Weekend Edition?

    \n\n\n

    We hate spam, too, and won’t give your email address to anyone
    except Mailchimp to send out our Weekend Edition

    Thanks for subscribing.
    \n\n\n
    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 29 Mar 2025 09:21:31 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:2;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:83:\"Do The Woo Community: Christian Taylor Joins as Co-Host of the Creative Sparks Show\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93581\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"https://dothewoo.io/christian-taylor-joins-as-co-host-of-the-creative-sparks-show/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:96:\"BobWP announces new co-hosts for the Content Sparks show, video content expert Christian Taylor.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 28 Mar 2025 11:40:15 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:3;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: Do the Woo Friday Shares, March 28, 2025 v12\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93556\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"https://dothewoo.io/blog/do-the-woo-friday-shares-march-28-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:206:\"This content highlights our carefully selected information and resources from the Woo and WordPress community, aiming to provide valuable insights and updates for users and enthusiasts in the digital space.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 28 Mar 2025 08:42:11 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:4;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"Do The Woo Community: WordPress Flexibility and Simplicity: Building for Users with Ben Ritner\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93525\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:92:\"https://dothewoo.io/wordpress-flexibility-and-simplicity-building-for-users-with-ben-ritner/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:384:\"In today’s Woo ProductChat, co-hosts Katie Keith, founder and CEO at Barn2, and James Kemp, the core product manager at WooCommerce, sit down with Ben Ritner, the Senior Director of Product at StellarWP. They dive into the intricate balance between customizability and simplicity in WordPress products, particularly focusing on Ben’s work with the Cadence suite. […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 27 Mar 2025 16:39:33 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:5;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:78:\"Do The Woo Community: Leveling Out the Audio on a Podcast with Multiple Guests\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93358\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:82:\"https://dothewoo.io/blog/leveling-out-the-audio-on-a-podcast-with-multiple-guests/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:252:\"Podcasting requires managing sound levels effectively, especially during livestreams. Auphonic, with its Loudness Normalization feature, simplifies post-production, ensuring balanced audio quality and saving valuable time for creators, plus a lot more.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 27 Mar 2025 12:26:21 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:6;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:68:\"BuddyPress: BuddyPress 14.3.4, 12.5.3 & 11.4.4 Security Releases\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"https://buddypress.org/?p=336835\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:81:\"https://buddypress.org/2025/03/buddypress-14-3-4-12-5-3-11-4-4-security-releases/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2347:\"

    BuddyPress 14.3.4, BuddyPress 12.5.3, and BuddyPress 11.4.4 are all now available. This is a security release. Please update as soon as possible.

    \n\n\n\n

    14.3.4, 12.5.3 & 11.4.4 fixed two bugs:

    \n\n\n\n
      \n
    • Restrict bulk notification management to owner. Many thanks to Brian Mungah for responsibly reporting the problem.
    • \n\n\n\n
    • Improve security of status update messages. Many thanks to mikemyers for responsibly reporting the issue.
    • \n
    \n\n\n\n

    For complete details, visit the 14.3.4 changelog.

    \n\n\n\n
    \n\n\n\n\n\n\n\n
    \n\n\n\n

    You can get the latest version by clicking on the above button, downloading it from the WordPress.org plugin directory or checking it out from our Subversion repository.

    \n\n\n\n

    Many thanks to our 14.3.4 contributors 

    \n\n\n\n

    emaralivejjj, and dcavins.

    \n\n\n\n

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 27 Mar 2025 02:22:26 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"David Cavins\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:7;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:80:\"WPTavern: #162 – Jo Minney on Website Usability Testing for WordPress Projects\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=193251\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"https://wptavern.com/podcast/162-jo-minney-on-website-usability-testing-for-wordpress-projects\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:54757:\"Transcript
    \n

    [00:00:00] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.

    \n\n\n\n

    Jukebox is a podcast which is dedicated to all things WordPress, the people, the events, the plugins, the blocks, the themes, and in this case, the efficacy of website usability testing for WordPress projects.

    \n\n\n\n

    If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice. Or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

    \n\n\n\n

    If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

    \n\n\n\n

    Today I bring you the first in a mini series of podcasts I recorded in person at WordCamp Asia in Manila. This flagship WordPress event brought together hundreds of WordPress professionals, enthusiasts, and all manner of interested parties under one roof for a three day event. One contributor day, and two days of presentations.

    \n\n\n\n

    I tracked down several of the speakers and workshop organizers and recorded them speaking about the subject they were presenting upon. I hope that you enjoy what they had to say.

    \n\n\n\n

    So on the podcast today, we have the first of those conversations, and it’s with Jo Minney.

    \n\n\n\n

    Jo based in Perth, Australia, is passionate about user experience, data-driven decision making, cats, pockets, and travel. She’s a small business founder, and works with organizations creating digital platforms with WordPress. She also freelances as a UX consultant. She volunteers with Mission Digital to address social issues using technology, and is an ambassador for She Codes Australia, promoting tech accessibility for women. Recognized as a 2023 Shining Star by Women in Technology, Western Australia, Jo is an international speaker on topics like user experience, accessibility, and gender equality. She’s committed to ensuring a seamless user experience, and today shares her insights from practical, everyday usability testing.

    \n\n\n\n

    Joe’s presentation entitled, Budget Friendly Usability Testing for WordPress, helped attendees understand what usability testing is, and clarified why it differs from other testing methods. She shares examples from her work showing how small changes can significantly impact user experience, which is better for you, the website builder, and your client, the website owner.

    \n\n\n\n

    We also discuss how usability testing can transform a website’s effectiveness by improving conversions. Joe explains the importance of recruiting novice users for testing, and highlights how usability testing pushes for real, user-centered, improvements.

    \n\n\n\n

    Towards the end, Jo share’s practical advice on when and how to integrate usability testing into your process. Advocating for early and iterative testing to preemptively address potential issues.

    \n\n\n\n

    If you’re looking to gain a deeper understanding of usability testing and its benefits, this episode is for you.

    \n\n\n\n

    If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast where you’ll find all the other episodes as well.

    \n\n\n\n

    And so without further delay, I bring you Jo Minney.

    \n\n\n\n

    I am joined on the podcast by Jo Minney. Hello, Jo.

    \n\n\n\n

    [00:04:06] Jo Minney: Hi. It’s good to be back again Nathan.

    \n\n\n\n

    [00:04:08] Nathan Wrigley: Yeah, you’ve been on the podcast before. But this time it’s different because this time we’re actually facing each other. Last time we were doing it on, you know, something like Zoom or something like that, but here we are staring at each other because we’re at WordCamp Asia. We’re in the Philippines, Manila. It is the second day of the event, kind of. We had Contributor Day yesterday. Today is presentation day. It’s the first day of the presentations, and you are doing one.

    \n\n\n\n

    [00:04:29] Jo Minney: I’ve done one actually. I did it at 11 o’clock this morning.

    \n\n\n\n

    [00:04:33] Nathan Wrigley: How did it go?

    \n\n\n\n

    [00:04:34] Jo Minney: It went really well, I think. I had very good feedback from it. Half of the things on my slides didn’t work. I think that’s normal for a conference though, and I’m pretty experienced now at just winging it, and rolling with it anyway, so. It was really exciting because it’s a topic that I’m super passionate about and I haven’t had a chance to speak about it at a conference before. So, yeah, it was really nice to be able to share something that I do on a day-to-day basis and can stand up there and really confidently talk about.

    \n\n\n\n

    [00:04:58] Nathan Wrigley: I don’t think I’ve ever spoken about this subject before in any of the podcasts that I’ve done. That is quite nice, and it’s novel. I’ll just introduce the topic. The presentation that you gave was called Budget-Friendly Usability Testing for WordPress. And obviously that sort of sums it up. We’re going to talk about usability testing.

    \n\n\n\n

    But before we do that, Jo, just to nail your colours to the mast a bit, tell us about you. Where you’re from. What you do for a job, and anything that you think is relevant to this podcast.

    \n\n\n\n

    [00:05:22] Jo Minney: Okay, I really like cats and pockets.

    \n\n\n\n

    [00:05:25] Nathan Wrigley: I saw that in your show notes. Why pockets?

    \n\n\n\n

    [00:05:27] Jo Minney: Okay. So I think pockets are a great example of something that can be both a fantastic and a terrible user experience. You are like, oh yeah, maybe I know what you’re talking about. But, let me ask, do you live with a woman?

    \n\n\n\n

    [00:05:39] Nathan Wrigley: I do.

    \n\n\n\n

    [00:05:39] Jo Minney: I know that’s a very personal question, sorry Nathan. But, how many times on average a month does she complain about not having pockets in her clothing?

    \n\n\n\n

    [00:05:48] Nathan Wrigley: Never, she carries a bag.

    \n\n\n\n

    [00:05:50] Jo Minney: Yeah, but why do we have to carry a bag, right? She has to carry a bag because her clothing doesn’t have pockets. So I spoke at a conference late last year, and I asked this question. This has been a life goal of mine, was to speak about pockets at a conference. And I managed to do it. I asked all of the women in the audience, hands up if you’ve ever thrown out clothes or gotten rid of them because they didn’t have pockets in? And every single woman stood up and was like, yes, I’ve gotten rid of clothes because they didn’t have pockets in.

    \n\n\n\n

    Most of the people that were there were men. And I said, stand up if you don’t have pockets in your clothes right now. And 400 men stayed seated. But this is an example of something where, yes, there’s a subsection of the population that’s experiencing this problem, but it’s a big problem for us. It’s very frustrating. You’re at a conference, you don’t want to have to carry around a handbag. So, pockets. They’re a great example of user experience.

    \n\n\n\n

    [00:06:45] Nathan Wrigley: Okay, I get it. I understand now. Tell us a little bit about your sort of day-to-day work, though. You work with WordPress, I guess.

    \n\n\n\n

    [00:06:51] Jo Minney: I do. So I run a small agency. We’re what I usually call a micro agency, and we have only three of us that are working on the WordPress team. We do website development, but specifically for charities, nonprofits, cause-based organisations, so a lot of social enterprises and that sort of thing.

    \n\n\n\n

    On top of that, I also do consulting for user experience research. I’m not a designer. UX and UI often get lumped together. They’re very different. UI is about the interface and what people see, and UX is about user experience and how people use things. And they can’t be completely separated, but they’re also very different.

    \n\n\n\n

    So I am lucky because I work in the niche that I work in, that I’m able to do a lot of usability testing and it’s something that a lot of people don’t get the experience to do. And so I thought I would share what I’ve been able to learn over having this sort of unique opportunity to do so much usability testing, and share with people how they can do it more cost effectively, but also the benefit that it can have for a project.

    \n\n\n\n

    [00:07:54] Nathan Wrigley: Let’s dig into it and I’m going to actually crib the questions which you posed to the audience today. You put four questions surrounding your subject. And the first one is this. And I’m sure that the listeners to this podcast, if they’re anything like me, they’ll probably have some impression that usability testing is a thing that you could do. And I think the word there is could, as opposed to do, do.

    \n\n\n\n

    I imagine most people have an impression of what it is, but whether or not they do it is another thing altogether. But that would then lead to this. What even is it? So what is usability testing, and what are you actually testing for? So that was a question you posed to the audience and now I’m throwing it right back at you.

    \n\n\n\n

    [00:08:34] Jo Minney: Yeah, it’s a good question. It’s probably the sensible place to start. So usability testing is not the same as user testing, or user acceptance testing. And it’s focusing on, how do we identify what the problems are with something that we have created?

    \n\n\n\n

    So a lot of UX research is focused on what we call quantitative testing. So, meaning we’re looking for quantities of something. It could be the amount of time it takes someone to do an action. It could be using heat maps. So we have a thousand users, let’s see where their cursors most often are going. Let’s see how often they scroll down the page. And quantitative testing is really good at showing you comparisons of whether one thing or another thing works better, but it’s not actually good at identifying what the problem is, only that there is a problem.

    \n\n\n\n

    So you can do a lot of testing and still not know what the problem is. Usability testing is different because it’s what we call qualitative testing. So it means that we’re not looking for big numbers, we’re not looking for lots of data. We are looking for really deep user experience examples. And in a nutshell, the way that that works is you recruit some participants, usually five people per round is ideal. And often I get asked, well, how can you have statistically significant data with only five people? That’s not the point of qualitative testing. The point of qualitative testing is not to have statistically relevant data, it’s to have the actual user experiences.

    \n\n\n\n

    So you recruit your people, you come up with your research questions and that’s the problem that you’re trying to solve or the question you’re trying to get an answer to. So, an example might be, are users going to recognise this label that I’ve used in my navigation? Is this button going to get clicked if I put it in this location? It’s often a thing that, if you’re working with a customer to develop a website for them, what we find is that often the things that we are testing for in usability testing are things that the customer and I disagree on, or things where they weren’t sure when they made the decision in the first place. And they’re a great example of things that you want to test for.

    \n\n\n\n

    But the research questions are only the first part because if I say, the example I used in my talk today is that we had a support service directory. And this was for people who are experiencing family domestic violence. And they didn’t want to use the term directory because it’s a very harsh term. So they had called it support services, which sounds, on the surface like a good idea, but a lot of the people that are using their platform are not English first language. And they also tend to be in a really stressed out state as you can imagine.

    \n\n\n\n

    And so what we actually found is that when we said to them, can you imagine you’re helping someone, can you help them find a legal service that will enable them to get a restraining order or something like this? What we found is that repeatedly they didn’t go to support services to start with. The minute we changed that to service directory, they started to find the thing that we wanted them to click on.

    \n\n\n\n

    It’s such a small change, but it made a huge impact, the usability. Now, we found that out after the second test, which meant that we were able to change it after the second test, and then we had three more tests where we could show that every time they were able to find the thing that we wanted them to be looking for.

    \n\n\n\n

    So this is an example where the research question and the research task or the activity that we’re giving to the user, they’re not the same thing. If we said to them, find support services, find the service directory, if we use that language, obviously they’re going to look for that label. But instead we asked them to do an activity that would hopefully take them to the place we wanted them to go to.

    \n\n\n\n

    And then finally the last step is to iterate that and to actually take that data and make decisions, and make improvements to the project iteratively to try and make it better. That’s the goal, right? Is to find what the problems are and fix them. So we still have to work out how to fix them, but at least we know what the problems are and not just that people were not clicking on the button and we don’t know why.

    \n\n\n\n

    [00:12:27] Nathan Wrigley: I have a couple of follow up questions. First thing isn’t the question, it’s an observation. So that’s really cleared up in my head what it is, so that’s amazing. But one of the things that I want to know from that is, do you filter out people who, let’s say for example, you’ve got a website, the kind that you just described. Do you filter out people who are not the target audience? So in other words, I don’t know, maybe that’s not a perfect example. But let’s say, on some websites, would it be better to have really inexperienced users of the internet as your five candidates?

    \n\n\n\n

    [00:12:59] Jo Minney: That is exactly the ideal person.

    \n\n\n\n

    [00:13:02] Nathan Wrigley: So people who are just, I’ve never come across this before. You want people who are potentially bound to be confused. If somebody’s going to be confused, it’s you five.

    \n\n\n\n

    [00:13:10] Jo Minney: That is the ideal participant for a usability study. And often people say, I want to start learning how to do usability testing. Where should I start? And my advice to them is always the same, with your mum.

    \n\n\n\n

    Recruit a person that’s a generation older than you, because I can guarantee that in most cases, sorry to generalise, but they tend to be less efficient and less used to technology because they haven’t grown up with it. So for millennials and younger, we have had technology for all of our adult lives and most of our childhood.

    \n\n\n\n

    For my parents’ generation, they have had to learn that technology as an adult, and so their brains have a different mental model, and they don’t take for granted things that we take for granted. Like, when I click the logo, it will take me back to the homepage. I know that, you know that, your mum might not know that.

    \n\n\n\n

    And I think that is something that is really valuable is to understand the benefit of testing with people who aren’t as experienced with technology. Who don’t speak English as a first language. Who are experiencing some kind of accessibility challenge. Whether that’s using assistive technology, being colorblind. Things like that are really good things to try and get some cross-sectional representation in your testing participant pool.

    \n\n\n\n

    [00:14:25] Nathan Wrigley: So the idea then is that you’ve got these novice users who hopefully will immediately illustrate the point. And it’s driven by questions. So it’s not just, we are just going to stand over your shoulder and watch you browse the internet, and when you do something and describe, you’re looking for something and you can’t find it, that’s not how it’s done.

    \n\n\n\n

    It’s more, okay, here’s a defined task, do this thing and we’re going to ask you to do five things today, we want you to achieve them all and describe what you’re doing, but it’s more of that process.

    \n\n\n\n

    And then the idea is that you go from an imperfect website, slowly over time, iterating one problem after another towards a better website. The goal is never reached. It’s just an iterative process.

    \n\n\n\n

    [00:15:01] Jo Minney: That’s it. Perfection does not exist.

    \n\n\n\n

    [00:15:03] Nathan Wrigley: Okay, so that’s interesting. So we start with the novice. We’ve got a small cohort of people. We ask them specific questions, and we get feedback about those specific questions.

    \n\n\n\n

    So the other thing that I wanted to ask then is, when do you do it? Because it feels like you need to build the website first, then show it to people. So there’s got to be something. This isn’t process of discovery prior to the website. You need pixels on pages. Buttons that are potentially mislabeled or what have you. Is that the case? Build first, then usability test afterwards. There’s no usability testing prior to the initial build.

    \n\n\n\n

    [00:15:37] Jo Minney: It’s kind of a trick question because you can usability test at most stages. Probably the only stage you can’t usability test at is when you don’t yet have a site map. Having said that, my recommendation is, assuming you had unlimited budget and unlimited time, I would do at minimum two rounds of usability testing, and I would do one before you have any design, and I would do it just using wire frames.

    \n\n\n\n

    So we build interactive wire frames using WordPress. So for the demo that I did today, I spun one up. I used InstaWP. You can get like a seven day website or something through there. It took me 42 minutes to build out the website in just the block editor, with no design or anything, just the layout of it. And I was eating a loaded potato at the time. So if I can do that in 42 minutes, eating a loaded potato, and that’s not my job, I think it’s a pretty efficient and cost effective way of being able to do early usability testing.

    \n\n\n\n

    And often the thing that we’re testing for there is like, have I got the right navigation structure and hierarchy? Are the labels that I’m using sensible for people? Do they fit with the mental models of what our users are actually expecting? And the benefit of doing it that early is that when you don’t have a design applied, it’s a lot easier to identify problems.

    \n\n\n\n

    Because there is a thing that happens in human psychology, and there’s a lot of psychology in user experience. And there’s a thing that happens where if something’s pretty, we will say that it is easier to use. Our experience is that it’s easier to use because it’s nice to look at. And that’s great. That means that UI is really important, but it also means that, if you have a really nice UI, it can mask problems that you have in the background. It is great that things can be easier if they’re pretty, but imagine how much easier they would be if they worked well and were pretty, that’s what we should be aiming for.

    \n\n\n\n

    So typically we would do one round of usability testing when we just have a framework and just have the navigation. When someone lands on a page, sometimes we’ll just write a message on there and say, congratulations, you found the service directory where you can find this thing, this thing, this thing, this thing, and then we put a little button there. When they click it, it releases confetti on the page. So they get a dopamine hit and it’s like, yay, I completed the activity. You don’t have to have all of your content in place to be able to do testing, and identify early that you’ve got problems that you need to fix.

    \n\n\n\n

    [00:18:02] Nathan Wrigley: It sounds almost like an overly complicated design is the enemy of usability. We are drawn towards beautiful, but sometimes maybe beautiful just is overwhelming. You know, there’s lots of colors on the page, the buttons get hidden, there’s just too much text on there. Looks great, but it might be sort of masking the thing that you’re really trying to show. And it feels like there’s this tight rope act of trying to balance one thing against the other. Yeah, that’s really interesting.

    \n\n\n\n

    So, with the wire frame thing, in that case, you are really just testing, can the person find the thing? But I’m guessing once you’ve move beyond the wire frame stage and you’ve got a website, it’s literally out on the internet, it’s functional. It’s exactly what we hope would be the perfect version, then you’re drilling into more detail. You know, can a person find this resource? Do they know that this button is what we are intending them to click? Those kind of things.

    \n\n\n\n

    [00:18:49] Jo Minney: Yeah. So I think things like searchability and discoverability are much easier to test for in the early stages when you’re just doing, say, using like a wire frame or a prototype. And things like usability, you really do need to have the complete designed product to be able to test for them well. And I say that, there’s actually kind of four categories of the different types of tasks that we can do. I’ll give you the link to the blog post that I wrote that has all of this in detail because we do not have time to go deep into that today.

    \n\n\n\n

    But things like, does my search form work the way that I want it to? They’re the sorts of things that you do have to do some development to be able to get them working. So it’s not always practical to do that at the very early stages when you do want to start testing your navigation and stuff like that.

    \n\n\n\n

    Something that you can do is if you’ve only got enough budget, or enough time, to be able to do, say, five usability tests total, you could do two of them early, and then you could do three of them towards the end, after you have the majority of the design and the development work in place. Users are pretty forgiving when they’re doing a usability test. If you say, this is still a work in progress, there might be a couple of pages that look odd and aren’t quite ready to go live yet. If you get somewhere and you’re not sure, you can just go back, it’s okay.

    \n\n\n\n

    It’s not meant to be a perfect experience. The point is that you are getting their real time thoughts and feedback as they’re doing it. So it’s really important that you try and encourage them to follow the think aloud protocol, which is really outlining every single thing that goes through they’re head, just brain dump on me please. Like, I just want to hear all of your thoughts and thought processes.

    \n\n\n\n

    And the only thing as the facilitator that I will say during a usability test is, tell me what you’re thinking. And other than that, I am completely silent. So even when it comes to giving them the activity, so if I’m asking you to do an activity like help somebody find a legal service that they can use in this particular state. I would actually send that task to you via the chat or something like that.

    \n\n\n\n

    I would send the task to you via the chat, and then I would get you to read that task back to me, because I don’t want you to be thinking about how I’m saying it. I want you to be able to go back to that task and look at it, and think about it, and process everything inside your own head. But I want you to be telling me all of that.

    \n\n\n\n

    So often we’ll find people ask questions during that, like, what should I do next? And the answer to that is really hard to train yourself out of replying to them with anything other than, what would you do if I wasn’t here? And I think that’s the hardest thing about learning to facilitate a usability test.

    \n\n\n\n

    [00:21:24] Nathan Wrigley: Yeah, and in a sort of an ideal scenario, you wouldn’t even be in the room. But in some strange way, you’d be able to just get into their head and say, okay, now I want you to do this, but every time you’ve got problem, just figure figure it out, and we’ll watch. But you have to be there because you have to be able to listen to what they’re saying and what have you. Yeah, that’s curious.

    \n\n\n\n

    [00:21:40] Jo Minney: Yeah, and we do, at the end of each activity, we’ll then ask them for feedback on how they found it. If they had any suggestions or things that they didn’t say out loud while they were doing it that they wanted to share with us. How confident were they with the activity, and did they think that they were successful in it, which is a really good way of telling, I wasn’t really sure what the activity was meant to do. Or I wasn’t really sure if what I found really met the needs that I was looking for.

    \n\n\n\n

    Then we ask them, how certain are you with the answer that you just gave? And if they’re like, three out of five, you’re like, alright, this person didn’t understand what it was that I was asking them to do in the first place. Maybe the problem is actually with my question and not with the website.

    \n\n\n\n

    [00:22:18] Nathan Wrigley: Okay, so the whole process is, you’re not just asking for feedback about the website, there’s a whole process of asking for feedback about the process as well which is, that’s kind of curious. Meta, meta processing.

    \n\n\n\n

    [00:22:27] Jo Minney: Very meta, for sure.

    \n\n\n\n

    [00:22:29] Nathan Wrigley: We’re in an industry where at the moment everything is trying to be automated.

    \n\n\n\n

    [00:22:32] Jo Minney: Is this the AI question?

    \n\n\n\n

    [00:22:34] Nathan Wrigley: Well, no, this feels like it’s a very human thing. You need actual bodies on the ground. So it’s really a question of economics. Because I’m wondering if this often turns out to be a fairly expensive process. And because of that, I wonder if people push against it, because the budgets may not be there. If this is something that clients typically would say, well, okay, tell me how much that’s going to cost. It’s a nice idea but, okay, it’s going to cost us X thousand dollars because we’ve got to put five people in a room and we’ve got to pay for your time to moderate the event, and come up with the questions and so on.

    \n\n\n\n

    How do we manage that in an era of automation where everything is, the dollar cost of everything has got to be driven down. This feels like the dollar cost is going up because there’s humans involved.

    \n\n\n\n

    [00:23:14] Jo Minney: Yeah, it’s a great question. Have you ever run a Google ad before?

    \n\n\n\n

    [00:23:17] Nathan Wrigley: It’s expensive.

    \n\n\n\n

    [00:23:18] Jo Minney: It’s very expensive. It’s very expensive to get a new lead. It’s a lot more cost effective to convert a lead than it is to get a new one. And the point of usability testing is to improve conversion of people being able to do the thing that you want them to do on the website.

    \n\n\n\n

    So my first answer to that would be, look at the cost benefit analysis. It’s worth it in most cases to do usability testing. Something that we’ve found with positioning of usability testing is that if we offer it as an add-on, then people don’t want to do it because they don’t want to pay for it. They see the value in it necessarily. However, we don’t offer it as an add-on.

    \n\n\n\n

    We actually have it just as part of our proposal right from the start where we’re like, this is part of the point of difference between what you get when you build with us versus when you build with someone else. They’ll tell you what they think is the best way to do something. If we are unsure about the best way to do something or we disagree on it, it’s not going to ultimately be me making a decision or you making a decision. We’re going to test and we’re going to get real evidence from customers.

    \n\n\n\n

    And they’re the ones that are going to be developing it so you know that the final result that you get is going to be the best possible version of the website. And often we might be more expensive than our competitors, but people will go with us because we are not competing on price. We’re competing on offering a service that nobody else is offering. I asked today in the presentation who has done usability testing before and not a single person put their hand up.

    \n\n\n\n

    [00:24:42] Nathan Wrigley: That would’ve been my assumption actually.

    \n\n\n\n

    [00:24:44] Jo Minney: Yeah. And honestly, I don’t think any of the people that we’re competing against in the industry that I’m in are doing the same thing as what we’re doing. And so it is very much a point of difference. I think it’s not a well understood technique, but it’s so valuable that it is a really easy way to position yourself as being different, and really actually do a better job for your customers, for the people that you’re building websites for. Because ultimately you are going to have a better result at the end of it.

    \n\n\n\n

    [00:25:12] Nathan Wrigley: The interesting thing there is, when I say usability testing, somehow in my head there is a connection between that and accessibility. And that’s not where I’m going with this question, but there’s just something about it being unnecessary. And I’m not binding that to the word accessibility. What I’m saying is clients often think, I don’t need to do that. Obviously, we’re moving into an era where legislation says otherwise. But I can just leave it over there. I don’t need to worry about that, usability testing, not for me.

    \n\n\n\n

    However, the lever that you’ve just pulled, it completely changes the dynamic because you’ve pulled an economic lever, which is that if we can get everybody to follow this action, I don’t know, fill up the cart with widgets and then press the buy now button, and go through the checkout process. If that’s the thing that you’re usability testing, you’ve made direct line. You’ve joined up the dots of, okay, user, money.

    \n\n\n\n

    So it’s not just about it being a better website so that people can browse around it all day. It’s also about connecting the economics of it. So the usability is about people buying, converting, getting the resource. And so there might not be an economic transfer there, but it will be some benefit to your business. There might be downloading that valuable PDF that you want everybody to see or whatever.

    \n\n\n\n

    So that’s kind of interesting. That’s changed my thoughts about it a little bit. And it is more about that. It’s getting an understanding of what you want out the website, getting an understanding of what you think should be happening is actually possible and happening. Have I sort of summed that up about right?

    \n\n\n\n

    [00:26:40] Jo Minney: Yeah, I think that’s a really good summary it. I think the only thing I would add there is that a lot of the times the conversation around accessibility and the conversation around usability do have a lot of crossover. They are fundamentally different, but one of my favorite examples is actually something that I think applies to both.

    \n\n\n\n

    So two of the common problems that we find very early on in design is often to do with colour. And so one of them is colour contrast and the other one is colourblind accessibility. And I think it’s a great way to get people to change their thinking, and their perception of the way we have these conversations is, if you have an e-commerce website, Nathan, what would you say if I said to you, I can instantly get you 8% more customers?

    \n\n\n\n

    [00:27:23] Nathan Wrigley: Yeah, I’d say that’s great.

    \n\n\n\n

    [00:27:24] Jo Minney: And I’d be like, cool, change your buttons so that colourblind people can read them, because 8% of men are colourblind. So actually it’s only 4% of people because assuming half of them are men, then you’ve actually only got 4%. But still 8% of men are colourblind, that’s a big percentage of the population. So if your button is red and green, then you’re going to have a problem. People are not going to be able to find the thing that you want them to click to give you their money.

    \n\n\n\n

    Likewise, if you want people to be able to use your website when they’re outside and using their phone in sunlight, then you need to have good colour contrast on your website. So often this conversation is around, well, I don’t have people who are disabled, I’m not trying to cater to people that are using screen readers. It doesn’t matter because not very many people that are using my website are blind. And I’m like, well, I’m not blind but I still struggle when I’m looking at something where the text is too faint, and I’m looking at it on my phone, and I’m standing outside in the sun because we naturally don’t visualise as much contrast there.

    \n\n\n\n

    So I think being able to position it in a way where people can see the value to themselves. I want to use a website that has better contrast, and so it makes that conversation easier with a customer.

    \n\n\n\n

    [00:28:32] Nathan Wrigley: I hadn’t really drawn the line between accessibility and usability, but it seems like they’re partner topics, basically. There’s like a Venn diagram, accessibility over here, usability over here, with a massive overlap somewhere in the middle.

    \n\n\n\n

    [00:28:43] Jo Minney: A hundred percent. That’s why we always encourage having that sort of intersection between accessibility and usability in our testing pool. So we always try and have one person who experiences some kind of accessibility challenge, whether that’s being colourblind, hearing impaired, if we’ve got a lot of video on the site, for example. And I think that it can be a really valuable way of collecting multiple data points at one time.

    \n\n\n\n

    [00:29:04] Nathan Wrigley: When you have a client that comes to you and they’ve obviously, by the time that they’ve signed the contract with you, usability is already part of the deal it sounds like. How do you decide, what’s the thing in round one that we’re going to pick up on? Is there sort of like a copy book that you go through? Is it like, I don’t know, buttons or the checkout or colour or? Where do you go first? And sort of attached to that question a little bit, this process never ends, right? In theory, you could do usability testing each month. But I was wondering if you did it like on an annual cycle or something, yeah.

    \n\n\n\n

    [00:29:34] Jo Minney: If you’re not changing stuff super often, I would say, there’s probably more cost effective ways that you can collect information about it. Typically we encourage, long-term, have things like heat maps and stuff like that. They will help you identify if there is a problem. If you know that there is a problem, let’s say you’ve got a heat map and you’re like, why is nobody clicking on our buy now link? That is a good instance of where you would do some usability testing to figure out what the problem is.

    \n\n\n\n

    But if everything’s working and you’re getting conversions, then probably doing usability testing isn’t the most valuable thing that you can do. If you’re looking at making significant changes to the way that your website works, that’s another good time to introduce a round of usability testing. So we don’t do it just for the sake of doing it. We do it because we need to do it, and because there’s value in it for our customers.

    \n\n\n\n

    [00:30:18] Nathan Wrigley: Do you keep an eye on your customer’s websites so that you can sort of get ahead of that, if you know what I mean? So let’s say that you put heat maps in, very often that would then get handed over to the client and it’s somebody in the client’s company’s job is to check the heat maps. Or do you keep an eye on that and, oh look, curiously, we’ve seen over the last 12 months, yeah, look at that. There’s not much going on over at that very important button over there. Let’s go back to the client and discuss that. That could be another round of usability testing.

    \n\n\n\n

    [00:30:44] Jo Minney: Yeah, so I think we’re not uncommonly, a lot of agencies now do have some kind of retainer program where they will maintain communication and assistance for their clients. So we call them care plans. I know everyone has a different name for it. I think it’s pretty standard now in the WordPress ecosystem. It’s a very common thing to do.

    \n\n\n\n

    As part of our care plans we have scheduled meeting with our clients once every three months or six months or 12 months, depending on how big the site is. And one of the things that we’ll do at that time is review their analytics, review the heat maps, that sort of thing.

    \n\n\n\n

    Ask them, have they experienced any problems? Have they noticed a downturn in the people signing up for the memberships? Or have they noticed, have they had any complaints from people about something? Is there anything that they’re not sure about? Are they going to be changing the way that they operate soon, and introducing something new into their navigation that we need to consider where does that fit in the grand scheme of things?

    \n\n\n\n

    I find if we’re having those conversations early and we are the ones starting those conversations, then often we are coming to them with solutions instead of them coming to us with problems.

    \n\n\n\n

    [00:31:46] Nathan Wrigley: I think that’s the key bit, isn’t it? If you can prove to be the partner that comes with, we’ve got this intuition that there’s something that we can explore here. You are proactive, you’re going to them not, okay, anything you want? Is there anything we can help you with, you know? And the answer to that is always, not really.

    \n\n\n\n

    Whereas if you go and say, look, we’ve got this idea, based upon some data that we’ve seen, we’ve got heat maps and what have you, shall we explore that further? That seems much more credible. You are far likely, I think to have an economic wheel which keeps spinning if you adopt that approach, as opposed to the is there anything you want doing, kind of approach?

    \n\n\n\n

    [00:32:18] Jo Minney: Absolutely. I think every developer’s worst nightmare is having a customer come back to them and say, I’ve just noticed that I haven’t had anyone send through anything in my contact form for the last three weeks. And I’ve just noticed, when I went and tested it, that the contact form’s not working anymore.

    \n\n\n\n

    I’m sure I’ve had that nightmare at least once. And I think if you can avoid being in that situation where they’re coming to you with something like, oh my God, it’s broken, how do I fix it? If instead you can go to them and be proactive about it and just kind of keep your finger on the pulse.

    \n\n\n\n

    Yes, there’s a little bit of ongoing work, but like honestly, I jump on, I check all of the analytics maybe once every three months for my clients. I set aside one day to do it. Go and have a look through that. If I notice anything, I can usually fix it, make sure that we’re collecting the data again before it becomes a problem.

    \n\n\n\n

    And then that way when there is an issue, we’ve got data that we can back up and we can start from there and go, okay, yes, we’ve identified, here’s where we need to do more research. And then we can apply something like usability testing to that.

    \n\n\n\n

    [00:33:16] Nathan Wrigley: How much of your time on a monthly basis, let’s say as a percentage, do you spend on usability of existing clients? Is this something that is a lot of the work that you do? What I’m trying to figure out here is, for people listening, is this something that they can turn into a real engine of their business?

    \n\n\n\n

    Because you might get two days, three days work a week just on the usability of pre-existing clients. So in a sense, you’ve created interest and work out of thin air, because these clients already exist, they’re in your roster, but there’s a whole new thing that we can offer to them. So, how much do you spend doing it?

    \n\n\n\n

    [00:33:50] Jo Minney: Yeah, so it’s a great question. I would say it’s cyclical. I couldn’t really say like, I always spend this much amount of time. There might be entire weeks that go by where my whole life is usability testing, and there might be a month that goes by where I don’t do any. And it really does often depend on where our projects are in the life cycle at any particular time.

    \n\n\n\n

    So we’re often working on projects that will span over years. And because of that, they might introduce a completely new part of their project. And that’s a good time to reintroduce that usability testing. As I said, like you don’t really want to do it just for the sake of doing it, but at the same time, if you can show that there will be value in making a change, if you can show that there is a lost opportunity somewhere, then a hundred percent you can sell that, the value to them of, hey, you could spend $1,000 now, but you could be earning $5,000 more every month for the next several years. That’s a no-brainer, right?

    \n\n\n\n

    People are happy to make investment if they can see that there’s going to be a cost benefit for them in the future. Or if the thing that they’re trying to do is maybe their government website or something, and they’ve got a particular thing that they need to meet, they’ve got KPIs. If you can show that you are able to help them meet those KPIs, then they are going to invest in doing that thing that you’re trying to offer them.

    \n\n\n\n

    [00:35:02] Nathan Wrigley: We talked about the Venn diagram of accessibility and usability, and the fact that there’s a lot of an overlap. In the year 2025, this is a year where, in Europe at least anyway, accessibility, the legal cogs are turning and the screw is getting tighter. So accessibility is becoming mandated in many respects.

    \n\n\n\n

    And I was wondering about that, whether there was any kind of overlap in legislation on the usability side. The accessibility piece is obviously easier to sort of define in many ways, and it’s going to become less optional. But I was wondering if there was any usability legal requirements. I don’t know quite how that would be encapsulated.

    \n\n\n\n

    [00:35:41] Jo Minney: Sort of. An example that comes to mind is that there are a lot of practices that historically have been really prevalent on the internet, and they’ve been identified as being really bad for usability. And they’ve actually now been identified as being so bad that they’re almost evil. And they’ve started to crack down on those.

    \n\n\n\n

    And an example of that is, have you ever tried to unsubscribe from a gym? It’s basically impossible. And so now if you, at least in Australia, I know if you have a subscription on your site, you legally have to have a way of people being able to unsubscribe without having to call someone or send an email somewhere.

    \n\n\n\n

    And that is an example where that is actually usability. And I think there are definitely things where we are picking up on stuff that is maybe a shady way of working, and a shady way of developing websites. And those things are starting, we’re starting to cut down on them.

    \n\n\n\n

    I’m not sure if that is purely usability, or just like not being being a bad person. But I think that there is definitely, the only reason that we know that those things are a problem is because we have all had those bad experiences. And ultimately that’s all user experience is, it’s just how good or bad is experience of using a platform.

    \n\n\n\n

    [00:36:49] Nathan Wrigley: I share your frustration with those kind of things because I’ve been through that process. Not just canceling a subscription but, I don’t know, something that you’ve got yourself accidentally into and you don’t want to be on that email list anymore. Seemingly no way to get off it.

    \n\n\n\n

    [00:37:01] Jo Minney: They’ve changed the unsubscribe link so it doesn’t have the word unsubscribe in it. And now you just have to look for the word that’s not underlined, or highlighted in a different colour. That when you hover over it, something pops up and you’re like, oh, that’s the link. That thing that says manage preferences down the bottom, hidden in the wall of text. That is a shady practice. That is a poor user experience just as much as it’s just a bad thing to do.

    \n\n\n\n

    [00:37:23] Nathan Wrigley: I think it’s got the label of deceptive design now. It used to be called dark patterns, didn’t it? But deceptive design. This notion of doing things in such a way to just deliberately confuse the user so that the green big button, which is the exact opposite of what you want to click, is the one which is visible. And then there’s this tiny little bit of greyed out text, which is the one which, clearly, you’ve ended up at this page, that’s the one you want. That’s the enemy of usability in a way. But for the business, it may be exactly what they want because it keeps the economic engine rolling.

    \n\n\n\n

    Yeah, that’s interesting. I wonder if there’ll be more legislation to tighten those things up so that they’re not allowed. Yeah, that’s fascinating.

    \n\n\n\n

    Last question. We’re running out of time. Last question. And it refers to something that we talked about earlier. I’m guessing this really never ends. This is a journey which you begin, you tweak it, you do a little bit, you fix, and then you start again a little bit later and what have you. Is there ever a moment though where you go to a client and say, we did it? This site, as far as we’re concerned, is now perfect. Or is it never a goal? It’s a journey and never a destination.

    \n\n\n\n

    [00:38:23] Jo Minney: I think you’ll probably agree with me here, Nathan, that it’s basically impossible to be perfect, because ultimately someone is always going to have a different opinion. Someone’s always going to think that your shade of purple is too dark. Someone is always going to dislike the font that you chose, because it’s not loopy enough, or it’s too loopy, right?

    \n\n\n\n

    So I don’t think there is such a thing as perfect. But through doing five usability tests, five people, you can pick up at least 85% of the potential problems with your design. And I’m not aiming for perfect, but I know that for me, if I can confidently say to my customers that I’ve been able to identify 85% of the potential problems that they might experience in their project, then they can confidently go away and say, hey, we’re pretty happy with what we’ve got.

    \n\n\n\n

    We can definitely improve on that over time. But that is a huge milestone to be able to hit. And being able to have enough data, and enough research to confidently say that, I think is a really big win both for us and for our customers.

    \n\n\n\n

    [00:39:26] Nathan Wrigley: Sadly, Jo, time is the enemy, and I feel like we’ve just pulled back the lid a teeny tiny bit on the big subject of usability. Honestly, I reckon I could talk for another two hours on this at least. You know, because you’ve got into colours there and all sorts, and there’s just so many tendrils that we haven’t been able to explore. But we’ve prized it open a little bit, and so hopefully the listener to this has become curious. If they have, where would they find you? What’s a good place to discover you online?

    \n\n\n\n

    [00:39:53] Jo Minney: Yeah, so I think the best place is to hit up my personal blog, jominney.com. So it’s J O M I N N E Y .com. And I have a lot of stuff on there about usability, usability testing. I have a blog post that I wrote specifically for this talk that shares all of the resources that I used to put together the slides and everything. The talk itself will be on WordCamp TV. If you’re on socials and you want to hit me up, pretty much the only platforms I’m active on nowadays are LinkedIn and Bluesky, and I’m Jo Minney on both of them.

    \n\n\n\n

    [00:40:23] Nathan Wrigley: Jo Minney, thank you so much for chatting to me today. I really appreciate it.

    \n\n\n\n

    [00:40:27] Jo Minney: You’re most welcome, Nathan. Thanks for having me again.

    \n
    \n\n\n\n

    Today, I bring you the first in a mini series of podcasts I recorded in person at WordCamp Asia in Manila. This flagship WordPress event brought together hundreds of WordPress professionals, enthusiasts and all manner of interested parties under one roof for a three day event – one contributor day, and two days of presentations.

    \n\n\n\n

    I tracked down several of the speakers and workshop organisers, and recorded them speaking about the subject they were presenting upon. I hope that you enjoy what they have to say.

    \n\n\n\n

    So on the podcast today we have the first of those conversations, and it’s with Jo Minney.

    \n\n\n\n

    Jo, based in Perth, Australia, is passionate about user experience, data-driven decision-making, cats, pockets and travel. She’s a small business founder, and works with organisations creating digital platforms with WordPress. She also freelances as a UX consultant. She volunteers with Mission Digital to address social issues using technology, and is an ambassador for She Codes Australia, promoting tech accessibility for women. Recognised as a 2023 Shining Star by Women in Technology Western Australia, Jo is an international speaker on topics like user experience, accessibility, and gender equality. She’s committed to ensuring a seamless user experience, and today shares her insights from practical, everyday usability testing.

    \n\n\n\n

    Jo’s presentation, entitled Budget-Friendly Usability Testing for WordPress helped attendees understand what usability testing is, x and clarified why it differs from other testing methods. She shares examples from her work, showing how small changes can significantly impact user experience, which is better for you, the website builder, and your client, the website owner.

    \n\n\n\n

    We also discuss how usability testing can transform a website’s effectiveness by improving conversions. Jo explains the importance of recruiting novice users for testing, and highlights how usability testing pushes for real, user-centered improvements.

    \n\n\n\n

    Towards the end, Jo shares practical advice on when and how to integrate usability testing into your process, advocating for early and iterative testing to preemptively address potential issues.

    \n\n\n\n

    If you’re looking to gain a deeper understanding of usability testing and its benefits, this episode is for you.

    \n\n\n\n

    Useful links

    \n\n\n\n

    WordCamp Asia in Manila

    \n\n\n\n

    Jo’s WordCamp Asia 2025 presentation: Budget-Friendly Usability Testing for WordPress

    \n\n\n\n

    InstaWP

    \n\n\n\n

    Think Aloud Protocol

    \n\n\n\n

    Jo Minney’s website

    \n\n\n\n

    Jo on Bluesky

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 18:37:05 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:8;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:102:\"Do The Woo Community: Building Trust and Converting Sales with Simple UX Decisions with Marc McDougall\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93465\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:101:\"https://dothewoo.io/building-trust-and-converting-sales-with-simple-ux-decisions-with-marc-mcdougall/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:198:\"In this episode of Woo DevChat, hosts discuss UX design and CRO with Marc McDougall, who shares insights on common misconceptions, mistakes, and the evolving role of AI in enhancing user experience.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 15:58:22 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:9;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"Do The Woo Community: Get Ready for the Atarim Web Agency Summit 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93450\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"https://dothewoo.io/blog/get-ready-for-the-atarim-web-agency-summit-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:359:\"The Atarim Web Agency Summit 2025, scheduled for April 7-11, is a free virtual event for web professionals. Featuring over 40 expert-led sessions, it offers actionable insights for agency growth, networking opportunities, and access to industry leaders. Registration is free, with replay options available, making it essential for anyone in the digital space.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 15:08:27 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:10;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:135:\"HeroPress: With open arms – friendships in the WordPress community – Su atviromis rankomis – draugystės WordPress bendruomenėje\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://heropress.com/?post_type=heropress-essays&p=7820\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:180:\"https://heropress.com/essays/with-open-arms-friendships-in-the-wordpress-community/#utm_source=rss&utm_medium=rss&utm_campaign=with-open-arms-friendships-in-the-wordpress-community\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:19273:\"\"Pull

    Šį rašinį galima rasti ir lietuvių kalba.

    \n\n\n\n

    Truth be told, unlike my husband, I have never been the most social person. At a party, you’ll usually find me talking to the dog (or cat). Throughout my life, I’ve only had a few close friends, and I’d rather be reading a book than going to a concert. While WordPress has been a huge part of the growth of my business, I’d like to take this opportunity to discuss something much more important – the friendships that I have formed through this wonderful community.

    \n\n\n\n
    \n

    Due to WordPress, I have some truly spectacular friends in my life.

    \n
    \n\n\n\n

    While we may have started as strangers, we moved into attending each other’s weddings, laughing until we’re crying while packing hundreds of swag orders, holding hands in a hospital bed and being there for each other through thick and thin. Being a privacy lawyer, I won’t name any names here but you’ll probably be able to tell pretty quickly if I’m writing this about you. 

    \n\n\n\n

    A little backstory 

    \n\n\n\n

    When I was finishing up law school, I worked at a small web design agency in Chicago as their COO. I met my husband, Hans, who was the owner of a different agency when he came to buy us out. It was love at first sight (yes, really) and we have been inseparable ever since. We shared our struggles and annoyances over dinner one night – writing Privacy Policies for clients was monotonous for me and he had no idea what to do when a client asked him about website policies. So we created Termageddon – an auto-updating website policies solution for agencies and their clients. Since we started an agency partner program, we knew that we had to find agencies who would be willing to try our new product and that’s when we came across WordCamps and the WordPress community. 

    \n\n\n\n

    Our first WordCamp 

    \n\n\n\n

    WordPress has a huge community and going to a large WordCamp such as WordCamp US when you don’t know anyone can be really scary (especially for an introvert like me) so we thought that we’d get our feet wet with a smaller WordCamp nearby. Enter WordCamp Jackson, Michigan.

    \n\n\n\n
    \n

    Driving into the most adorable small city that we have ever visited, we were very nervous – what if no one wanted to talk to us? 

    \n
    \n\n\n\n

    These fears were quickly dispelled when we walked into a room with about 30 friendly faces. Even the mayor was in attendance! During a break, we all sat on couches and our new friends helped us come up with the design for our very first swag item: a t-shirt with a pirate asking “Arrrr you compliant?”. I still smile every time I put it on. The next thing we know, the informative presentations are over and we’re all piling into cars and going to an escape room. The friendships formed during that event have lasted many years. In fact, one of our friends from that very first WordCamp helped us build our chicken coop. 

    \n\n\n\n

    Come on over! 

    \n\n\n\n

    A while later, my husband went to London and met a friend through a non-WordPress event and they truly hit it off (seriously, they have a standing call twice per month for five years now). A few months later, it was time for our first WordCamp US and our friend flew from the UK to Chicago to stay with us and our plan was to take a road trip and drive from our home to the WordCamp. Well, it just so happened that his other friend who was also going to WordCamp (someone we haven’t met before), missed his flight. Our friend called us to explain the situation and asked whether he could change his flight to Chicago, stay with us and join our road trip. We said “come on over!” Well, that missed flight led to the best trip of all time and a lifelong friendship.

    \n\n\n\n

    I’ll always remember him walking me to the store to buy some tea on a cold evening, all of us posing for a picture next to the St. Louis arch, hanging out in various hotels and Airbnb’s throughout the years, sharing stories from our youth, marveling at the excitement and joy of growing families, and supporting each other’s business ventures. We’ve seen each other many times throughout the years on various trips and WordCamps and I think of us as our core group at these events – a safe space amidst all of the chaos. 

    \n\n\n\n

    Better together 

    \n\n\n\n

    When you start establishing yourself in an industry or a community, you may think of other people in the space as competitors. While it’s certainly not the best trait that humanity has to offer, I think that this happens more frequently than we would like to admit. When I was new in the WordPress community, there was an established privacy attorney who had been a part of that community for much longer than I have. Going to WordCamp US, I knew that she was going to be giving a speech on the California Consumer Privacy Act and how to comply with this privacy law. To be honest with myself and you, I was extremely nervous about meeting her. What if she thought that I was a competitor? What if she disliked me? What if there’s not enough room for two privacy lawyers at this event? Should I just hide throughout the entire event to make sure that she doesn’t see me? 

    \n\n\n\n

    It’s true that we create these extreme scenarios in our minds but reality is usually much different (and less scary). We quickly bonded over the fact that we were the only two people there who knew what CCPA even is and, by the end of the night, we were jammed together in an Uber going to a bar. Throughout the years, we have supported each other’s projects, participated in long evenings of conversations, shared our struggles and wins. Due to her kindness and welcoming nature, we did not head towards competition but are able to enjoy the benefits of a wonderful symbiosis and a true friendship. 

    \n\n\n\n

    Family for life 

    \n\n\n\n

    Hanging out with your friends at WordCamps is fun but it’s even more fun when your friendship progresses to the point where your friends fly over to hang out at your home. Well, in this case, we only got to hang out for one day before my friend got very sick. Not the “I have the flu” kind of sick, the over a week in the ICU and months in the hospital kind of sick. 

    \n\n\n\n

    Throughout that time, we met her family, who stayed with us for a while as we live very close to the hospital. While this time was certainly grueling for everyone involved, it also shed a new perspective on how friends get through tough times. Whether it was rides to the hospital, sitting together, crying together, making home cooked meals, celebrating every win, no matter how small, the friendship, the community, and the knowledge that we were there for each other let us make it through this difficult time. The day that she got out of the hospital was truly miraculous.

    \n\n\n\n
    \n

    And now, we are most certainly not just WordCamp friends, we’re family – for life. 

    \n
    \n\n\n\n

    The little things 

    \n\n\n\n

    Up to this point in my life, I have been a part of many communities – from school, to dance groups, to attorney associations, to my local neighborhood, each community has had something special to offer. However, I have never been involved with another community that is as welcoming or that has led to the formation of so many wonderful friendships as WordPress. From sharing a beer (or a boot of beer), to attending our wedding through Zoom (2020), to making a flower crown, to eating so much sushi that I could barely walk back to the Airbnb, to corn mazes and petting zoos, and touring a submarine together, I am truly thankful that the WordPress community has welcomed me with open arms and I hope that I can do the same for others! 

    \n\n\n
    \n\n
    \n

    Donata’s Work Environment

    \n\n\n\n

    We asked Donata for a view of her office this is what she sent!

    \n\n\n
    \n \"Donata\n
    \n\n\n\n\n

    HeroPress would like to thank Draw Attention for their donation of the plugin to make this interactive image!

    \n
    \n\n
    \n\n\n\n\n

    Su atviromis rankomis – draugystės WordPress bendruomenėje

    \n\n\n\n

    Tiesą sakant, kitaip nei mano vyras, niekada nebuvau pati socialiausia asmenybė. Vakarėlyje mane dažniausiai rastumėte kalbančią su šunimi (ar kate). Visą savo gyvenimą turėjau tik keletą artimų draugų, o knygos skaitymas man visada buvo malonesnis nei koncerto lankymas. Nors WordPress atliko didžiulį vaidmenį plėtojant mano verslą, norėčiau pasinaudoti šia proga ir pakalbėti apie kai ką daug svarbesnio – draugystes, kurias užmezgiau šioje nuostabioje bendruomenėje.

    \n\n\n\n
    \n

    Dėl WordPress turiu iš tiesų nuostabių draugų savo gyvenime.

    \n
    \n\n\n\n

    Nors pradėjome kaip svetimi, mes tapome tais, kurie dalyvauja vienas kito vestuvėse, juokiasi iki ašarų pakuodami šimtus reklaminių dovanų, laiko vienas kitam ranką ligonines lovoje ir būna kartu per storą ir ploną. Kadangi esu privatumo teisininkė, nemininesiu vardų, tačiau tikriausiai greitai suprasite, jei rašau apie jus.

    \n\n\n\n

    Trumpa istorija

    \n\n\n\n

    Kai baiginėjau teisės studijas, dirbau mažoje interneto dizaino agentūroje Čikagoje kaip COO. Ten sutikau savo vyrą Hansą, kuris buvo kitos agentūros savininkas, kai jis atvyko mus nupirkti. Tai buvo meilė iš pirmo žvilgsnio (taip, tikrai), ir nuo to laiko mes esame neatskiriami. Vieną vakarą dalinomės savo sunkumais ir nepasitenkinimais – man buvo nuobodu rašyti privatumo politikos dokumentus klientams, o jis net nežinojo, ką daryti, kai klientas paprašydavo interneto svetainės politikos. Taip gimė Termageddon – automatiškai atnaujinamas interneto svetainių politikos sprendimas agentūroms ir jų klientams. Kadangi pradėjome agentūrų partnerių programą, turėjome rasti agentūras, kurios būtų pasiruošusios išbandyti mūsų naują produktą, ir tada mes atradome WordCamps ir WordPress bendruomenę.

    \n\n\n\n

    Mūsų pirmasis WordCamp

    \n\n\n\n

    WordPress turi didžiulę bendruomenę, o vykstant į didelį WordCamp renginį, pavyzdžiui, WordCamp US, kai nieko nepažįsti, gali būti labai baisu (ypač tokiai intravertei kaip aš), todėl nusprendėme pradėti nuo mažesnio WordCamp netoli mūsų. Taip mes atsidūrėme WordCamp Jackson, Mičiganas.

    \n\n\n\n
    \n

    Važiuodami į vieną mieliausių mažų miestelių, kokius tik esame matę, labai nervinomės – o kas bus jei niekas nenorės su mumis kalbėtis?

    \n
    \n\n\n\n

    Šios baimės greitai išnyko, kai įėjome į kambarį su maždaug 30 draugiškų veidų. Netgi miesto meras dalyvavo! Per pertrauką visi susėdome ant sofų, o naujieji draugai padėjo mums sukurti mūsų pirmojo reklaminių dovanų daikto dizainą: marškinėlius su piratu, klausiančiu “Arrrr you compliant?” (Ar esate atitinkantys?). Vis dar šypsausi, kai juos apsivelku. Nespėjome apsidairyti, o jau po naudingų pranešimų visi susėdome į automobilius ir vykome į pabėgimo kambarį. Draugystės, užmezgtos šio renginio metu, tęsiasi jau daugelį metų. Tiesą sakant, vienas iš mūsų draugų iš to pirmojo WordCamp padėjo mums pastatyti vištų tvartą.

    \n\n\n\n

    Užeikit!

    \n\n\n\n

    Kiek vėliau mano vyras išvyko į Londoną ir susipažino su draugu per ne-WordPress renginį, ir jie tikrai susidraugavo (rimtai, jie kalbasi kas dvi savaites jau penkerius metus). Po kelių mėnesių atėjo metas mūsų pirmajam WordCamp US, ir mūsų draugas nuskrido iš JK į Čikagą, kad apsistotų pas mus, o mūsų planas buvo keliauti automobiliu nuo namų iki WordCamp. Tačiau nutiko taip, kad jo kitas draugas, kuris taip pat vyko į WordCamp (mes jo dar nebuvome sutikę), praleido savo skrydį. Mūsų draugas paskambino mums, paaiškino situaciją ir paklausė, ar jo draugas gali pakeisti skrydį į Čikagą, apsistoti pas mus ir prisijungti prie mūsų kelionės. Mes pasakėme: “Užeikit!” Tas praleistas skrydis privedė prie geriausios kelionės gyvenime ir viso gyvenimo draugystės.

    \n\n\n\n

    Aš visada prisiminsiu, kaip jis lydėjo mane į parduotuvę nusipirkti arbatos šaltą vakarą, kaip visi kartu pozavome nuotraukai prie Saint Louis arkinio paminklo, kaip per daugelį metų leisdavome laiką įvairiuose viešbučiuose ir Airbnb, dalijomės jaunystės istorijomis, stebėjomės augančių šeimų džiaugsmu ir jauduliu bei palaikėme vieni kitų verslo sumanymus. Per daugelį metų matėmės daugybę kartų įvairių kelionių ir WordCamp renginių metu, ir aš mus laikau pagrindine grupe šiuose renginiuose – saugia vieta viso šurmulio apsuptyje.

    \n\n\n\n

    Geriau kartu

    \n\n\n\n

    Kai pradedate įsitvirtinti tam tikroje pramonėje ar bendruomenėje, galite pagalvoti, kad kiti žmonės šioje srityje yra konkurentai. Nors tai tikrai nėra geriausia žmonijos savybė, manau, kad taip nutinka dažniau, nei norėtume pripažinti. Kai buvau naujokė WordPress bendruomenėje, buvo viena pripažinta privatumo teisininkė, kuri buvo šios bendruomenės dalis daug ilgiau nei aš. Važiuodama į WordCamp US,  žinojau kad ji ketina skaityti pranešimą apie Kalifornijos vartotojų privatumo įstatymą (CCPA) ir kaip laikytis šio privatumo įstatymo. Būsiu atvira – man buvo labai neramu ją sutikti. O kas, jei ji manytų, kad esu konkurentė? O jei jai nepatikčiau? O jei šiame renginyje nepakaktų vietos dviem privatumo teisininkėms? Gal man geriau viso renginio metu slėptis, kad tik ji manęs nepastebėtų?

    \n\n\n\n

    Tiesa ta, kad dažnai kuriame kraštutinius scenarijus savo galvose, bet realybė dažniausiai būna visai kitokia (ir mažiau bauginanti). Greitai susidraugavome, nes supratome, kad esame vienintelės dvi moterys renginyje, kurios iš viso žinojo kas yra CCPA. Vakaro pabaigoje jau spraudėmės kartu į Uber važiuodamos į barą. Per tuos metus palaikėme viena kitos projektus, dalijomės ilgais pokalbiais vakarais, kartu išgyvenome sunkumus ir džiaugėmės pasiekimais. Dėl jos geranoriškumo ir svetingumo nepasukome konkurencijos keliu, o galėjome džiaugtis nuostabia simbioze ir tikra draugyste.

    \n\n\n\n

    Šeima visam gyvenimui

    \n\n\n\n

    Leisti laiką su draugais „WordCamp“ renginiuose yra smagu, bet dar smagiau, kai draugystė tampa tokia stipri, kad draugai atskrenda pas jus tiesiog pabūti kartu. Na, šiuo atveju, mes spėjome pabūti tik vieną dieną, kol mano draugė labai susirgo. Ne „turiu gripą“ lygio susirgo, o taip, kad teko praleisti daugiau nei savaitę reanimacijoje ir kelis mėnesius ligoninėje.

    \n\n\n\n

    Tuo sunkiu metu susipažinome su jos šeima, kuri kurį laiką gyveno pas mus, nes gyvename labai arti ligoninės. Nors šis laikotarpis tikrai buvo alinantis visiems, jis taip pat suteikė naują perspektyvą, kaip draugai išgyvena sunkius laikus kartu. Nesvarbu, ar tai buvo kelionės į ligoninę, sėdėjimas kartu, verksmas kartu, naminiai patiekalai ar kiekvienos, net ir mažiausios pergalės šventimas – draugystė, bendruomenė ir žinojimas, kad esame vieni kitiems, padėjo mums išgyventi šį sunkų laikotarpį. Diena, kai ji išėjo iš ligoninės, buvo tikras stebuklas.

    \n\n\n\n
    \n

    Dabar mes tikrai ne tik WordCamp draugės – mes šeima visam gyvenimui.

    \n
    \n\n\n\n

    Mažos smulkmenos 

    \n\n\n\n

    Iki šiol mano gyvenime buvo daugybė bendruomenių – nuo mokyklos, šokių grupių, teisininkų asociacijų iki mano vietinės kaimynystės – kiekviena bendruomenė turėjo ką nors ypatingo. Tačiau niekada nebuvau dalis kitos bendruomenės, kuri būtų tokia svetinga ir kuri būtų padovanojusi tiek daug nuostabių draugysčių kaip WordPress. Nuo alaus bokalo (arba alaus bato) dalijimosi, iki mūsų vestuvių stebėjimo per Zoom (2020 m.), iki gėlių vainikų pynimo, iki tiek daug sušio valgymo, kad vos galėjau pareiti atgal į „Airbnb“, iki kukurūzų labirintų ir gyvūnų ūkių lankymo, ir net povandeninio laivo ekskursijos – esu nuoširdžiai dėkinga, kad WordPress bendruomenė mane priėmė atviromis rankomis, ir tikiuosi, kad galėsiu padaryti tą patį kitiems!

    \n

    The post With open arms – friendships in the WordPress community – Su atviromis rankomis – draugystės WordPress bendruomenėje appeared first on HeroPress.

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 26 Mar 2025 01:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"Donata Stroink-Skillrud\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:11;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"WordPress.org blog: WordPress 6.8 Release Candidate 1\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18639\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"https://wordpress.org/news/2025/03/wordpress-6-8-release-candidate-1/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:9140:\"

    The first Release Candidate (“RC1”) for WordPress 6.8 is ready for download and testing!

    \n\n\n\n

    This version of the WordPress software is under development.  Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, it’s recommended that you evaluate RC1 on a test server and site.

    \n\n\n\n

    Reaching this phase of the release cycle is an important milestone.  While release candidates are considered ready for release, testing remains crucial to ensure that everything in WordPress 6.8 is the best it can be.

    \n\n\n\n

    You can test WordPress 6.8 RC1 in four ways:

    \n\n\n\n
    PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
    Direct DownloadDownload the RC1 version (zip) and install it on a WordPress website.
    Command LineUse the following WP-CLI command: wp core update --version=6.8-RC1
    WordPress PlaygroundUse the 6.8 RC1 WordPress Playground instance (available within 35 minutes after the release is ready) to test the software directly in your browser without the need for a separate site or setup.
    \n\n\n\n

    You can test the RC1 version in four ways.

    \n\n\n\n

    The current target for the WordPress 6.8 release is April 15, 2025.  Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for further details.

    \n\n\n\n

    What’s in WordPress 6.8 RC1?

    \n\n\n\n

    Get a recap of WordPress 6.8’s highlighted features in the Beta 1 announcement.  For more technical information related to issues addressed since Beta 3, you can browse the following links:

    \n\n\n\n\n\n\n\n

    Want to look deeper into the details and technical notes for this release? These recent posts cover some of the latest updates:

    \n\n\n\n\n\n\n\n

    How you can contribute

    \n\n\n\n

    WordPress is open source software made possible by a passionate community of people collaborating on and contributing to its development.  The resources below outline various ways you can help the world’s most popular open source web platform, regardless of your technical expertise.

    \n\n\n\n

    Get involved in testing

    \n\n\n\n

    Testing for issues is critical to ensuring WordPress is performant and stable.  It’s also a meaningful way for anyone to contribute.  This detailed guide will walk you through testing features in WordPress 6.8.  For those new to testing, follow this general testing guide for more details on getting set up.

    \n\n\n\n

    If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report.  You can also check your issue against a list of known bugs.

    \n\n\n\n

    Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

    \n\n\n\n

    Search for vulnerabilities

    \n\n\n\n

    From now until the final release of WordPress 6.8 (scheduled for April 15, 2025), the monetary reward for reporting new, unreleased security vulnerabilities is doubled.  Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

    \n\n\n\n

    Update your theme or plugin

    \n\n\n\n

    For plugin and theme authors, your products play an integral role in extending the functionality and value of WordPress for all users.

    \n\n\n\n

    Thanks for continuing to test your themes and plugins with the WordPress 6.8 beta releases.  With RC1, you’ll want to conclude your testing and update the “Tested up to” version in your plugin’s readme file to 6.8.

    \n\n\n\n

    If you find compatibility issues, please post detailed information to the support forum.

    \n\n\n\n

    Help translate WordPress

    \n\n\n\n

    Do you speak a language other than English?  ¿Español?  Français?  Русский?  日本語? हिन्दी? বাংলা? मराठी?  You can help translate WordPress into more than 100 languages.  This release milestone (RC1) also marks the hard string freeze point of the 6.8 release cycle.

    \n\n\n\n

    An RC1 haiku

    \n\n\n\n

    March fades, nearly there,
    Six-eight hums—a steady beat,
    RC greets the world.

    \n\n\n\n

    Thank you to the following contributors for collaborating on this post: @joemcgill @benjamin_zekavica @courane01 @mkrndmane @audrasjb @areziaal @ankit-k-gupta @krupajnanda.

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 16:19:41 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:12;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"Do The Woo Community: A Continued Saga About the Life of Blog Posts\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93306\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"https://dothewoo.io/blog/a-continued-saga-about-the-life-of-blog-posts/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:225:\"BobWP chats about the importance of adding content instead of removing it, expressing commitment to producing more podcasts, videos, and blog posts despite claims of blog irrelevance, valuing audience engagement over metrics.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 13:01:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:13;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:89:\"Do The Woo Community: On the Floor at CloudFest 2025 with Adam Weeks and Christian Taylor\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93275\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:88:\"https://dothewoo.io/on-the-floor-at-cloudfest-2025-with-adam-weeks-and-christian-taylor/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:226:\"Adam Weeks and Christian Taylor explore CloudFest, assessing booth designs and marketing strategies. They discuss visual engagement, effective messaging, and the significance of interactive experiences in attracting attendees.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 25 Mar 2025 07:46:41 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:14;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"Do The Woo Community: How AI is Reshaping Enterprise WordPress in 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=91953\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"https://dothewoo.io/blog/how-ai-is-reshaping-enterprise-wordpress-in-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:191:\"AI is transforming enterprise WordPress through coding tools and personalization, but poses risks requiring careful integration and oversight amidst evolving challenges and security concerns.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 24 Mar 2025 11:40:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:15;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:111:\"Gutenberg Times: Get ready for WordPress 6.8, Source of Truth, a book, and code with AI — Weekend Edition 322\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=38031\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:115:\"https://gutenbergtimes.com/get-ready-for-wordpress-6-8-source-of-truth-a-book-and-code-with-ai-weekend-edition-322/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:21353:\"

    Hi, the spring is coming to Munich this weekend, or that’s what the forecast tells us. With temperatures around 18 °C / 64° F, I will spend a few hours outside on long walks in the Englisch Garden and possible get my bicycle working again. I am looking forward to getting away from the screens all together and having in-person conversations with my cousin and his wife. They are accomplished musicians and different kind of nerds.

    \n\n\n
    \n

    ? What kind of activities are in your future and are they also determined by the weather like mine? Hit reply and let me know.

    \n
    \n\n\n

    Yours, ?
    Birgit

    \n\n\n\n

    PS: I just started my travel preparation for WordCamp Europe. Want to meet me? bit.ly/WCEUMeetBirgit

    \n\n\n\n\"\"\n\n\n\n\n\n\n\n

    Developing Gutenberg and WordPress

    \n\n\n\n

    WordPress 6.8 Beta 3 was released on March 18, 2025, and it is ready for testing. If you need inspiration and instruction on how and what to test, the test team’s post is for you. Help Test WordPress 6.8.

    \n\n\n\n
    \n\n\n\n

    Joe Dolson published the dev note on Changes to the .screen-reader-text class in WordPress 6.8 The .screen-reader-text class replaces the deprecated clip property with clip-path: inset(50%) for modern browser compatibility and accessibility improvements. Focus styles remain unchanged to ensure visibility during keyboard navigation. Developers should update themes and plugins using .screen-reader-text to align with these changes for future-proofing.

    \n\n\n\n
    \n\n\n\n

    A group of contributors collaborated on the Source of Truth (WordPress 6.8). Learn everything about enhanced data views, query loops, and block interactions. Also about the more cohesive design experience through the Zoom Out editing approach, expanded style controls, and improved typography options. WordPress 6.8 is scheduled to be released on April 15, 2025

    \n\n\n\n\"\"\n\n\n\n
    \n\n\n\n

    George Mamadashvili released Gutenberg 20.5 and the changelog is available on GitHub. Among the updates you’ll find

    \n\n\n\n
      \n
    • the ability to create a new page from the button block added to a site navigation, (69368)
    • \n\n\n\n
    • the pages list in the site editor can now display hierarchical relationship similar to the current pages list page, (69550)
    • \n\n\n\n
    • developers can now control the modal size called via DataViews action functions (69302)
    • \n
    \n\n\n\n
    \n\n\n\n

    Troy Chaplin published What’s new for developers? (March 2025) on the WordPress Developer blog. He covers Gutenberg 20.3 and 20.4 as well as updates around the WordPress 6.8 release cycle.

    \n\n\n\n
    \n\n\n\n

    As one of the first to cover the upcoming major release, Nithin Sreeraj at WP-Content posted WordPress 6.8 Expected Features and Changes.

    \n\n\n\n
    \n

    ?️ Latest episode: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia with special guest Jessica Lyschik.

    \n\n\n\n\"Jessica\n
    \n\n\n\n

    Plugins, Themes, and Tools for #nocode site builders and owners

    \n\n\n\n

    Bhargav (Bunty) Bhandari takes building in public quite literally. This time he created a Poll block for WordPress. It allows you to create interactive polls directly within the WordPress Block Editor, with design tools, voting options and results in real time. The code is available on GitHub until he submits it to the WordPress repository.

    \n\n\n\n\"\"\n\n\n\n

    Jamie Marsland runs an always friendly and welcoming WordPress Gutenberg Facebook group! The description read: “A community for Gutenberg users to learn, share, and explore tips on building WordPress websites using the Blocks Editor.” It’s a private group, too. Marsland wrote: “Whether you need help with WordPress editing or want to share your knowledge, we’d love to have you.”

    \n\n\n\n\"\"\n\n\n\n

    Theme Development for Full Site Editing and Blocks

    \n\n\n\n

    Some people like to learn via videos; other people prefer books.

    \n\n\n\n

    Koji Kuno, a web developer from Japan and contributor to WordPress, published a book called Creating a Website with Twenty-Twenty-Five in late 2024. This book is designed for beginners who want to learn how to create websites using WordPress 6.7 and its newest theme, Twenty-Twenty-Five.

    \n\n\n\n

    The book starts by explaining the basics of WordPress, including how its block themes, block editor, and site editor work. Once readers understand these concepts, Kuno dives deeper into the Twenty-Twenty-Five theme. He provides a detailed overview of the theme’s files, layout structures, style options for blocks and fonts, and how templates and patterns connect to each other.

    \n\n\n\n

    Kuno also includes step-by-step guides for building two types of websites: a blog site and a coffee shop site. He uses clear explanations and helpful graphics to make everything easy to follow, even for beginners. While most of the instructions focus on using WordPress’s site editor, Kuno also touches on the underlying code for certain features, such as supporting post formats.

    \n\n\n\n

    Overall, the book strikes a good balance between practical tutorials and technical insights. It’s an excellent resource for anyone looking to learn website design with WordPress in an approachable way.

    \n\n\n\n\"\"Screenshot of Patterns and how they fit into the template structure of Twenty-Twenty-Five. (Page 44) \n\n\n\n
    \n\n\n\n

    Elliot Richmond experimented with Cursor AI to build a Block Theme. You can follow along on YouTube and see he is using Cursor AI for refactoring and code generation, about the challenges and results of AI-generated block themes, and some lesson learned turned into best practices .

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    In his post Additional Block Styles for Child Themes, Silvan Hagen shares how you can block styles by copying the relevant CSS file from the parent theme to the child theme and making adjustments. Hagen also provides a code snippet to append custom block styles from the child theme without overwriting the parent styles, by adding a function to the child theme’s functions.php file that enqueues the custom styles.

    \n\n\n\n

     “Keeping up with Gutenberg – Index 2025” 
    A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. The previous years are also available: 2020 | 2021 | 2022 | 2023 | 2024

    \n\n\n\n

    Building Blocks and Tools for the Block editor

    \n\n\n\n

    In his post, Local WordPress Development Workflows Using Studio , Nick Diego walks you through two development workflows using Studio by WordPress.com. He covers using Git Deployments to WordPress.com for your newly developed plugin or theme. In the second part of the article you’ll learn how to structure a complete website build, share a preview with clients and colleagues, and sync to a live site on WordPress.com.

    \n\n\n\n\"Using\n\n\n\n
    \n\n\n\n

    Muhammad Muhsin, developer at Awesome Motive, used the WordPress Interactivity API to build a simple Stopwatch block. He is also working on a tutorial to go along with it. Meanwhile, you can study his code on GitHub next to the documentation of the Interactivity API.

    \n\n\n\n
    \n\n\n\n

    In this week’s live stream, How to build incredible WordPress Blocks with Cursor AI, Ryan Welcher and Nick Diego explored how AI can help you create great WordPress blocks. They shared useful tips and cool AI tools to improve your block-building skills and make things easier. Don’t miss this chance to discover new possibilities for your WordPress site!

    \n\n\n\n\"\"\n\n\n\n
    \n\n\n\n

    The @wordpress/data package introduces a data layer to the WordPress Block Editor, enabling efficient state management and interaction with the editor’s ecosystem.

    \n\n\n\n

    In two of his live streams, JuanMa Garrido embarked into the depth of the data package and discuss how to work with the data package. In Data in the Block Editor, part one, he explores the various stores, how to retrieve and update store data and dispatch actions. In Data In the Block Editor, part two, Garrido continues to work through the block editor documentation and the date layer course on learn.WordPress.org

    \n\n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n\n\n
    \n
    \n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    In his live stream, Ryan Welcher walked his viewers through the work necessary to add tests to his Advanced Query Loop plugin so developers who want to extend on the plugin can test custom hooks.

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    On his video channel, Jon Bossenger streams on his adventure using AI for coding. You find out with him what works and what doesn’t. In his latest video Let’s Vibe, he wanted to find out what Vibe Coding is all about and if it actually can produce functional software.

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    Need a plugin .zip from Gutenberg’s master branch?
    Gutenberg Times provides daily build for testing and review.

    \n\n\n\n

    Now also available via WordPress Playground. There is no need for a test site locally or on a server. Have you been using it? Email me with your experience

    \n\n\n\n

    \"GitHub

    \n\n\n\n

    Questions? Suggestions? Ideas?
    Don’t hesitate to send them via email or
    send me a message on WordPress Slack or Twitter @bph.

    \n\n\n\n
    \n\n\n\n

    For questions to be answered on the Gutenberg Changelog,
    send them to changelog@gutenbergtimes.com

    \n\n\n\n
    \n\n\n\n

    Featured Image: Garage door and wall with rectangles of various colors painted on them for decoration Photo by Marcus Burnette found on WordPress.org/photos

    \n\n\n\n
    \n\n\n\n

    Don’t want to miss the next Weekend Edition?

    \n\n\n

    We hate spam, too, and won’t give your email address to anyone
    except Mailchimp to send out our Weekend Edition

    Thanks for subscribing.
    \n\n\n
    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 22 Mar 2025 05:29:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:16;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"Matt: Automattic Operating System\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140810\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"https://ma.tt/2025/03/aos/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5146:\"

    I was interviewed by Inc magazine for almost two hours where we covered a lot of great topics for entrepreneurs but almost none of it made it into the weird hit piece they published, however since both the journalist and I had recording of the interview I’ve decided to adapt some parts of it into a series of blog posts, think of it as the Inc Article That Could Have Been. This bit talks about some of the meta-work that myself and the Bridge team at Automattic do.

    At Automattic, the most important product I work on is the company itself. I’ve started referring to it as the “Automattic Operating System.” Not in the technical sense like Linux, but the meta layer the company runs on. The company isn’t WordPress.com or Beeper or Pocket Casts or any one thing. I’m responsible for the culture of the people who build those things, building the things that build those things. It’s our hiring, our HR processes, our expenses, the onboarding docs; it’s all of the details that make up the employee experience — all the stuff that shapes every employee’s day-to-day experience.

    \n\n\n\n

    Take expense reports. If you’ve got to spend two hours taking pictures of receipts and something like that, that’s a waste of time. You’re not helping a customer there. We switched to a system where everyone just gets a credit card. It does all the reporting and accounting stuff automatically. You just swipe the card and it just automatically files an expense report. Sometimes there’s an exception and you have to work with the accounting rules, but it just works and automates the whole process most of the time.

    \n\n\n\n

    Another commonly overlooked detail is the offer letter. We think so much about the design of our websites and our products. We have designers work on that and we put a lot of care and thought into it. But I realized we didn’t have the same attention to detail on our offer letter. When you think about it, getting an offer letter from a company and deciding to take it is a major life decision, something you only do a handful of times in your life.  This is one of the things that determines your life path. Our offer letter was just made by attorneys and HR. No designer had looked at it right. We hadn’t really thought about it from a product experience point of view. And so it was just this, generic document with bad typography and not great design. But it’s important, so one of the things we did was redesign it. Now it has a nice letterhead, great typography, and it’s designed for the end user.

    I realized that the salary and stuff was buried in paragraph two. It was just a small thing in the document! Well, what’s key when you’re deciding whether to take a job? Start date, salary, you know, that sort of thing, so we put the important parts at the very top.

    \n\n\n\n

    And then there’s the legal language. All the legal stuff, which is different in every country. We have people in 90 countries, so there’s all the legal stuff that goes in there. And then it has this nudge inspired by the behavioral economics book, Predictably Irrational.

    There’s the story about how, if you have an ethics statement above where you sign the test or something, people cheat less. So I thought, well, what’s our equivalent of that? We have the Automattic Creed. It’s an important part of our culture. So we put the creed in, it says

    \n\n\n\n
    \n

    I will never stop learning. I won’t just work on things that are assigned to me. I know there’s no such thing as a status quo. I will build our business sustainably through passionate and loyal customers. I will never pass up an opportunity to help out a colleague, and I’ll remember the days before I knew everything. I am more motivated by impact than money, and I know that Open Source is one of the most powerful ideas of our generation. I will communicate as much as possible, because it’s the oxygen of a distributed company. I am in a marathon, not a sprint, and no matter how far away the goal is, the only way to get there is by putting one foot in front of another every day. Given time, there is no problem that’s insurmountable.

    \n
    \n\n\n\n

    It’s not legally binding, but it’s written in the first person, you read it and you kind of identify with it and then you sign below that. We want people who work at the company who identify with our core values and our core values really are in the creed.

    \n\n\n\n

    These sorts of things are key to our culture. And they’re universal. Again, we have people from over 90 countries. These are very different cultures, yes, and very different historical backgrounds and cultural makeups. But what’s universal? We have our philosophies that we apply every day regardless of where you were born or where you work.

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 22:15:05 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:17;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"Gravatar: Digital Business Card Examples With Professional Flair\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=3083\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:68:\"https://blog.gravatar.com/2025/03/21/digital-business-card-examples/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:19747:\"

    Looking for digital business card examples that actually work? Networking has changed, but the need to make a strong first impression hasn’t, and business cards are a big part of it. So, if you’re looking for inspiration, we’ll show you real digital business cards from various industries that successfully blend professional presentation with practical functionality.

    \n\n\n\n

    Our list includes sleek corporate profiles and creative designs for artists and freelancers, each a great example of how to make your information accessible while maintaining your personal brand. 

    \n\n\n\n

    By the end of this article, you’ll have actionable ideas for creating your own digital business card. And the best part? You can set up a free, customizable digital business card in minutes using Gravatar – no coding or design skills required.

    \n\n\n\n

    Universal Digital Business Cards with Gravatar

    \n\n\n\n\"Ronnie\n\n\n\n

    Looking at my Gravatar profile, you can see how it functions as a complete digital business card that travels with me across the web. I’ve personally included a professional headshot, custom banner image, some interesting images, and verified links to all my social profiles. These sections are completely customizable, and what you include depends entirely on your goals. 

    \n\n\n\n

    What makes this especially useful for networking is the QR code functionality. When meeting someone at a conference or event, I can quickly pull up my Gravatar profile QR code from my phone’s digital wallet. With one quick scan, my new contact instantly has access to all my professional information.

    \n\n\n\n\"Adding\n\n\n\n
    \n

    Anyone who scans my QR code can immediately connect with me through multiple channels – they can view my contact details, send me money, or browse through my featured photos for a more personal touch. No more fumbling with paper cards or manually typing contact info into phones.

    \n
    \n\n\n\n

    As a technical professional, my Gravatar profile is quite literally the foundation of my online presence. When I contribute to GitHub, post on Stack Overflow, or communicate through Slack, my Gravatar profile appears automatically, helping me build a more recognizable personal brand.

    \n\n\n\n\"Ronnie\n\n\n\n

    The best part? I only need to update my information in one place. If I change roles or add new contact methods, updating my Gravatar profile instantly refreshes my presence across all integrated platforms – saving time and ensuring consistency.

    \n\n\n\n

    Want to create your own universal digital business card? Sign up at Gravatar.com using just your email address. It takes minutes to set up but provides lasting professional benefits everywhere you go online.

    \n\n\n\n\"\"\n\n\n\n

    Industry-Specific Showcases: Real Estate to Tech Professionals

    \n\n\n\n

    Real estate agents face unique networking challenges – they need to connect instantly with potential buyers and showcase properties efficiently. Digital business cards can help in this process by offering scannable QR codes that provide immediate connections with house hunters.

    \n\n\n\n

    Take Liz Nitz’s digital business card as an example. 

    \n\n\n\n\"Liz\n\n\n\n

    As a Bozeman-based real estate agent, her Gravatar profile functions as a powerful lead generation tool. When potential clients scan her QR code, they gain instant access to her contact information plus direct links to her real estate website, where current property listings are just a tap away. This approach eliminates friction in the buying process – no typing long URLs or searching for contact details.

    \n\n\n\n

    The benefits go beyond real estate into technical fields where showing your expertise is extremely important. Tech professionals use digital business cards to highlight their portfolios, technical skills, and ongoing projects.

    \n\n\n\n

    Simon Willison, founder of Datasette, demonstrates this approach effectively through his GitHub profile. 

    \n\n\n\n\"Simon\n\n\n\n

    His presence includes links to his technical blog and personal projects, creating a comprehensive snapshot of his expertise. Visitors can easily contact him while exploring his work samples – all from a single profile.

    \n\n\n\n

    What makes this especially powerful for tech professionals is GitHub’s integration with Gravatar. When developers update their Gravatar profile picture, those changes automatically appear on GitHub and ensure a consistent, professional presence without requiring multiple updates.

    \n\n\n\n

    For many industries, digital business cards eliminate the limitations of paper while adding dynamic elements like direct portfolio access, property listings, and instant contact options – turning a simple introduction into a potential business opportunity.

    \n\n\n\n

    Creative examples for freelancers and artists

    \n\n\n\n

    For creative professionals, first impressions matter tremendously. Digital business cards give artists and freelancers a powerful advantage – the ability to showcase their actual work during initial meetings rather than just talking about it.

    \n\n\n\n

    Jonathan H. Kantor’s digital business card perfectly demonstrates this advantage. 

    \n\n\n\n\"Jonathan\n\n\n\n

    As an illustrator at Talking Bull Games, his Gravatar profile displays samples of his artwork directly on the card itself. New contacts can immediately see his illustration style and quality before clicking through to his full portfolio website. This visual introduction creates an instant connection that paper cards simply cannot match.

    \n\n\n\n

    Similarly, Shannon Cutts uses her digital business card to establish her credibility as a freelance writer. 

    \n\n\n\n\"Shannon\n\n\n\n

    Her profile links directly to her writing samples and service pages, allowing potential clients to quickly assess her style and expertise. This immediate access to her work helps her stand out in competitive pitching situations.

    \n\n\n\n

    Both Jonathan and Shannon have enhanced their cards with integrated QR codes connected to payment systems. This smart addition means that when someone appreciates their work, they can commission or purchase it on the spot by sending payment directly to the artist’s designated eWallet. No invoicing delays or payment friction – just a seamless transaction from introduction to sale, all through a digital business card.

    \n\n\n\n

    Corporate digital cards that mean business

    \n\n\n\n

    Corporate professionals require business cards that convey expertise, professionalism, and comprehensive information. Thomas McCorry’s digital business card exemplifies this approach perfectly.

    \n\n\n\n\"Thomas\n\n\n\n

    His Gravatar profile is like a mini-CV, with a detailed bio section outlining his professional history and accomplishments. The card includes direct links to his personal website, portfolio of work, and LinkedIn profile – all organized in a clean, accessible format alongside professional photographs.

    \n\n\n\n

    This structured approach gives potential clients and contacts an immediate sense of Thomas’s experience and capabilities at a glance. Rather than trying to cram limited information onto a paper card, his digital version provides depth without overwhelming the viewer. Someone meeting Thomas can quickly understand his background and then access more detailed supporting materials about specific projects or expertise areas with a single tap.

    \n\n\n\n

    Charles Leisure takes corporate networking a step further by connecting a QR code to his digital business card. 

    \n\n\n\n\"Charles\n\n\n\n

    This practical addition allows him to instantly share his complete professional profile during meetings or conferences by simply opening the QR code stored in his Apple or Google Wallet. Contacts can scan the code with their smartphone and immediately have all his information saved – eliminating the traditional business card exchange and ensuring his information never gets lost in a pocket or briefcase.

    \n\n\n\n

    How to Create Your Perfect Digital Business Card with Gravatar

    \n\n\n\n

    Creating a professional digital business card doesn’t require design skills or technical expertise. Anyone can set up a functional, customizable card like the examples showcased in this article by signing up for a free Gravatar profile.

    \n\n\n\n

    Getting started takes just minutes, and the process is straightforward:

    \n\n\n\n
      \n
    1. Sign up using your email address – Visit Gravatar.com and click “Get Started Now.” Enter your email address and follow the verification steps. If you already have a WordPress.com account, you can connect it to speed up the process.
    2. \n
    \n\n\n\n\"Creating\n\n\n\n

    \n\n\n\n
      \n
    1. Add a professional headshot – Upload a high-quality photo that represents you well. The image will be cropped to a square format, so choose one where your face is clearly visible. For business purposes, opt for good lighting and a neutral background.
    2. \n
    \n\n\n\n\"Adding\n\n\n\n
      \n
    1. Insert verified links and social media profiles – Add your website, portfolio, and social media accounts. Gravatar verifies these connections, adding credibility to your profiles with a verification badge that builds trust with new contacts.
    2. \n
    \n\n\n\n\"Adding\n\n\n\n
      \n
    1. Add a professional bio – Craft a concise, compelling description that highlights your expertise and unique value. Think of this as your elevator pitch in written form – clear, engaging, and focused on what makes you stand out.
    2. \n
    \n\n\n\n\"Adding\n\n\n\n
      \n
    1. Add relevant images – Beyond your profile picture, you can add additional images that showcase your work, which is especially helpful for creative professionals wanting to display their portfolio directly on their card.
    2. \n
    \n\n\n\n\"Adding\n\n\n\n
      \n
    1. Create a QR code for easy profile sharing – Once your profile is complete, you can generate a QR code that links directly to your digital business card. This code can be added to your Apple or Google Wallet for easy sharing during in-person networking events.
    2. \n
    \n\n\n\n\"Generating\n\n\n\n
      \n
    1. Customize the style and feel – Personalize your digital business card with custom backgrounds, banner images, and button styles that align with your personal or corporate branding.
    2. \n
    \n\n\n\n\"Customize\n\n\n\n

    With these seven simple steps, you’ll have a professional digital business card that works across platforms and makes networking more efficient and effective.

    \n\n\n\n

    Customization features and design possibilities

    \n\n\n\n

    Gravatar offers extensive customization options that let you create a truly personalized digital business card:

    \n\n\n\n
      \n
    • Background options: Add unique solid colors or image backgrounds that align with your personal aesthetic or company branding. 
    • \n\n\n\n
    • Custom header/banner images: Feature your logo, portfolio samples, or professional photography that represents your work. 
    • \n
    \n\n\n\n\"Header\n\n\n\n
      \n
    • Button style customization: Match link buttons to your overall design theme for a cohesive, professional appearance. 
    • \n
    \n\n\n\n\"Customizing\n\n\n\n
      \n
    • Section rearrangement: Position the most important elements (like payment options) at the top of your profile for better usability. 
    • \n
    \n\n\n\n\"Rearranging\n\n\n\n
      \n
    • Custom domains: Transform your profile from username.gravatar.com to yourname.social (or other extensions like .bio, .contact, and more). 
    • \n
    \n\n\n\n

    Privacy is also thoughtfully integrated into the design system. Gravatar gives you control over which information remains public (like your avatar and display name) and which stays private (such as phone numbers or birth dates). 

    \n\n\n\n\"Adjusting\n\n\n\n

    When a new site or app requests access to your non-public information, Gravatar will ask for your confirmation first.

    \n\n\n\n

    This privacy-first approach highlights one of Gravatar’s main strengths – functioning as a universal profile. Update your information once, and those changes instantly sync across all integrated platforms like WordPress, GitHub, and Slack, making your digital business card both customizable and remarkably efficient.

    \n\n\n\n

    Start Building Your Professional Digital Presence

    \n\n\n\n

    A free Gravatar profile offers the perfect solution for professionals seeking to establish a consistent online presence. More than just a digital business card, it functions as your unified identity across the web, appearing automatically on compatible platforms whenever you interact.

    \n\n\n\n

    Getting started takes just minutes. Visit Gravatar.com, enter your email address, and follow the simple verification steps to create your profile. Add a professional photo, customize your information, and start connecting your social accounts. The process is straightforward and designed for users of all technical skill levels.

    \n\n\n\n

    What truly sets Gravatar apart is its automatic synchronization capability. Once set up, your digital business card will appear seamlessly across WordPress.com, GitHub, Stack Overflow, and numerous other integrated platforms. 

    \n\n\n\n

    Start building your professional digital presence with Gravatar today!

    \n\n\n\n\"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 15:26:48 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:18;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:115:\"Do The Woo Community: Introducing the Content Sparks Hosting Team: Derek Hanson, Rae Morey, Robbie Adair and BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93144\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:110:\"https://dothewoo.io/introducing-the-content-sparks-hosting-team-derek-hanson-rae-morey-robbie-adair-and-bobwp/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:210:\"In the latest episode of Content Sparks, BobWP introduces three monthly hosts: Robbie Adair on content and AI, Rae Morey on all things media, and Derek Hansen on content management, promising valuable insights.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 13:24:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:19;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: Do the Woo Friday Shares, March 21, 2025 v11\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93186\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"https://dothewoo.io/blog/do-the-woo-friday-shares-march-21-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"Our curated content across the Woo and WordPress community and beyond.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 10:47:01 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:20;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:122:\"Do The Woo Community: Discovering the Impact of i2Coalition at Cloudfest with Christian Dawson, David Snead and James Webb\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93118\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:120:\"https://dothewoo.io/discovering-the-impact-of-i2coalition-at-cloudfest-with-christian-dawson-david-sneak-and-james-webb/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:232:\"At CloudFest 2025, experts from i2Coalition and BigScoots discuss the importance of collaboration in the hosting industry, addressing legislative challenges while emphasizing WordPress\'s role in supporting small businesses globally.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Mar 2025 09:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:21;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"Do The Woo Community: From Founding to Funding, Marieke van de Rakt’s Entrepreneurial Journey\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92989\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:90:\"https://dothewoo.io/from-founding-to-funding-marieke-van-de-rakts-entrepreneurial-journey/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:229:\"In this episode, Jonathan Wold and Tammy Lister chat with Marieke van de Rakt, co-founder of Progress Planner. They discuss her teaching, investment philosophy, and insights on e-commerce challenges and open source opportunities.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 20 Mar 2025 13:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:22;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:104:\"Do The Woo Community: Thoughts on CloudFest, Rollercoasters and WP Cloud’s Strategy with Elise Prather\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93074\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:99:\"https://dothewoo.io/thoughts-on-cloudfest-rollercoasters-and-wp-clouds-strategy-with-elise-prather/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:236:\"Elise Prather, VP at Automattic\'s WP Cloud, shares her immersive experience at CloudFest, highlighting its vast size, unique networking opportunities, and the customizable hosting solutions WP Cloud offers for companies and freelancers.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 20 Mar 2025 09:33:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:23;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:15:\"Matt: Radiohead\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140773\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"https://ma.tt/2025/03/radiohead/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:785:\"

    It’s so funny that my random re-engagement with Radiohead re-emergence coincides with them doing a new entity that might mean something. I did a poll on Twitter and people preferred OK Computer to Kid A 78%!

    \n\n\n\n

    Grok told me: “The band has recently registered a new limited liability partnership (LLP) named RHEUK25, which includes all five members—Thom Yorke, Jonny Greenwood, Colin Greenwood, Ed O’Brien, and Philip Selway. This move is notable because Radiohead has historically created similar business entities before announcing new albums, tours, or reissues.”

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 19 Mar 2025 23:06:02 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:24;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:98:\"Do The Woo Community: Tara Claeys on the Benefits of Niching Down to School and Nonprofit Websites\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92779\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:97:\"https://dothewoo.io/tara-claeys-on-the-benefits-of-niching-down-to-school-and-nonprofit-websites/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:230:\"In this episode of WP Agency Tracks, hosts Marcus Burnett and Cami MacNamara discuss the benefits and challenges of niching down with guest Tara Claeys, emphasizing her focus on schools and nonprofits for greater business success.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 19 Mar 2025 14:04:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:25;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"Do The Woo Community: Ronnie Burt Chats About Gravatar’s Evolution and CloudFest Experiences\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=93052\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:90:\"https://dothewoo.io/ronnie-burt-chats-about-gravatars-evolution-and-cloudfest-experiences/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:189:\"At CloudFest, Ronnie Burt discusses Gravatar\'s history, its integration with WordPress, recent spikes in usage from platforms like ChatGPT, and the importance of digital identity ownership.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 19 Mar 2025 10:30:38 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:26;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:65:\"Do The Woo Community: The Winners of the CloudFest Hackathon 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=93009\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"https://dothewoo.io/blog/the-winners-of-the-cloudfest-hackathon-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:210:\"The CloudFest Hackathon 2025 celebrated innovation in open-source development, featuring diverse awards and emphasizing inclusivity within the tech community, with Accessible Infographics as the overall winner.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 15:57:07 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:27;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"WordPress.org blog: WordPress 6.8 Beta 3\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18634\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-3/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5533:\"

    WordPress 6.8 Beta 3 is now ready for testing!

    \n\n\n\n

    This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, it is recommended you evaluate Beta 3 on a test server and site.

    \n\n\n\n

    You can test WordPress 6.8 Beta 3 in four ways:

    \n\n\n\n
    PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install.  (Select the “Bleeding edge” channel and “Beta/RC Only” stream).
    Direct DownloadDownload the Beta 3 version (zip) and install it on a WordPress website.
    Command LineUse the following WP-CLI command: wp core update --version=6.8-beta3
    WordPress PlaygroundUse the 6.8 Beta 3 WordPress Playground instance to test the software directly in your browser without the need for a separate site or setup.
    \n\n\n\n

    The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

    \n\n\n\n

    Catch up on what’s new in WordPress 6.8: Read the Beta 1 and Beta 2 announcements for details and highlights.

    \n\n\n\n

    How to test this release

    \n\n\n\n

    Your help testing the WordPress 6.8 Beta 3 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important. This detailed guide will walk you through testing features in WordPress 6.8.

    \n\n\n\n

    If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

    \n\n\n\n

    Curious about testing releases in general?  Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

    \n\n\n\n

    Vulnerability bounty doubles during Beta/RC

    \n\n\n\n

    Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

    \n\n\n\n

    Beta 3 updates and highlights

    \n\n\n\n

    WordPress 6.8 Beta 3 contains more than 3 Editor updates and fixes since the Beta 2 release, including 16 tickets for WordPress core.

    \n\n\n\n

    Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 3 using these links:

    \n\n\n\n\n\n\n\n

    A Beta 3 haiku

    \n\n\n\n

    Beta three refines,
    WordPress shapes with steady hands,
    Code grows into form.

    \n\n\n\n

    Props to @benjamin_zekavica @krupajnanda @ankit-k-gupta @joemcgill for proofreading and review.

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 15:35:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:28;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"WPTavern: #161 – Robert Jacobi on WordPress, Security, and the OSI Model\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=188282\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:86:\"https://wptavern.com/podcast/161-robert-jacobi-on-wordpress-security-and-the-osi-model\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:52014:\"Transcript
    \n

    [00:00:00] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.

    \n\n\n\n

    Jukebox is a podcast which is dedicated to all things WordPress, the people, the events, the plugins, the blocks, the themes, and in this case, WordPress, security, and the OSI model, which underpins the entire internet.

    \n\n\n\n

    If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice, or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

    \n\n\n\n

    If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

    \n\n\n\n

    So on the podcast today we have Robert Jacobi. Robert has a long standing history with the tech and CMS industry, having worked in senior positions at Joomla, Cloudways, Perfect Dashboard and more. He’s now the Chief Experience Officer at Black Wall, a company formally known as BotGuard.

    \n\n\n\n

    Robert talks with me today about the transition from proprietary systems to open source, and the seven layer OSI model that underpins the internet. Drawing from his experiences in tech, Robert and I try, and perhaps fail, to break down the complexities of how website traffic is rooted over the internet. This is done to try to understand how Black Wall can position itself to mitigate risks before they reach hosting companies infrastructure.

    \n\n\n\n

    We also discuss the evolution of bot traffic on the web, where upwards of 10% of internet traffic is identified as malicious. This kind of insight is particularly important for those interested in the security aspect of web hosting and website management.

    \n\n\n\n

    We also get into Black Wall’s rebranding journey, and its continued dedication to the WordPress community by participating in events like WordCamp Asia and Europe.

    \n\n\n\n

    If you’ve ever wondered about the unseen layers of internet security and infrastructure, or the strategic moves involved in rebranding a tech company, this episode is for you.

    \n\n\n\n

    If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you’ll find all the other episodes as well.

    \n\n\n\n

    And so without further delay, I bring you Robert Jacobi.

    \n\n\n\n

    I am joined on the podcast by Robert Jacobi. Very nice to have you on. I think I’m going to muddle up the company that you work for, because a little bird tells me that in the very, very recent past, the company that you work for became, well different in some way. Perhaps a name change, a logo change. Who did you work for and who do you now work for? And are they the same thing?

    \n\n\n\n

    [00:03:08] Robert Jacobi: Well, I still have my original swag, the BotGuard polo, which all of us have at the team, but we are now Black Wall. So Black Wall, formerly known as BotGuard. So we’ve done a full rebrand. I’m sure a lot of folks have seen already. But yep, just bringing it forward. Allowing ourselves to take on more of what we do, on top of the highly focused bot security monitoring and mitigation.

    \n\n\n\n

    [00:03:32] Nathan Wrigley: Okay. That’s a perfect introduction then. So give us your potted bio in tech, in CMSs. I’m not going to say WordPress because it’s a bit bigger than that. And maybe just throw in the BotGuard, Black Wall bit at the end there, and what your role is there. So just a couple of minutes. Just tell us who you are and whatnot.

    \n\n\n\n

    [00:03:49] Robert Jacobi: Minutes, I could spend all day talking about myself. So I’ve been in the industry for a number of years. Mumble, mumble, how long it’s been. Let’s go with CMSs because, actually a big passion way back in the day, had an agency where we created our own, of course proprietary CMS because that’s what you did.

    \n\n\n\n

    And then moved into open source for a number of reasons. Primarily, which I hope all agencies don’t need to talk about anymore, because I think it’s pretty obvious. It was the hit by a bus theory that, we put all our eggs into a proprietary basket, and we get hit by a bus, then that customer is stuck. With open source, there’s the community of the ecosystem, and it’s huge.

    \n\n\n\n

    And, you’ll always have your preferred vendors for many, many, reasons, but if something happens, you’re not locked into that code. You’re not blindsided. That was a fairly quick transition, and wound up working at the time, sorry WordPress universe, went to Joomla because hey, back in that day Mambo slash which became Joomla, was honestly just more of a stack that our team leaned towards. It was MVC based. It was geeky. There were tons of features, and functions that the types of customers we were working with, it resonated with. Especially multilingual at the time.

    \n\n\n\n

    Fast forward, let’s say 10 years, and now WordPress is beyond a competing product. It’s got an ecosystem a, value with its name brand, and literally the immense community that’s been built around it.

    \n\n\n\n

    From there went to, transitioned off of the Joomla space, and popped into a company called Perfect Dashboard. Oh, I forgot, I actually was the president of Joomla, briefly, so.

    \n\n\n\n

    [00:05:31] Nathan Wrigley: Just a little fact there, yeah.

    \n\n\n\n

    [00:05:32] Robert Jacobi: You know what, I should not forget that because that one year felt like 10. It’s a lot to work with a huge community, for many, many reasons. You have so many stakeholders. People whose lives depend on the product, the solution, the community, the ecosystem. Certainly not going to get into WordPress drama, but I understand how difficult it is to bear those responsibilities. And, it’s a lot. Immense amount of work. And WordPress has done amazing things in sustaining that for decades.

    \n\n\n\n

    So, moved over to the WordPress side of the universe. Company called Perfect Dashboard. We were acquired. Moved to running the WordPress business unit of Cloudways, also now acquired by Digital Ocean. And today I’m at Black Wall. I’m the Chief Experiences Officer for Black Wall. So that includes community, includes evangelism, includes investor in government relations. It’s really making sure that there’s an ability to communicate all the things that we do to the right people.

    \n\n\n\n

    [00:06:32] Nathan Wrigley: And what does well formally BotGuard, now Black Wall, what do they do? What do they offer up into the market? Is it a WordPress thing, or is it more of a, we’ll get into the OSI model in a minute, but is it more of an operating system thing?

    \n\n\n\n

    [00:06:46] Robert Jacobi: It’s at the top of the stack. So while, let’s just call it 50%, I know that’s not the exact number, but it’s close enough that I, think it’s fair to say, 50% of the web is run by WordPress. We’re still very heavily involved in the community. So we were just at WordCamp Asia. We’ll be at WordCamp Europe. These are places want to meet folks, communicate our solution, and engage with hosting providers because, when we get to running through our little OSI stack that you and I are obviously super experts in, we’ll kinda see where WordPress falls into it and where security matters, up and down that stack.

    \n\n\n\n

    We’re trying to help WordPress end users and hosting companies before you ever actually have to get to WordPress, because we already see that a significant portion of internet traffic, 40% of internet traffic is bots. AI agents, whatever you want to call them. And 25% of that 40%, so 10% is completely malicious. And you don’t want to get near the hosting company, the actual application, or anywhere further down the stack if you can avoid it.

    \n\n\n\n

    [00:07:50] Nathan Wrigley: So it sounds, just the name, and I confess, I don’t know much about what BotGuard, Black Wall do, did. But it sounds to me from the naming of it, that it’s a bit like you are literally a sentinel. You are standing in the way of things. Examining things that are coming your way and saying, no, you may not pass, but you may.

    \n\n\n\n

    And a bit like throwing it into dev null, if something is unable to pass, you are just black walling it, as it were. You are just saying, nope, off you go, drop, you’re outta here. Is that basically the principle? You are a security firm preventing things that are bad happening to whoever it is that uses your services.

    \n\n\n\n

    [00:08:25] Robert Jacobi: Some of it’s super, super bad, so you’re going to dev null it. And then there’s a spectrum of how bad those connections can be. We want to focus on humans getting to human content. Our key, sort of value propositions, humans are secure, humans are actually visiting your site. That’s what’s important.

    \n\n\n\n

    But there are good bots, and there are good bots who accidentally do bad things. And then there are the bad, bad bots. We obviously want Google to index our sites. We may or may not want Open AI indexing our sites. We certainly don’t want it. causing an accidental denial of service by how much it’s scraping our content. Which we have seen many a time. Where it’s like, great Open AI, come on in, take one quick look and get out. But it’s like, I’m going to stay there and I’m going to churn through everything. And we’ve seen it and it knocks sites out. And the AI engines, agents are particularly bad about that, because they’re trying to fill in and understand that data.

    \n\n\n\n

    [00:09:25] Nathan Wrigley: Yeah. Okay, so we’ve got some idea of what you do. Just as an aside, what a shame that the internet has a need for a company like yours. I don’t mean to take the food off your table, but back 20 years ago this just wasn’t really a thing. Just this promise of the internet to be this philanthropic place with unicorns and rainbows everywhere, where we were all going to throw our content in, and we were all going to consume it and it would be wonderful.

    \n\n\n\n

    And now we have well, human beings presumably started the whole thing, but now human beings have written codes such that they can step away and let their robots carry on. And what a shame that we need to have things like captchas on forms. and we need to pay security companies to do all of this stuff.

    \n\n\n\n

    And again, I’m not trying to say that your business doesn’t have a place. Clearly it does. But from a philosophical point of view, I wish that they didn’t need to exist, because the place was benign and harmless all the time.

    \n\n\n\n

    [00:10:19] Robert Jacobi: I’m going to poke a tiny hole in that bubble.

    \n\n\n\n

    [00:10:21] Nathan Wrigley: Please do.

    \n\n\n\n

    [00:10:22] Robert Jacobi: Actually, this is not a bad thing because we’ve actually moved most of the troublemaking away from us locally. You want to go back 20 years ago and we’re dealing with Norton Antivirus on everything, and crossing our fingers and praying that something doesn’t sneak into our immediate homes.

    \n\n\n\n

    We’ve actually been able to, because we’ve gone to cloud, push a lot of that super local personal risk a bit further downstream. So these security issues didn’t magically appear, they were much more, in fact, they were much more terrifying before. And I, oh my god, my Windows PC got hacked and now I have to like completely just throw it on the grill, light it on fire five times, and then reinstall Windows.

    \n\n\n\n

    Most folks don’t worry about doing that with their laptops, with their phones or whatnot anymore. The scalable risks are completely different, because me getting hacked was one person. Now a cloud website platform application, and then I’m, 10 million people get hacked. But we’re pushing it further away and away and away.

    \n\n\n\n

    [00:11:24] Nathan Wrigley: Yeah, it’s interesting. I remember in the dawn of computers that I had, I didn’t begin my computer journey right at the very, very beginning. You could walk into a store and walk out with a computer in more or less, every town and village in the country, when I began using them.

    \n\n\n\n

    But the media, the way that you got things onto the computer was a physical thing. You held the object in your hand. It was either a CD or some kind of media that you could physically hold. And now of course literally nobody is installing anything off a CD. And so I guess the, inexorable rise of the internet, and everything coming down a, well, telephone line, and we’ll get into that in a moment. Putting it in the cloud makes way more sense, doesn’t it? It doesn’t really seem to have so much utility having the antivirus, if you like, on the computer. I know it does, don’t get me wrong. But I can see that the shift to mitigating the risk and detecting the risk and doing something about the problem in the cloud. Obfuscated, abstracted away, so that you never even really know what’s going on is probably the best way forward. So, yeah.

    \n\n\n\n

    [00:12:25] Robert Jacobi: For 99.9 9, 9 9 9% of people, they’re not going to know or understand that they just want it to work. They don’t want to be robbed from, or in danger online. I always put it, as techy as I appear to be, I am the worst car person on earth. So when I think about internet security and what most people want to know about it, it’s pretty much what I want to know about cars.

    \n\n\n\n

    I want my car to turn on. Go forward, go backward, get me to where I need to be as safely as possible. I don’t know, or care about anything else that’s going on under the hood. It’s a tool that I use and I want it to work like I expect it to work.

    \n\n\n\n

    [00:13:04] Nathan Wrigley: Yeah. Given the population at large, it must be, one in a hundred thousand who care about the internals of their machine, probably even less so. Doesn’t matter really what you’re using, be it Mac, Windows, Linux, Chromebook, whatever it is, you just to flip the lid open and you want to just.

    \n\n\n\n

    [00:13:18] Robert Jacobi: Check my email, log into my social media, buy something, call it a day.

    \n\n\n\n

    [00:13:23] Nathan Wrigley: But because it’s becoming an increasingly crucial part of our lives. Certainly where I live in the UK, more or less everything has gone online that’s of any use. So shopping has gone online. Appointments for doctors have gone online. Dentists, it’s gone online. Pharmacy appointments, it’s all gone online. Paying your taxes, it’s online.

    \n\n\n\n

    And so we really do need to protect this stuff. Really need to protect this stuff, because if it’s possible to, I don’t know, inject some problem in that path, we’re not just going to take out the beautiful experience of buying from a shop. We’re going to take out our ability to get fuel into our houses and into our cars and all of that.

    \n\n\n\n

    [00:13:58] Robert Jacobi: Yeah, if you need that prescription, you don’t want that to go down, so.

    \n\n\n\n

    [00:14:01] Nathan Wrigley: It’s become almost like, almost like a human right. That seems a bit of a ridiculous thing to say, but on some level, it seems like the internet or access to the internet is almost on that level. It certainly feels like it is as important as other key parts of the country’s infrastructure. So power and gas all of that, and the road network and what have you.

    \n\n\n\n

    [00:14:20] Robert Jacobi: It is the information utility. So you have your power utilities, you have an information utility. It’s got to be available. In the States we always have our last mile issues, especially for very rural folks, about how connected are they, how fast is it? We always do this to ourselves. We got this great new toy, now let’s see how, great we can make it. Yeah, but if you’re not running at a hundred megabits a second your experience might really not be functional.

    \n\n\n\n

    [00:14:46] Nathan Wrigley: So we’re going to talk today about something that I confess, I don’t know anywhere near enough of. So, Robert and I have shared an article, and I’ll put the article in the show notes. And essentially this thing that we’re going to talk about is what’s called the OSI model. And the OSI model comprises various different layers.

    \n\n\n\n

    And basically, dear listener, if you’ve never thought about the gubbins of your computer, you, might just have this fairy tale notion that you open it up and start typing and it just works. I can send an email, of course I can send an email, you just click send and it’s gone and that recipient receives it.

    \n\n\n\n

    But the breathtaking quantity of things going on in the background disguised from you. Really, honestly, Robert, none of this should work, and yet it does work.

    \n\n\n\n

    [00:15:36] Robert Jacobi: Which is why I love my car analogy. I have no idea what is going on 99% of the time. I still have a gas car, so I know there’s a larger motor than an electric car. I know gas gets in there and lit on fire and moves pistons around, but really, in the most abstract sense of it. It goes, and that’s what I want it to do.

    \n\n\n\n

    [00:15:56] Nathan Wrigley: There’s explosions happening all the time, and fuel is being funneled around, and things are turning because they’ve been lubed with oil and all of that. And honestly, your car is nothing compared to the internet. The complexities in the internet, because I know that electric cars have taken over from, or are taking over from gasoline cars, but broadly speaking, the gasoline engine probably hasn’t changed terrifically much in the last a hundred years. Whereas I think the infrastructure comprising the internet, although the OSI model probably hasn’t changed much either.

    \n\n\n\n

    The things that are coming down the pike, and the things that have happened in the last 20 years, it’s breathtaking. So, dear listener, get out your tinfoil hat as Robert and I attempt and probably butcher what the OSI model is. And if you’ve got the capacity. Perhaps pause this podcast, go to the wptavern.com website, search for this episode and read the article. And the one that Robert came up with, which was a good one, is called What is the OSI model? It Standardizes How Computer Networks Communicate, and it’s on bluecatnetworks.com, but I’ll provide the link.

    \n\n\n\n

    [00:17:00] Robert Jacobi: The best one I found that had the good pictures to also help. Because visually it’s hard to, you think you have a server, some wires and a browser and it’s like me saying I have an engine, some gas, and a steering wheel. There’s a lot of pieces that go in between all those parts.

    \n\n\n\n

    [00:17:18] Nathan Wrigley: The amazing thing is this all happens really at the speed of light and. Okay, a perfect example is Robert is literally half a world away from me, and I’m talking to him through a browser, and I imagine that there is the most fractional delay between the words that I’m saying and him hearing it.

    \n\n\n\n

    It’s probably like a thousandth of a second or something. And yet somehow that sound and that image is getting consumed by my camera. Traveling down a cable. Getting into my computer. The computer’s making decisions about, what the heck am I going to do with this? And then pushing it down a wifi network.

    \n\n\n\n

    That wifi network is then thinking, where do I put this thing? And then it puts it there. That then decides to shunt it along somewhere else, which shunts it along somewhere else. And eventually it gets to Robert’s computer. Robert’s computer does all of it in reverse. Unpacks it rather than packing it up, and puts it on the screen. And it’s all happening like thousands of times a second, and it shouldn’t work.

    \n\n\n\n

    [00:18:20] Robert Jacobi: It’s more live than live.

    \n\n\n\n

    [00:18:22] Nathan Wrigley: Yeah.

    \n\n\n\n

    [00:18:22] Robert Jacobi: Because not only do we have the video, we have a chat window on the side. It’s all encapsulated. Use some of these acronyms, but, we have our streaming protocol for the actual video and audio. And then we have our standard internet protocols for the content and everything else that’s holding the streaming protocols together.

    \n\n\n\n

    It’s crazy. Why I’m excited to have this conversation with you is like, I feel, very anecdotally, but people are like, I’m just going to spin up a WordPress site. I’m going to be a WordPress agency. And they just do it. And there’s just all this stuff in the mix that, while it’s great to take for granted, it might help to know just a few of the pieces that are critical in that security portion of infrastructure.

    \n\n\n\n

    [00:19:05] Nathan Wrigley: Yeah, it feels to me like a bit like you’ve been to a really nice restaurant and you’ve eaten a fabulous meal, and then you realize the 12 hours of labor that went into creating that tiny little sauce on the side or something like that. And you get real appreciation for it. And hopefully something like that will come out of this.

    \n\n\n\n

    Again, caveat emptor, we’re not going to get everything right. Please feel free to give us a comment when we do get things wrong. But the OSI model is basically, it’s a seven layer stack and I think we’ll start at layer seven, because it sounds easier to describe it from the top down. So seven through one. And I’ll just say what all the layers are.

    \n\n\n\n

    So they go from the application layer, that’s layer seven. Presentation layer is six. The session layer is five. Four is transport. Three is network. Two is data link. And then the final one is the physical layer. And this point, I completely stand back and say, Robert, tell us a little bit about the top one, and Robert puts his hands on his head, the application layer.

    \n\n\n\n

    [00:20:06] Robert Jacobi: It’s funny, it’s like the top most layer and the bottom most layer are the, I feel, the easiest to like grok. Let’s use geek terms, to understand.

    \n\n\n\n

    The application layers is as well as a WordPresser, I can explain. It’s really the top, you’re connecting from the client, your client application, so a browser, email, whatever, with specific protocols.

    \n\n\n\n

    And what we primarily use is TCP IP, because that’s that magical thing that is able to grab a bunch of information, split it up into a billion pieces, and somehow put it all back together. How are we communicating with other devices is the way I look at that layer. It’s very high level, very abstract, it’s sort of fundamental. It’s like the air we need to breathe to actually get stuff done.

    \n\n\n\n

    [00:21:00] Nathan Wrigley: It’s the layer, if I’m correct, it’s the layer closest to us, the user. It’s the layer which we can most readily understand, because it’s the layer closest to which we do things. So I think maybe a poor example, or an incorrect example, would be to imagine it’s something like Microsoft Word or something like that. Because it isn’t, the application itself isn’t that layer. It’s more how that interacts with the protocol underneath. So it might be HTTPS or FTP or something like that. But you are writing an email or something like that, and you hit send, and then the application layer gets in the way and says, what do we do with this?

    \n\n\n\n

    [00:21:38] Robert Jacobi: Bingo. That’s exactly it, so we use all these, and generically they’re just called clients. So whether it’s Word, Microsoft Word, whether it is Safari, whether it’s Chrome, whether it’s Apple Mail. This will only entertain a few people, or Eudora mail. Just taking it back. Those are discreet applications on our devices.

    \n\n\n\n

    And then the application, to your point, you hit send, you hit go on your browser. And now we’re like going crazy, okay, what do we do? We have a request. A request needs to go somewhere. That’s where the application layer kicks in.

    \n\n\n\n

    [00:22:11] Nathan Wrigley: So we have this protocol in the application layer, which then makes decisions about what to do. And each of the layers is collapsing into the layer below it. And that layer then takes something that the previous higher layer gave to it and does, some shenanigans with it, and we get something which can then move into the layer below.

    \n\n\n\n

    [00:22:30] Robert Jacobi: Everyone knows the application layer, because we’ve all typed in HTTPS://. That is literally the application layer request.

    \n\n\n\n

    [00:22:40] Nathan Wrigley: Okay, so in the case of a browser, it’s the capacity for the browser to send something through HTTP, what have you. And then we get into the presentation layer, which is the layer beneath. And I think, again, I’m just cribbing from this article, if I’ve parsed this correctly, it says that this layer comprises things like translation, encryption, decryption compression. And it turns all of the bits and pieces into machine readable data. So for example, it says it will convert all of the binary ones and zeros into machine readable data. If the devices are using a different communication method, the presentation layer translates that data into something understandable, so that it can be received from layer seven.

    \n\n\n\n

    And there’s a lot more to it than that. It’s like this layer of converting what came to it, into something else, which can then be moved down the stack into five.

    \n\n\n\n

    [00:23:34] Robert Jacobi: Bingo, that’s literally exactly it. And it’s something us as humans completely don’t interact with unless you’re the person building out that infrastructure. It’s really just we’re having computers talking to computers at this point. So when you typed in HTTPS WP Tavern, that was your human interaction. Now we’re all like, what is the process? So presentation is making sure that that data moves forward the stack.

    \n\n\n\n

    [00:23:59] Nathan Wrigley: And my understanding as well is that this is the moment where encryption and decryption occur. And so it’s high up in the stack. That is to say it’s near the layer seven, because you obviously can’t have it encrypted before you do anything with it. It’s high up in the stack so that at this moment, before it’s gone anywhere, it has become encrypted, before it’s passed down the stack and sent down the wires. But also, this is the moment if it’s coming up the stack, towards you so that you can read it in your browser, so that it’s getting decrypted at the last possible moment as well. So the encryption, I guess is at the first possible point on the way out, and the last possible point on the way back in. Have I got that right?

    \n\n\n\n

    [00:24:40] Robert Jacobi: Yeah, and that’s a great way to look at it is, when we look from the top of the stack to the bottom of the stack, it’s almost in physical proximity to you as the human end user.

    \n\n\n\n

    [00:24:48] Nathan Wrigley: Yeah.

    \n\n\n\n

    [00:24:49] Robert Jacobi: Because at first you’re typing in something. Now something’s happening, that encryption is happening locally, because otherwise it wouldn’t be safe. And as we get further down the stack, you are physically further away from what’s going on.

    \n\n\n\n

    [00:25:02] Nathan Wrigley: Yeah. And the other thing that’s going on here is compression. So you’ve got some giant blob of data that the stack can compress to make it more efficient to fly over the wires, then that will be handled at this layer as well, is my understanding.

    \n\n\n\n

    [00:25:17] Robert Jacobi: We have compression on the servers as well in the applications layer as well. Don’t forget, you can compress data on the protocol.

    \n\n\n\n

    [00:25:22] Nathan Wrigley: So that all sounds really remarkable, but also quite humanly understandable, because everything that I’ve said makes perfect sense. And we start from five down. It starts to be really the domain of networking experts, and people who really obsess about computers and understand this stuff. But if you’re just the person using the web and WordPress casually, honestly, it may be that you’ve never come across this stuff, and I found it just breathtaking, to be honest.

    \n\n\n\n

    So layer five, is called the session layer, and it is literally that. It’s managing sessions, so it’s figuring out who’s connected to who. How that communication should begin. How it should end. When it’s decided that, okay, that connection should be destroyed. We’re not using that anymore, but okay, now we’ve got something else that we need to do. And it figures out, yeah, sessions basically, which I guess is the easiest way to describe it.

    \n\n\n\n

    [00:26:15] Robert Jacobi: Everyone knows what a session is. It’s me being connected, and my information being managed for me, so that when I log in, Nathan doesn’t get all my information.

    \n\n\n\n

    [00:26:24] Nathan Wrigley: And also, an understanding here is that usernames and passwords, so authentication is happening at this layer as well. And again, that kind of makes sense. So you would have to authenticate before the decryption happens in the layer above and vice versa. But yeah, this is opening up connections between, in this case, you and I are chatting in a browser, so we’re occupying one session, and then there are million, literally millions of packets of data just flying around over the internet via who knows what route. They’re all going in completely different routes.

    \n\n\n\n

    [00:26:57] Robert Jacobi: Some of these packets can literally be going through Australia or South Africa or Brazil, and back and forth and they, catch up.

    \n\n\n\n

    [00:27:05] Nathan Wrigley: Incredible, isn’t it? Literally. It’s like, I don’t know. Imagine getting a handful of rice and chucking it all down on the floor, but it assembles itself into a tower. It just lands and it just assembles itself. That’s basically what we are dealing with.

    \n\n\n\n

    [00:27:19] Robert Jacobi: That’s a good one. Yeah, like I have my own rice tower at home. I throw it on the ground. It gets shipped by FedEx to you, but when you open up the box, it reassembles itself.

    \n\n\n\n

    [00:27:28] Nathan Wrigley: Just in perfect condition, yeah. So the next layer four, is the transport layer. And this is the bit which actually I guess begins the process of sending my stuff to you, and your stuff to me. And typically the protocols for that are something called UDP, which is User Datagram Protocol or TCP Transmission Control Protocol.

    \n\n\n\n

    And my understanding, which is very basic, is that UDP differs from TCP in that UDP can be more of a stream of data, because it doesn’t require everything to come through perfectly to say, yeah, that’s now finished. So a perfect example would be us talking to each other, streaming. If bits get lost along the way, it doesn’t want to say, right end the call.

    \n\n\n\n

    We haven’t got one bit. We need to just stop. Until that bit has been found, it just keeps going and just disregards the missing bits. Whereas TCP, this is just incredible. This is the rice tower, isn’t it?

    \n\n\n\n

    [00:28:28] Robert Jacobi: TCP is the rice tower, exactly.

    \n\n\n\n

    [00:28:30] Nathan Wrigley: It requires every single piece to be sent. Acknowledged. Counted out. Counted in at the destination, and for the both ends of the connection to be saying, did you get that bit? Yeah, I got that bit. What about this bit? Did you get that bit? Yeah, I got that bit. 23, did you get 23? No, 23 has gone. Where, where’s 23? Oh, I’ll send 23 again. Here it is. A million times a second for this conversation that we’re having. Well, it’s probably not a million times a second, but you know what I mean.

    \n\n\n\n

    And I’ve summed that up very badly, but these packets of data that are flying around. They egress my computer. They go through 7, 6, 5, now we’re in 4, and they’ve got to go through further layers. But they’re not just going in a straight pipe, like a hose pipe from your faucet, spraying the garden. These are just going anywhere they choose. So one packet, like you said, might go via Australia, one might go through South Africa, and then somehow they just reassemble themselves magically at the other end.

    \n\n\n\n

    [00:29:26] Robert Jacobi: Routers, because that’s what those do. Obviously that’s a physical component further down the pipe. They’re saying, this is the order of information. I’m going to just spew out, and everyone else needs to figure out how to put it back together, one piece. It’s crazy.

    \n\n\n\n

    [00:29:38] Nathan Wrigley: Yeah, it is crazy. My understanding is that back in the day, when the internet was conceptualized, I think it was possibly something like Darpanet, or something like that, but it was a, I think it was a military endeavor, the enterprise was something along the lines of, we need a communication system which if various nodes are taken out, let’s say, I don’t know, bombed out of existence, or just the power is cut, the system is intelligent enough to just work round the problem, and figure, okay, we can’t go there anymore, let’s just go a different way. And that is what we now have.

    \n\n\n\n

    [00:30:12] Robert Jacobi: It’s all about redundancy. I’m going to take just a slight tangent on federated social media. Any kind of federated application. Those exist in a lot of ways to ensure redundancy. I’m going to go way, way back, to where most of the audience probably wasn’t born. So we had these things called modems, and they would be attached to a phone, and you would run something called a bulletin board system. Those were single points of failure.

    \n\n\n\n

    So you actually saw groups of independent bulletin board system providers create these distributed federated networks. So if you sent an email to a specific person, at a specific BBS, if that phone line was busy, it could go to another one that would take it, and keep pushing it along until you actually got it to the right place. This idea of distributed and federated systems is really what makes the internet functional because we take care of failure points. We ignore them and just work around them.

    \n\n\n\n

    [00:31:17] Nathan Wrigley: And obviously we know that works as well because parts of every country’s infrastructure are breaking all the time. One router somewhere will just go down, even if it’s a crucial router, it doesn’t in the end stop the system. It probably creates bottlenecks in various places.

    \n\n\n\n

    [00:31:31] Robert Jacobi: Slow it down.

    \n\n\n\n

    [00:31:32] Nathan Wrigley: Slow the egress of traffic around, yeah. But in layer four we’re dealing with the ports that things fire out of as well. And then when we get down to layer three, that’s when the actual data is divided up into little packets and little segments. So data four and data three, honestly, to some extent they feel very similar in my head at least anyway.

    \n\n\n\n

    But layer three is using things like IP addressing, to decide where this packet’s going to go. And I think wraps the packets up in the IP address, if you like. It’s almost like wrapping up a Christmas present and as it travels down the stack, by the time it gets to layer three, it’s being told, this is not what it’s being told, but this encapsulates it. This is a gift for Robert Jacobi. You must find Robert Jacobi.

    \n\n\n\n

    Then it reads that, and then finally, it’ll rip off the wrapping and finally give you the gift at the end as it goes back up the stack. So, there’s not a lot to say on layer three, I don’t think, other than it’s using things like IP v4 and IP v6 to make decisions about how it’s going to be spread around. Have I got that about right? Do you think?

    \n\n\n\n

    [00:32:35] Robert Jacobi: That works for me. I think that’s enough information for most folks. Again, we’re trying to give a taste of how complex security is, for what we do day to day. But also how we can apply it to how WordPress understands it.

    \n\n\n\n

    [00:32:48] Nathan Wrigley: And then we’ve got the two layers where, the data link layer and the physical layer. The data link layer is handling the data transferred. So the actual data moving around. So it’s getting pushed around on the same network is my understanding for layer two. So that’s when you are, for example, in the same office building. I think layer two is just for that. I could be wrong.

    \n\n\n\n

    [00:33:11] Robert Jacobi: It’s getting to your router and then your router will start moving stuff around. Cause don’t forget, your router is on your network as well as any other computer in that closed. So, our 192’s. Our internal network, so that’s the closest on the networking side, that hardware side, because as soon as it hits our router it goes to the cable, or whoever you’re using, outside of your office, home, your LAN.

    \n\n\n\n

    [00:33:35] Nathan Wrigley: And then the final layer, the physical layer is the cables, the actual infrastructure out there in the world outside of your house, basically. Or your office building. Well, maybe there’s some of it in the office building as well, but the majority of it, the miles and miles of things are all in the physical layer. And it says here on the bit that I’m reading. Finally, this layer encompasses the equipment that carries data across the network, such as fiber network switches, and so on.

    \n\n\n\n

    And so finally, our packets of data that we started off at the beginning, writing the email to Robert Jacobi. Finally, that packet has made it out. It’s escaped into the wild, and is now just rattling around on the internet desperately being told, very quickly, where to go. And then hopefully it’ll arrive. Travel to Robert’s computer. Travel in the reverse direction of the stack, and he’ll get a nice email from me with cat pictures in it.

    \n\n\n\n

    [00:34:27] Robert Jacobi: Why is it always cat pictures?

    \n\n\n\n

    [00:34:29] Nathan Wrigley: Why not? Okay, so all of that shenanigans is happening, and honestly, I feel a, it’s very difficult if you’re inexperienced like me, to get the words out in the correct order so that I have demonstrated that I understand it. Because I do on a very, very slight level.

    \n\n\n\n

    And I know that entire careers, very, very, well paid careers can be built upon really understanding what we’ve just spoken about. But in there, I presume, is the capacity for threats, and the capacity for things to go wrong, and the capacity in all of these layers for people to inject things which shouldn’t be there. For clever people to figure out ways to disrupt that information. To take that information. To delete that information. To rewrite that information. And is that essentially what your company does? Prevent those things?

    \n\n\n\n

    [00:35:18] Robert Jacobi: So when I look at it from a CMS stack, and again, let’s focus on WordPress. My mental model that is slightly different. I’ll use, I think what most of us feel like is WordPress infrastructure. I know, the really smart folks are going to yell at me for this. You have a server somewhere. It has an operating system, it has PHP, MySQL, it has WordPress, and then whatever else is in front of it.

    \n\n\n\n

    So there’s a whole stack and layer on layers of communication that go from when I hit my browser and type in WP Tavern and hit go. And let’s move away from all the really highly technical networking protocol issues.

    \n\n\n\n

    At some point, it’s going to make a request to a hosting company that needs to be able to say, oh, yes, let’s give them the WP Tavern homepage. In that process there are caching services, firewall products, local security on the networking side of that hosting company. What I feel personally, but also which is what makes products like Black Walls critical is, detect and defend as far away from the website as possible.

    \n\n\n\n

    So if there are a million bots coming at you, get them before they even hit the hosting company’s infrastructure. Some will always sneak through because it’s a battle that’s just never ending and, you’re going to keep learning and fighting and learning and fighting. Mitigate the risks as close to the bad actor, and as far away from the site as possible. So, mitigate, mitigate, mitigate, mitigate, mitigate. And there are tools and solutions up and down that entire stack.

    \n\n\n\n

    So you’re going to have stuff way before you hit the hosting company. You’re going to have some solutions closer to the hosting company. You’re going to have solutions directly on WordPress. There are security plugins that are running on your install of your site. Those are great. I personally feel that you don’t want to even get that close if you’re a bad actor. Mitigate that problem as quickly, as soon as possible.

    \n\n\n\n

    And even solutions that work at the operating system level, or at least the language level. There are products out there that are constantly monitoring, looking for and mitigating PHP corruption. So, you really don’t want to let everyone have access all the way down to that level, because then you’re already, you will have problems, how to put it nicely. We don’t say bad words on the show.

    \n\n\n\n

    [00:37:53] Nathan Wrigley: So do you sell your product into the WordPress space? So, you know, to freelancers, agencies, or are you more at the hosting level, or is it even more like infrastructure level? So at the router level. So in our case, this sort of physical layer that we were talking about. Is that the kind of place where your products go? I honestly don’t know where your product sits in all of that.

    \n\n\n\n

    [00:38:16] Robert Jacobi: So, if you look at it from a hardware perspective, there’s going to be the end user is going to make request. It’s going to get routed somewhere. We sit between where it’s getting routed and the hosting company. So our goal is to prevent the hosting company from wasting physical resources. Now we need to amp up our service because there’s so much traffic coming in.

    \n\n\n\n

    Now we need to amp up our customer support because more stuff is happening with our virtual machines or hosted infrastructure. So that’s our place in the universe. Get the bad guys before they get to the critical infrastructure.

    \n\n\n\n

    [00:38:51] Nathan Wrigley: And another question, forgive my ignorance. Is Black Wall’s solution, is it software? Is it code that sits on an operating system? Or maybe you even have hardware that sits in the way of things, the packets have to transfer through your hardware and be inspected in a way, like a router might get in the way of those things.

    \n\n\n\n

    [00:39:10] Robert Jacobi: Our secret sauce is that we are software that emulates the hardware that used to be required. So there are hardware companies buy this kind of routing and prevention, traffic mitigation. And we do it on the software side so that you as an agency or MSP, if you’re running a bunch of virtual machines, you can deploy this on your own. Certainly as a hosting company, you can deploy this across your entire enterprise.

    \n\n\n\n

    [00:39:36] Nathan Wrigley: So you are dealing with very technical, the people that purchase from you they’re not me, for example. They are very technical. They’re in the data centers. The sort of technical end of the hosting companies. They understand what I’ve just butchered during this episode.

    \n\n\n\n

    It’s not like a freelancer market. You will not be selling Black Wall as a plugin. You are dealing with, directly with hosting companies and the tech side of those hosting companies.

    \n\n\n\n

    [00:40:01] Robert Jacobi: There’s a wonderful German word called Jein. So yes and no.

    \n\n\n\n

    [00:40:04] Nathan Wrigley: Oh, that is a good word.

    \n\n\n\n

    [00:40:05] Robert Jacobi: For all the Germans listening. You still want to be able to control a lot of times exactly what kind of traffic comes in. You might want to get scraped by AI bots more than someone else does. Or you might want to turn off all scraping if you’re an e-commerce store and you’re worried about people taking your pricing and not allowing you to sell at your level.

    \n\n\n\n

    We’ve had, and are currently reworking our entire WordPress plugin, to enable that end user control of that infrastructure. So it’s not running on your WordPress install, which is great because it’s not taking up resources, filling up your hard drive. But you can control, as an end user, the granularity of the traffic that’s able to access your site.

    \n\n\n\n

    [00:40:45] Nathan Wrigley: Oh, so you have a plugin, so you are reading what the hosting company is doing. You can view it through a GUI on your WordPress website, but you are not actually, it’s nothing to do with your WordPress install. You’re getting the data from your hosting company, and that is another layer away from you. Okay. That’s interesting. I didn’t realise that.

    \n\n\n\n

    [00:41:04] Robert Jacobi: Yes, it empowers all these website owners, agencies, MSPs, to fine tune, for lack of a better term.

    \n\n\n\n

    [00:41:10] Nathan Wrigley: Yeah. And then do you offer a sort of GUI for data breakdown, tables, graphs, charts, and ways to block things that you imagine are suspicious, and alerting and things like that?

    \n\n\n\n

    [00:41:20] Robert Jacobi: Yep, as well as defaults for all sorts of things of course, just to make life easier for folks. You can go and visit our site and get some initial monitoring for your site for free. We enjoy having that as part of just an offering of the reporting and monitoring, you can see it. My traffic has been great, and then all of a sudden you look and it’s oh wait, it’s just been Chat GPT.

    \n\n\n\n

    [00:41:40] Nathan Wrigley: Sad realization that the million visitors that seemed to be going to your excellent article were in fact Chat GPT.

    \n\n\n\n

    [00:41:47] Robert Jacobi: Bots stealing that information.

    \n\n\n\n

    [00:41:49] Nathan Wrigley: Sadly, time has got the better of us. We’re at the time where Robert has to walk away. I know he’s got a hard stop. Firstly, my apologies, dear listener for utterly butchering the OSI model. I’m sure there’s a lot of geeks out there who were just throwing things.

    \n\n\n\n

    [00:42:01] Robert Jacobi: They’re going to kill, but my hope is everyone looks it up, a lazy Sunday afternoon understanding.

    \n\n\n\n

    [00:42:06] Nathan Wrigley: Exactly. And that, really was my capacity to understand it. Doesn’t matter how much more I read it, I will be able to get no more out of it. But an important conversation, and one that we’ve never had before. We never get into the weeds of all of that. It’s always WordPress all the way down.

    \n\n\n\n

    And this is what’s happening before, WordPress gets to put the bits and your screen. So really important and hopefully, like Robert said, it will encourage people to go and have a little look.

    \n\n\n\n

    Robert Jacobi, thank you so much for chatting to me today, and good luck with the new rebranding of BotGuard into Black Wall. I hope that goes well too. Thank you so much.

    \n\n\n\n

    [00:42:39] Robert Jacobi: Thank you Nathan.

    \n
    \n\n\n\n

    On the podcast today we have Robert Jacobi.

    Robert has a long-standing history with the tech and CMS industry, having worked in senior positions at Joomla, Cloudways, Perfect Dashboard, and more. He’s now the Chief Experience Officer at Black Wall, a company formerly known as BotGuard.

    Robert talks with me today about the transition from proprietary systems to open source, and the seven-layer OSI model that underpins the internet. Drawing from his experiences in tech, Robert and I try, and perhaps fail, to break down the complexities of how website traffic is routed over the internet. This is done to try to understand how Black Wall can position itself to mitigate risks before they reach hosting companies infrastructure.

    We also discuss the evolution of bot traffic on the web, where upwards of 10% of internet traffic is identified as malicious. This kind of insight is particularly important for those interested in the security aspect of web hosting and website management.

    We also get into Black Wall’s rebranding journey, and its continued dedication to the WordPress community by participating in events like WordCamp Asia and Europe.

    \n\n\n\n

    If you’ve ever wondered about the unseen layers of internet security and infrastructure, or the strategic moves involved in rebranding a tech company, this episode is for you.

    \n\n\n\n

    Useful links

    \n\n\n\n

    Black Wall (formerly BotGuard)

    \n\n\n\n

    Joomla

    \n\n\n\n

    Cloudways

    \n\n\n\n

    Digital Ocean

    \n\n\n\n

    What is the OSI model? It standardizes how computer networks communicate

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 14:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:29;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:103:\"Do The Woo Community: The Challenges and Wins of Creating a Suite of WordPress Plugins with Steve Burge\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92722\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:102:\"https://dothewoo.io/the-challenges-and-wins-of-creating-a-suite-of-wordpress-plugins-with-steve-burge/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:183:\"In this episode host Mark Westguard chats with Steve Burge, founder of PublishPress, discussing their journeys, the evolution of WordPress plugins, and strategies for business growth.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 09:26:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:30;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"Gutenberg Times: Source of Truth (WordPress 6.8)\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=38037\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:57:\"https://gutenbergtimes.com/source-of-truth-wordpress-6-8/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:51232:\"

    Ahead of WordPress 6.8 Beta release and in absence of Anne McCarthy, we publish the Source of Truth a second time on the Gutenberg Times.

    \n\n\n\n

    With me, I mean all the collaborators on this post: Krupal Lakhia, Justin Tadlock, Jonathan Bossenger, and JuanMa Garrido.

    \n\n\n\n

    Changelog

    \n\n\n\n

    Any changes will be cataloged here as the release goes on. The links below are all anchor links to the respective sections in this post.

    \n\n\n\n

    Updates March 26, 2025

    \n\n\n\n

    Accessibility Improvements in WordPress 6.8

    \n\n\n\n

    Updates March 25, 2025

    \n\n\n\n\n\n\n\n

    If you find missing features, please ping me on WPSlack or DM on Bluesky (@gutenbertimes.com)

    \n\n\n\n

    Important note/guidelines

    \n\n\n\n

    Please do not copy and paste what is in this post since this will be shared with many people. This should be used to inspire your own content and to ensure that you have the best information about this release. If you do copy and paste, keep in mind that others might do the same, opening the door for some awkwardness around duplicated content out on the web. 

    \n\n\n\n
      \n
    • Each item has been tagged using best guesses with different high level labels so that you can more readily see at a glance who is likely to be most impacted.
    • \n\n\n\n
    • Each item has a high-level description, visuals (if relevant), and key resources if you would like to learn more.
    • \n
    \n\n\n\n

    Overview 

    \n\n\n\n

    Note: As always, what’s shared here is being actively pursued, but doesn’t necessarily mean each will make it into the final release of WordPress 6.8.

    \n\n\n\n

    WordPress 6.8 is set to be released on April 15th, 2025. This release continues refining foundational features introduced in previous versions, focusing on improving data views, query loops, and block interactions. It introduces a more streamlined design experience with a Zoom Out editing approach, expanded style controls, and enhanced typography options. API developments, including the Block Hooks and Interactivity API, aim to enhance extensibility, while speculative loading integration and performance optimizations seek to improve site speed. Accessibility improvements and ongoing support for PHP 8.x ensure WordPress remains user-friendly and forward-compatible.

    \n\n\n\n

    Of note, this release includes Gutenberg 19.4 – 20.4.

    \n\n\n\n

    Important links:

    \n\n\n\n\n\n\n\n

    6.8 assets: 

    \n\n\n\n

    In this Google Drive folder you can view all assets used in this document.

    \n\n\n\n

    Tags

    \n\n\n\n

    To make this document easier to navigate based on specific audiences, the following tags are used liberally: 

    \n\n\n\n

    [end user]: end user focus. 

    \n\n\n\n

    [theme author]: block or classic theme author. 

    \n\n\n\n

    [plugin author]: plugin author, whether block or otherwise.

    \n\n\n\n

    [developer]: catch-all term for more technical folks. 

    \n\n\n\n

    [site admin]: this includes a “builder” type. 

    \n\n\n\n

    [enterprise]: specific items that would be of interest to or particularly impact enterprise-level folks

    \n\n\n\n

    If no tags are listed, it’s because the impact is broad enough to impact everyone equally. 

    \n\n\n\n\n\n\n\n

    Priority items for 6.8

    \n\n\n\n

    Global Styles available on the main site editor sidebar

    \n\n\n\n

    [theme author] [site admin]

    \n\n\n\n

    The Site Editor sidebar is getting increasingly powerful, serving as the entry point to manage all things on your site. Until this version, the Styles panel offered limited style settings, focusing on style variations, color palettes, and typographies. WordPress 6.8 changes this by introducing a full-fledged Global Styles panel in its place, giving users site-wide granular control of styles at the top level.

    \n\n\n\n\"Site\n\n\n\n

    Swifter hiding and showing the template

    \n\n\n\n

    [theme author][site admin]

    \n\n\n\n

    Switching between editing your site templates and content pages should be as smooth and seamless as possible; sometimes, you need to focus on the post content and hide the rest of the template. This was previously possible in the post settings, but now it is much easier thanks to the Show template toggle directly on the preview dropdown in the top toolbar.

    \n\n\n\n \n
    \n \n \n \n \n\n\n

    The new update in WordPress allows developers to set how the block editor displays content based on the type of post. This means you can now customize the editor’s default behavior by adding specific settings to a post type’s configuration. (69286).

    \n\n\n\n

    Style Book

    \n\n\n\n

    [theme author][site admin]

    \n\n\n\n

    The Style Book provides a comprehensive overview of your site’s colors, typography, and block styles in an organized layout. Each block example and style group is labeled, making it easy to preview and understand your theme’s current design settings.  

    \n\n\n\n
    \n

    Think of it as if your theme threw a party, and all the design elements showed up wearing name tags. ?

    \n\n\n\n

    Ramon Dodd, release lead of Gutenberg 19.9 

    \n
    \n\n\n\n

    The Style Book can be accessed in two ways. The first option is via the Styles menu item in the left sidebar. The second option is available when editing theme elements via the right Styles sidebar. This was already available in WordPress 6.7. 

    \n\n\n\n

    With WordPress 6.8, opening the Style Book from the left sidebar Styles menu shows subsets of blocks and makes them available for site wide editing. 

    \n\n\n\n

    When you click on Typography you can preview all text-related blocks, and adjust options and settings. You can preview and modify specific blocks via the Blocks option. 

    \n\n\n\n

    The Style Book also received some performance improvements to ensure a more fluid user experience. 

    \n\n\n\n
      \n
    • Give the Style Book its own route so it can be linked to directly (67811).
    • \n\n\n\n
    • Scroll to top at the styles root (67605).
    • \n\n\n\n
    • Try splitting the Style Book into sections (68071).
    • \n
    \n\n\n\n \n
    \n \n \n \n \n\n\n

    For classic themes that support the Style Book, site patterns have been relocated to Appearance > Design > Patterns, consolidating all design-related functionality from the Site Editor into one place. Previously, patterns were listed under Appearance > Patterns.

    \n\n\n\n

    Support is available for classic themes that either support editor styles via add_theme_support( ‘editor-styles’ ) or have a theme.json file (66851).

    \n\n\n\n

    Zoom Out View

    \n\n\n\n

    [theme author][site admin][end user]

    \n\n\n\n

    In Zoom Out view, users can now apply different section styles and designs directly from the toolbar, cycling through them and inspecting them in the context of the rest of the page. This enhancement streamlines the decision-making and production process (67140). 

    \n\n\n\n\"change\n\n\n\n

    The Block options on the block toolbar only lists Copy, Cut, Duplicate, and Delete for sections in Zoom Out view (67279).

    \n\n\n\n\"Zoom\n\n\n\n

    In addition to the added Zoom Out icon in the toolbar, users can also invoke Zoom Out view via the Keyboard shortcut Shift command + 0 on a Mac and Shift + Ctrl + 0 on Windows (66400). The shortcut has also been added to the Keyboard shortcuts list. 

    \n\n\n\n\"keyboard\n\n\n\n

    Design Tools

    \n\n\n\n

    [end user][theme author] [site admin]

    \n\n\n\n

    Design Tools offers increasingly refined tools for visual customization. When it comes to border and spacing support, the block editor itself provides granular controls within individual blocks, allowing users to define border widths, styles, colors, and radii, as well as precise padding and margin adjustments. These controls facilitate the creation of visually distinct elements and well-structured layouts. The work for WordPress 6.6 and 6.7 was continued for WordPress 6.8 to provide all design tools to all blocks, where possible. 

    \n\n\n\n

    In this release, the following blocks received border support

    \n\n\n\n
      \n
    • Comments (66354),
    • \n\n\n\n
    • Comments Link (68450),
    • \n\n\n\n
    • Comments Count (68223),
    • \n\n\n\n
    • Latest Posts (66353),
    • \n\n\n\n
    • Page List, also received color and spacing support (66385),
    • \n\n\n\n
    • Content, also spacing support (66366),
    • \n\n\n\n
    • RSS, also spacing support (66411),
    • \n\n\n\n
    • Archives, also color support (63400), (68685), and
    • \n\n\n\n
    • Query Total (68323)
    • \n
    \n\n\n\n

    Beyond those, the Category block supports color options as well (68686).

    \n\n\n\n

    For the Post Content block, the color support via the sidebar Design Tools has been brought up to feature parity with the options available via theme.json. Now users and designers can adjust colors for all heading levels in addition to text, background, and link (67783).

    \n\n\n\n\"post\n\n\n\n

    Another user experience improvement can be found in the list of fonts: Each font family is now previewed in the font picker dropdown and gives users a better indication as to what the font will look like (67118).

    \n\n\n\n\"preview\n\n\n\n

    The Roster of design tools per block (WordPress 6.8 edition) gives you a complete overview of the available Design Tools per core block. 

    \n\n\n\n

    Updated Core Blocks 

    \n\n\n\n

    Buttons 

    \n\n\n\n

    [theme author][developer]

    \n\n\n\n

    WordPress 6.8 adds a small piece of code (`box-sizing: border-box;`) to the styling of buttons. Imagine you’re putting a picture in a frame. You want the picture to fit nicely within the frame’s borders. That’s what `box-sizing: border-box;` does for buttons (and other elements) on a website. It tells the browser to include the border and padding of an element in its total width and height (65716)

    \n\n\n\n

    Cover Block

    \n\n\n\n

    [theme author][site admin][end user]

    \n\n\n\n

    Images used as backgrounds in Cover blocks now come with resolution controls so that you can change their sizes. This works with both an uploaded background image or the already assigned featured image. This adds to the more granular control for designers and theme developers. (#67273), (62926).

    \n\n\n\n

    Details block

    \n\n\n\n

    [theme author][site admin][developer][end user]

    \n\n\n\n

    In WordPress 6.8 the Details block is now more flexible to use and has received some quality-of-life updates: 

    \n\n\n\n

    The addition of the name attributes field in the Advanced panel of the block’s settings. This allows a group of Details blocks to be connected and styled if needed.  (56971

    \n\n\n\n\"Details\n\n\n\n\"shows\n\n\n\n

    The summary content is used as the label in the List View which makes it quicker to identify the block and allows for easier reorganizing of content (67217). 

    \n\n\n\n\"Shows\n\n\n\n

    The Details block also receives anchor support via the Advanced panel, allowing users to create anchor links to specific Details blocks. 

    \n\n\n\n

    With the help of the allowedBlocks attributes, developers can now control what blocks content creators can use in a Details block. (68489). 

    \n\n\n\n

    File block

    \n\n\n\n

    [end user][site admin]

    \n\n\n\n

    Allow content-only editing, which gives users the ability to update the filename text and download button text (65787).

    \n\n\n\n\n\n\n\n

    [end user][site admin]

    \n\n\n\n

    Each image in a Gallery block shows multiple options on how a link should behave and how a visitor to the site can interact with the images. For WordPress 6.8 contributors added Expand to click to the Gallery’s toolbar to open all images in a light box effect, with one click. The option is available from the Link toolbar button (64014). 

    \n\n\n\n\"Gallery\n\n\n\n

    Image Blocks and handling

    \n\n\n\n

    [end user][site admin]

    \n\n\n\n

    The outcome of the Image manipulation methods are now better communicated in the block editor. The success notices are displayed at the bottom of the editor. The notices also come with a handy Undo link to revert to the original if necessary (67314, 67312).

    \n\n\n\n\"shows\n\n\n\n\n\n\n\n

    [theme author][site admin][end user]

    \n\n\n\n

    Featured images offer a nice touch in external previews, making them more attractive to potential readers. However, it can be easy to forget to set one! To help set featured images more easily, Image blocks now offer a dropdown action to directly set them as the featured image of the post or page containing the block (65896).

    \n\n\n\n\"Displays\n\n\n\n

    Another WordPress 6.8 update also changes how the Image block handles those cool overlay styles aka filters (like a semi-transparent color wash) designers might add on top of images. It’s making the way these styles are applied more efficient and reliable. Details on CSS changes can be found in the PR (67788). 

    \n\n\n\n

    Navigation Block

    \n\n\n\n

    [end user][site admin][theme author]

    \n\n\n\n

    The theme of polish also continues for the Navigation Block. Menu names are now displayed in the List View for easier orientation and, for faster design considerations, a Clear option was added to the color picker(68446)(68454). 

    \n\n\n\n

    These updates enabled non-interactive formats for the block, and users can now use the choices from the dropdown menu in the block’s tools bar, like Highlight, Strikethrough, or Inline image (67585). 

    \n\n\n\n

    Additional update to the Navigation Block

    \n\n\n\n
      \n
    • Customizable Post Status Visibility in Navigation Block Links (63181) (see dev note).
    • \n\n\n\n
    • Consistent Class Application for Navigation Block Menu Items (67169) (see dev note)
    • \n\n\n\n
    • Consistent Markup for Navigation Item Labels (67198) (see dev note)
    • \n
    \n\n\n\n

    Query Loop Block

    \n\n\n\n

    [site admin][theme author][end user]

    \n\n\n\n

    For Pages, content creators will find two additional sorting options: Ascending by order and Descending by order, which allows for a display following the page attribute page_order (68781). 

    \n\n\n\n \n
    \n \n \n \n \n\n\n

    Looking to replace your Query Loop block’s design? The Query Loop block patterns have been relocated from a modal to a dropdown. It’s still in the block toolbar, now under Change design (66993).

    \n\n\n\n\"new\n\n\n\n

    The Query Loop block now has a new option to ignore sticky posts. When selected, the Query Loop block ignores whether a post has the sticky option enabled. When used, all posts show based on the ORDER BY preferences selected without taking the sticky status into account. (66221) (69057)

    \n\n\n\n\"query\n\n\n\n

    The Query Loop block can get pages from all levels. Contributors added an attribute to just display the top level pages. Currently, users can only set “parents”: [0], via the code editor. There’s no easy option in the user interface yet.

    \n\n\n\nExample of Test Query\n
    <!-- wp:query {\"queryId\":1,\"query\":{\"perPage\":10,\"pages\":0,\"offset\":0,\"postType\":\"page\",\"order\":\"desc\",\"orderBy\":\"date\",\"author\":\"\",\"search\":\"\",\"exclude\":[],\"sticky\":\"\",\"inherit\":false,\"parents\":[0],\"format\":[]}} -->\n<div class=\"wp-block-query\"><!-- wp:post-template -->\n<!-- wp:post-title /-->\n\n<!-- wp:post-date /-->\n<!-- /wp:post-template -->\n\n<!-- wp:query-pagination -->\n<!-- wp:query-pagination-previous /-->\n\n<!-- wp:query-pagination-numbers /-->\n\n<!-- wp:query-pagination-next /-->\n<!-- /wp:query-pagination -->\n\n<!-- wp:query-no-results -->\n<!-- wp:paragraph {\"placeholder\":\"Add text or blocks that will display when a query returns no results.\"} -->\n<p></p>\n<!-- /wp:paragraph -->\n<!-- /wp:query-no-results --></div>\n<!-- /wp:query -->
    \n\n\n\n\n

    Introducing the Query Total block

    \n\n\n\n

    [theme author][site admin][end user]

    \n\n\n\n

    You know how many results are in your queries, but do your site’s readers? The new Query Total block is here to help.When added to a Query Loop block, the Query Total block displays the number of results the query has returned, or, alternatively, the current range in a set of paginated results. Out of the box, the new block shows its border controls (68150)(68323) (68507).

    \n\n\n\n\"Query\n\n\n\n

    Separator Block

    \n\n\n\n

    [theme author][developer][site admin]

    \n\n\n\n

    Now designers and creators can choose between a <div> or <hr> tag, opening up more styling possibilities for this block. The setting to switch can be found under Advanced > HTML Element. The transformation option now also includes the Spacer block. (67530) (66230)

    \n\n\n\n\"div\n\n\n\n

    Social Icons block updates

    \n\n\n\n

    [end user][site admin]

    \n\n\n\n

    The social icons block shipped with the option to add a Discord icon, received a Clear button to reset color options, and received contentOnly support. To add a URL to the icons, you now only need to press the arrow key once. This certainly streamlines the content creation process. (64883) (68564) (66622)

    \n\n\n\n\"Social\n\n\n\n

    Editor improvements 

    \n\n\n\n

    [end user][site admin][theme author]

    \n\n\n\n

    The Editor screens received a few helpful improvements in WordPress 6.8. 

    \n\n\n\n

    Reset 

    \n\n\n\n

    Reset colors for blocks and global styles in the editor with a single click thanks to the inline reset button added to all color controls (#67116). The Shadow panel and the Duotone settings also received a very handy reset button. Instead of the need to remove settings one at a time, designers can quickly start over. (66722) (68981)

    \n\n\n\n

    Cut

    \n\n\n\n

    The Block Options menu now also lists a Cut action together with the Copy action in the dropdown menu. (68554)

    \n\n\n\n\"Cut\n\n\n\n

    New Commands

    \n\n\n\n

    Two new commands were added to the Command Palette in the Site editor: 

    \n\n\n\n
      \n
    • The Add new page command creates a new page from anywhere in the site editor and speeds up the content creation process (65476). 
    • \n\n\n\n
    • The Open Site Editor command offers a one click navigation to the site editor, from the page or post editor screens accessed via the WP-Admin menu (66722).
    • \n
    \n\n\n\n

    Starter Content

    \n\n\n\n

    With WordPress 6.8, a new pattern category is available, called Starter Content. It lists the page layouts that are otherwise available via the New Page modal. If a user has disabled the starter content  pop-up when creating new pages, this category surfaces the page layouts, should they be needed. (66819) The Inserter now also always shows all the available patterns in a list. (65611).

    \n\n\n\n \n
    \n \n \n \n \n\n\n

    Patterns in folders

    \n\n\n\n

    [theme author][site admin] [developer]

    \n\n\n\n

    With WordPress 6.8 developer can now use sub-folders to organize patterns for their themes. For example, all header patterns are added to the “header” folder, all footer patterns into the “footer” folder, testimonials patterns into the “testimonials” folder, and so on. (62378)

    \n\n\n\n

    Data Views updates 

    \n\n\n\n

    This release also contains quite a few Data Views improvements:

    \n\n\n\n

    A user can modify the amount of whitespace that is displayed per row on three levels: comfortable, balanced, and compact.  (67170)  

    \n\n\n\n

    You can now set your site’s homepage from the Site Editor via the page’s actions menu (#65426). This is the equivalent of updating the Reading Settings in Settings > Reading. Under Pages in the editor, find the page you’d like to set as your homepage, click on the action menu, and select Set as homepage.

    \n\n\n\n

    All delete actions now show a Confirm to delete modal, to safeguard against accidental removal of templates, patterns, or pages. (67824)

    \n\n\n\n

    Here is a list of PRs with more Data View changes: 

    \n\n\n\n
      \n
    • Add: Media field changing UI to Data views and content preview field to posts and pages. (67278)
    • \n\n\n\n
    • Add combined fields support. (65399)
    • \n\n\n\n
    • DataViews Fields API: Default getValueFromId supports nested objects. (66890)
    • \n\n\n\n
    • DataViews list layout: Hide actions menu when there is only one action and is primary. (67015)
    • \n\n\n\n
    • DataViews table layout: Hide actions menu when there is only one action and is primary. (67020)
    • \n\n\n\n
    • DataViews: Expand configuration dropdown on mobile. (67715)
    • \n\n\n\n
    • DataViews configuration dropdown: Remove style overrides. (65373)
    • \n\n\n\n
    • Update “hidden” icon to be clearer, and invert logic as used in DataViews. (65914)
    • \n
    \n\n\n\n

    API iterations

    \n\n\n\n

    [developer][plugin author][enterprise]

    \n\n\n\n

    New and updated functions and filters

    \n\n\n\n

    The new filter should load block assets provides a way for classic themes to use `wp-block-library` even when loading block assets only for blocks that actually render on a page. (61965). The dev note: New filter should_ load_block_ assets_on_demand in 6.8 has the details.

    \n\n\n\n

    WordPress 6.8 introduces a new function wp_register_block_ types_from_ metadata_collection(), which allows plugins to register multiple block types with a single function call. (62267) See also Dev Note More efficient block type registration in 6.8

    \n\n\n\n

    The block registration API now enforces the blockType.parent setting to be an array. The editor will now display a warning if it’s a different type, such as a `string`. (66250).

    \n\n\n\n

    Also consult the post Updates to user-interface components in WordPress 6.8

    \n\n\n\n

    Interactivity API

    \n\n\n\n

    The Interactivity API in WordPress 6.8 introduces an improved wp-each directive, making it more flexible and reliable. Previously, it could only loop through arrays or objects with a .map method. Now, it supports any iterable value, including strings, arrays, maps, sets, and generator functions. Additionally, it can handle undefined or null values by subscribing to changes and updating automatically when the value becomes iterable (67798).

    \n\n\n\n

    The release also brings a set of best practices to WordPress, developers using the Interactivity API and creating their own store might find the Dev Note: Interactivity API best practices in 6.8. particularly interesting, on how to avoid deprecation warnings and future-proof your plugins.

    \n\n\n\n

    This release also introduces the withSyncEvent action wrapper utility to streamline event handling, reducing potential performance bottlenecks (#68097). Details can be found in above linked dev note.

    \n\n\n\n

    Block Hooks API 

    \n\n\n\n

    In WordPress 6.8, work continues on improvements to the Block Hooks API.

    \n\n\n\n

    The Block Hooks API now supports dynamically inserting blocks into post content. (67272) A typical example would be a plugin that provides blocks that can be used in posts and that would like to provide extensibility for those blocks. The Block Hooks API will now also work with Synced Patterns. (68058)

    \n\n\n\n

    Security enhancements

    \n\n\n\n

    Various security-related enhancements made it into WordPress 6.8, the most significant of which is the switch to using bcrypt for password hashing. This includes improvements to the algorithm that’s used for storing application passwords and security keys. The dedicated post WordPress 6.8 will use bcrypt for password hashing covers these changes in detail. You will find a list of all security updates in 6.8 on WordPress Core Trac.

    \n\n\n\n

    Support for Speculative Loading

    \n\n\n\n

    Building upon the success of the Speculative Loading plugin, which has over 40,000 active installations, WordPress 6.8 integrates speculative loading into core. This feature utilizes the Speculation Rules API to prefetch URLs dynamically based on user interaction, aiming to improve performance metrics like Largest Contentful Paint (LCP). The current proposal has a default configuration employing conservative prefetching to ensure safety and compatibility, but feedback is requested on this. Developers have access to filters for customization, allowing adjustments to the speculative loading behavior as needed (#62503). Details are laid out in the Speculative Loading in 6.8 Dev Note.

    \n\n\n\n

    Additional Performance improvements

    \n\n\n\n

    For the WordPress 6.8 release, several key performance improvements have been implemented in the block editor and collectively contribute to a more responsive and efficient editing experience.

    \n\n\n\n
      \n
    • To address performance issues in the site editor when handling navigation blocks with multiple submenu. The isBlockVisibleInTheInserter selector was improved to prevent unnecessary computations, resulting in a more efficient block editor experience (#68898).
    • \n
    \n\n\n\n

    Accessibility improvements

    \n\n\n\n

    WordPress 6.8 includes 26 accessibility improvements. The dev note has all the details: Accessibility Improvements in WordPress 6.8

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 09:16:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:31;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: My Content Journey Leading to Content Sparks\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92890\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"https://dothewoo.io/blog/my-content-journey-leading-to-content-sparks/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:222:\"BobWP reflects on their journey with audio and content creation, from childhood fascination with radios to launching the podcast, Do the Woo. They now introduce a new show, Content Sparks, exploring diverse content topics.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 18 Mar 2025 08:51:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:32;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:97:\"Do The Woo Community: Inside the World of Composable CMS: A Deep Dive with Tom Cranstoun from AEM\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92578\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"https://dothewoo.io/inside-the-world-of-composable-cms-a-deep-dive-with-tom-cranstoun-from-aem/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:379:\"This show is sponsored by… Avalara: providing cloud-based and scalable global tax compliance that is hassle-free, safe and secure plus topped off with enterprise-class security. In this episode of Scaling Enterprise, WP and OSS, join Brad Williams, Tom Willmot, and Karim Marucchi as they dive into the world of enterprise content management system. Special guest […]\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 17 Mar 2025 14:20:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:33;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:119:\"Do The Woo Community: Bridging Innovation and Community with Jessica Lyschik and Jakob Trost at the CloudFest Hackathon\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92934\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:118:\"https://dothewoo.io/bridging-innovation-and-community-with-jessica-lyschik-and-jakob-trost-at-the-cloudfest-hackathon/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:206:\"In this episode of Open Web Conversations, Adam Weeks discusses the CloudFest Hackathon with Greyd\'s Jessica Lyschik and Jakob Trost, exploring innovations, community contributions, and enhancing WordPress.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 17 Mar 2025 12:17:54 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:34;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:67:\"Do The Woo Community: Staying on Top of Things, A Packed RSS Reader\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92628\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:70:\"https://dothewoo.io/blog/staying-on-top-of-things-a-packed-rss-reader/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:157:\"I have a strong appreciation for RSS, highlighting its simplicity, effectiveness in managing content, and preference over cluttered inboxes and social media.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Mon, 17 Mar 2025 10:39:02 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:35;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"Do The Woo Community: CloudFest Hackathon. Behind CMS Freedom with Patricia BT and Dennis Snell\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92906\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:93:\"https://dothewoo.io/cloudfest-hackathon-behind-cms-freedom-with-patricia-bt-and-dennis-snell/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:229:\"Patricia and Dennis discuss their CMS Freedom project at the CloudFest Hackathon, aiming to simplify system transitions and preserve online content. They emphasize teamwork, learning, and the value of contributions beyond coding.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sun, 16 Mar 2025 13:20:32 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:36;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:38:\"Matt: Dalio & Benioff in Singapore\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140704\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:36:\"https://ma.tt/2025/03/dalio-benioff/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:594:\"

    With the world changing so quickly, it’s hard to find alpha, but the best way is by following the brightest thinkers. This CNBC interview with Ray Dalio and Marc Benioff is good, but it’s way better if you go to the livestream about 25 minutes in and see the full discussion without the editing. You hear what these great thinkers actually think, rather than what an editor thought you’d enjoy. A little bit of friction gets you a lot more information.

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 15 Mar 2025 20:46:22 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:37;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:93:\"Gutenberg Times: WordPress 6.8 Dev Notes, WP:25, new Blocks and sites — Weekend Edition 321\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://gutenbergtimes.com/?p=37936\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:71:\"https://gutenbergtimes.com/wordpress-6-8-dev-notes-weekend-edition-321/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:22013:\"

    Hi,

    \n\n\n\n

    This week I will feel a lot of FOMO as I had a chance to attend CloudFest but had to bow out at the last minute, to give my busted knee a rest. My doctor is convinced that I had overdone the walking in Manila and WordCamp Asia. So going to an amusement part and another trade show, would not be wise. Unfortunately, there are no live-streams to participate remotely. ??‍♀️

    \n\n\n\n

    Meanwhile, I have been testing WordPress 6.8 and although there are no new ones, the updates to existing features are amazing and make content creation so much easier. Next week on Tuesday, in time of Beta 3 release, I’ll publish the Source of Truth, while Anne McCarthy is on sabbatical. The release team started to release Dev Notes already. You’ll find the list below.

    \n\n\n\n

    This week, I have many updates again in this edition. Enjoy!

    \n\n\n\n

    Yours, ?
    Birgit

    \n\n\n\n\n\n\n\n

    Tom Willmot, CEO of Human Made posted the WP:25 Recap: The Future of WordPress with links to the recorded session. WP:25 was a virtual conference, hosted by Human Made with some awesome speakers and panels. I wanted to highlight two of them:

    \n\n\n\n

    Tammie Lister speaking on The power of FSE, in which she took the audience “through the incredible transformation Full Site Editing is bringing to WordPress. Tammie made it clear: FSE isn’t just another feature—it’s a fundamental shift in how teams build and manage content.”

    \n\n\n\n

    Mary Hubbard, executive director of WordPress, and Noel Tock chat about what’s next for the world’s favorite CMS in the coming year. WordPress in 2025. “AI is reshaping the way we interact with content, and WordPress is embracing AI in every way, any way that can enhance it, without replacing the human creativity aspect. So I think this right now, we’re at a pivotal point, not just for what it means for open source, but actually, what it means for the project itself.” – Mary Hubbard.

    \n\n\n\n

    You’ll find the other WP:25 sessions on this YouTube Playlist

    \n\n\n\n

    Developing Gutenberg and WordPress

    \n\n\n\n

    WordPress 6.8 release cycle is progressing as schedule to Beta 3 next week. WordPress 6.8 Beta 2 was released this week.

    \n\n\n\n

    And a reminder to Help Test WordPress 6.8 to figure out if all features work as supposed to and report bugs. The instructions provided Krupa Nanda are excellent to get a head start on many things updates in WordPress 6.8

    \n\n\n\n

    The first Dev Notes are now available on the Make Core blog:

    \n\n\n\n\n\n\n\n
    \n

    ?️ Latest episode: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia with special guest Jessica Lyschik.

    \n\n\n\n\"Jessica\n
    \n\n\n\n

    Plugins, Themes, and Tools for #nocode site builders and owners

    \n\n\n\n

    In his latest post, How to disable and lock Gutenberg blocks, Bud Kraus takes you on a deep dive into content governance topic and how to provide guardrails to authors and enforce editorial guidelines for your site. It’s comprehensive coverage of the topic and includes explanation on how UI tools work as well as enforcing block locking with PHP and via theme.json.

    \n\n\n\n
    \n\n\n\n

    ICYMI, After a longer beta period, GenerateBlocks 2.0 was released Mid-February with the aim of providing “fundamental changes to GenerateBlocks with a streamlined and robust system to make building fast and effective sites easier” Kathy Zant wrote in the announcement post Introducing GenerateBlocks 2.0: A New Era for High Performance Websites . The post also provides a migration path from version 1 to version 2 and outlines many changes for the plugin.

    \n\n\n\n
    \n\n\n\n

    Diane and Yann Collet created a great resource at WP Gallery featuring beautiful websites designed with the Gutenberg Block Editor. It’s a fantastic place for inspiration.

    \n\n\n\n\"\"\n\n\n\n

    Twentig also a creation of Diane and Yann Collet, was also updated last month. The plugin is a toolkit designer working on Block Themes and has over 25,000 users. It provides Starter content, more Gutenberg Blocks and hundreds of patterns. You can browse the changelog of the latest version on the Twentig website.

    \n\n\n\n
    \n\n\n\n

    Bhargav (Bunty) Bhandari posted on X (former twitter) about his work on a new block to add LinkedIn-like work experience information to a site. With it, you can showcase professional experience, with option to add a title, company name, description. The plugin is on its way to the WordPress plugin repository, and it might take a few weeks to be released. Meanwhile, you can download it from GitHub repo.

    \n\n\n\n\"\"\n\n\n\n

    Djordje Arsenovic created a Typewriter block, and it is now available in the WordPress plugin repository. Use the block to make text appear on the fronted as it was typed out on the old-fashioned typewriter machine.

    \n\n\n\n

    WordPress 6.8 will be released on April 15, 2025.

    \n\n\n\n

    Theme Development for Full Site Editing and Blocks

    \n\n\n\n

    Is your theme.json getting too big? Iulia Caza, developer at Dekode, built an npm package called Create Theme JSON that lets you split up the theme.json into multiple files in a theme-json folder and the build script assembles it into your theme’s theme.json file, when ready. “It definitely makes development much easier and faster.” Caza wrote on LinkedIn.

    \n\n\n\n
    \n\n\n\n

    Anne Katzeff published a new tutorial on how to add categories to a Block Theme menu and guides you through accessing the menu editor and adding custom links for categories by copying their URLs from the WordPress dashboard. Katzeff also demos the steps in this YouTube video

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    Ryan Welcher worked on a new WordPress block theme for the Block Developer Cookbook during his live stream. You can watch how he creates a new skin for his theme (aka Style variation) and also add different block style variations. Welcher also prompts Cursor AI to make changes. The code is available on this GitHub repository.

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    Joshua Siagia announced the arrival of WindPress – a platform-agnostic Tailwind CSS integration plugin for WordPress that allows you to use the full power of Tailwind CSS within the WordPress ecosystem, streamlining workflows for developers. It supports Tailwind CSS v3 and v4, offers features like autocompletion, HTML-to-native conversion, and class sorting, and ensures lightweight performance with optimized CSS caching. Seamlessly compatible with popular builders like Gutenberg and Bricks, it simplifies customization while maintaining speed. WindPress is ideal for developers seeking efficient Tailwind CSS integration in WordPress projects. It is now available in the WordPress plugin repository: WindPress

    \n\n\n\n

     “Keeping up with Gutenberg – Index 2025” 
    A chronological list of the WordPress Make Blog posts from various teams involved in Gutenberg development: Design, Theme Review Team, Core Editor, Core JS, Core CSS, Test, and Meta team from Jan. 2024 on. Updated by yours truly. The previous years are also available: 2020 | 2021 | 2022 | 2023 | 2024

    \n\n\n\n

    Building Blocks and Tools for the Block editor.

    \n\n\n\n

    Save the date! Nick Diego and Ryan Welcher will demo on March 19th, 2025 How to build incredible WordPress Blocks with Cursor AI on YouTube Live hosted by Jamie Marsland. They will explore the power of AI in crafting exceptional WordPress blocks. In this session, you’ll discover practical techniques, pro tips, and AI-driven tools to enhance your block-building skills and streamline workflows. Whether you’re a developer or looking to expand your WordPress expertise, this is your chance to unlock new possibilities for your WordPress site!

    \n\n\n\n\"\"\n\n\n\n

    Bart Kalisz, JavaScript Engineer at WooCommerce announced in his post WooCommerce Blocks client files relocated to complete monorepo merge. As of March 5, 2025, WooCommerce Blocks client files have moved from plugins/woocommerce-blocks to plugins/woocommerce/client/blocks, completing the monorepo merge initiated in December 2023. This change enhances codebase consistency and repository organization. Developers with existing pull requests need to rebase their branches. End users will not experience any functional differences. The build process remains the same, ensuring a smooth transition.

    \n\n\n\n
    \n\n\n\n

    Do you want to jumpstart adding AI to your site? Felix Arntz has you covered with his plugin AI Services from the WordPress repository. The plugin provides a “central infrastructure that allows other plugins to make use of AI capabilities. It exposes APIs that can be used in various contexts, whether you need to use AI capabilities in server-side or client-side code.” The latest update comes with AI image generation, starting with OpenAI’s DALL-E and Google’s recently published Imagen models! The plugin page also lists a few code examples on how to integrate it using PHP or JavaScript.

    \n\n\n\n
    \n\n\n\n

    Developer Advocates, Brian Coords and Nick Diego were experts on this week’s InstaWP webinar: Building WordPress Plugins with AI with founder Vikas Singhal to “reveal game-changing insights for leveraging AI to build powerful WordPress plugins.” Both developers demo’d their workflow programming with Cursor AI.

    \n\n\n
    \n
    \n
    \n
    \n
    \n\n\n
    \n\n\n\n

    This post Introducing Preview Sites: Pushing the Limits of Collaboration with Studio, Antonio Sejas catches us up on the latest features of Studio, WordPress’s local development tool. “Demo Sites” are now “Preview Sites” with increased storage (2 GB) and more sites allowed (10). Personalized URLs are introduced, and sites remain active for seven days after the last update. These changes enhance collaboration and testing for Studio users.

    \n\n\n\n
    \n\n\n\n

    Geoff Graham built Baseline Status in a WordPress Block and published a blog post about his approach, from scaffolding, settings, supports, rendering front and back end and styling. The plugin is available on the WordPress repository
    Baseline Status

    \n\n\n\n\"\"\n\n\n\n

    Need a plugin .zip from Gutenberg’s master branch?
    Gutenberg Times provides daily build for testing and review.

    \n\n\n\n

    Now also available via WordPress Playground. There is no need for a test site locally or on a server. Have you been using it? Email me with your experience

    \n\n\n\n

    \"GitHub

    \n\n\n\n

    Questions? Suggestions? Ideas?
    Don’t hesitate to send them via email or
    send me a message on WordPress Slack or Twitter @bph.

    \n\n\n\n
    \n\n\n\n

    For questions to be answered on the Gutenberg Changelog,
    send them to changelog@gutenbergtimes.com

    \n\n\n\n
    \n\n\n\n

    Featured Image: Wasserburg am Inn – Photo by Birgit Pauli-Haack

    \n\n\n\n
    \n\n\n\n

    Don’t want to miss the next Weekend Edition?

    \n\n\n

    We hate spam, too, and won’t give your email address to anyone
    except Mailchimp to send out our Weekend Edition

    Thanks for subscribing.
    \n\n\n
    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 15 Mar 2025 17:15:30 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:38;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"Do The Woo Community: Do the Woo Friday Shares, March 14, 2025 v10\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92817\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:64:\"https://dothewoo.io/blog/do-the-woo-friday-shares-march-14-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:45:\"This weeks curated shares from the community.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 14 Mar 2025 10:28:37 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:39;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:55:\"Gravatar: SEO-Friendly Author Bio Pages: Essential Tips\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=2849\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://blog.gravatar.com/2025/03/13/author-seo/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:20769:\"

    If you’re an author, chances are you’ve come across terms like E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness). These concepts are critical for improving your visibility in search engine results, but putting them into action can feel like a daunting puzzle. Whether you’re a book author, a blogger, or someone with a diverse portfolio of written work, creating a strong web presence is essential to establishing your authority.

    \n\n\n\n

    Author SEO goes beyond just writing great content – it involves technical elements like schema markup and consistent author profiles to signal credibility to search engines. But how do you bring all these moving parts together to create an effective strategy?

    \n\n\n\n

    In this guide, we’ll explore actionable steps to optimize your author bio pages and build a consistent online presence. From Gravatar integration to schema markup, these techniques will help you strengthen your E-E-A-T signals and achieve better search rankings. 

    \n\n\n\n

    Building author E-E-A-T through optimized bio pages

    \n\n\n\n

    Establishing E-E-A-T is essential for authors striving to improve their visibility online. According to Google’s Search Quality Rater Guidelines, high E-E-A-T pages are deemed more trustworthy, which can directly impact rankings.

    \n\n\n\n

    Your author bio page is a prime opportunity to strengthen your position. Here’s how to optimize each component:

    \n\n\n\n
      \n
    • Experience: Share milestones like years of writing, notable projects, or awards. This helps showcase your firsthand knowledge, making your expertise relatable and credible.
    • \n\n\n\n
    • Expertise: Highlight qualifications such as degrees, certifications, or industry recognition. These reinforce your authority on your subject matter.
    • \n\n\n\n
    • Authoritativeness: Link to your published work on reputable platforms, which positions you as a trusted source. Tools like Gravatar ensure your online presence remains consistent.
    • \n\n\n\n
    • Trustworthiness: Build trust by including testimonials or reviews. A professional headshot and clear contact details further enhance reliability.
    • \n
    \n\n\n\n

    Keep in mind that an optimized bio page is more than just an introduction to your readers – it signals your credibility and authority to search engines and readers alike. 

    \n\n\n\n

    Now that you have a strong bio page in place, the next step is integrating tools like Gravatar to maintain consistency across all platforms. 

    \n\n\n\n

    Creating consistent author profiles with Gravatar

    \n\n\n\n\"Gravatar\n\n\n\n

    Being consistent across all your digital profiles can help you build a solid and trustworthy online presence, and Gravatar simplifies this process. This platform links your profile picture and key details – like your name, bio, and website – to your email address, ensuring that your information is automatically updated across supported websites.

    \n\n\n\n\"Example\n\n\n\n

    For authors, Gravatar eliminates the hassle of managing profiles manually on multiple platforms. Whether it’s a WordPress blog, an online portfolio, or a comment section, Gravatar ensures your professional identity remains uniform, building trust and reinforcing your E-E-A-T.

    \n\n\n\n

    Setting up Gravatar is straightforward: Create an account, upload a professional photo, and fill in your details. 

    \n\n\n\n\"Example\n\n\n\n

    From there, Gravatar takes care of the rest, providing flawless integration and a polished, consistent online presence. This not only saves time but also enhances your credibility, making it an essential tool for any author looking to strengthen and monitor their digital footprint.

    \n\n\n\n\"\"\n\n\n\n

    WordPress integration and cross-platform syncing

    \n\n\n\n

    According to W3Techs, “WordPress is used by 62.0% of all the websites whose content management system we know. This is 43.6% of all websites.” So, it’s no wonder that so many authors, writers, and contributors go with WordPress as their platform of choice. 

    \n\n\n\n

    Gravatar integrates perfectly with WordPress, automatically displaying your avatar across the WordPress ecosystem wherever your email address is linked, such as in blog posts, comments, or author pages. This standard integration helps maintain a consistent online identity with minimal effort.

    \n\n\n\n

    However, for authors looking to go beyond the basics, the Gravatar Enhanced plugin offers additional features. Unlike the default Gravatar setup, which only pulls the profile picture, this plugin provides greater customization options, allowing you to display more detailed author profiles, including links to your social media and published works. 

    \n\n\n\n\"Example\n\n\n\n

    You can also control how your Gravatar appears on various sections of your WordPress site, such as post bylines and author widgets.

    \n\n\n\n

    On top of that, with Gravatar you can create multiple profiles each linked to a different email address, and you can pull any of these easily with the Gravatar Enhanced plugin. This is invaluable if you write across different genres or target audiences (more on that in a second). 

    \n\n\n\n

    If you’re tech-savvy or have the budget to work with a developer, and have many people contributing to your website, you can also take advantage of the Gravatar REST API. This gives you more flexibility and granular control over exactly what data gets imported and displayed on the website. It also makes it much easier for guest authors to contribute – their Gravatar profile information will be automatically imported. 

    \n\n\n\n

    This applies to every single platform that has integrated Gravatar, including GitHub, Slack, OpenAI, Figma, Zapier, and many more. 

    \n\n\n\n\"Logos\n\n\n\n

    Managing multiple author identities

    \n\n\n\n

    For authors who write across different genres or target diverse audiences, managing multiple online identities can be a challenge. Gravatar simplifies this with its ability to associate multiple email addresses with unique profiles. Each profile can feature a distinct avatar, bio, and contact details, allowing you to tailor your online presence to specific audiences or platforms.

    \n\n\n\n

    To use a different profile with Gravatar Enhanced , you just need to put the email address corresponding to that profile. 

    \n\n\n\n\"Importing\n\n\n\n

    For instance, if you write technical guides under one pen name and fiction under another, Gravatar ensures your profiles stay separate and relevant. By linking each email to a unique profile, you maintain consistency and professionalism for both identities without any crossover confusion.

    \n\n\n\n

    This flexibility helps you maintain your E-E-A-T (Experience, Expertise, Authoritativeness, Trustworthiness) across different niches, ensuring that each identity aligns with its intended audience while reinforcing your credibility.

    \n\n\n\n

    Technical SEO essentials for author pages

    \n\n\n\n

    Optimizing the technical side of your author pages can help your site rank well in search engine results and provide an easy and memorable user experience. Here are some key areas to focus on:

    \n\n\n\n

    Page speed and mobile responsiveness

    \n\n\n\n

    Fast-loading, mobile-friendly pages are a must. Use tools like Google PageSpeed Insights to identify performance bottlenecks and ensure your site is accessible on all devices. Reasons for a slow website include: 

    \n\n\n\n
      \n
    • Large image files – High-resolution images that aren’t optimized can significantly increase load times.
    • \n\n\n\n
    • Too many HTTP requests – Each image, script, or CSS file requires a separate HTTP request, slowing down the site.
    • \n\n\n\n
    • Unoptimized JavaScript and CSS – Heavy or poorly written scripts can delay rendering, especially if they aren’t minified or compressed.
    • \n\n\n\n
    • Lack of browser caching – Without caching, users have to download site elements repeatedly, even if they’ve visited before.
    • \n\n\n\n
    • Slow server response time – Poor hosting or high traffic can lead to delays in how quickly the server processes requests.
    • \n\n\n\n
    • Bloated plugins – Excessive or poorly coded plugins can slow down the backend and frontend of the site.
    • \n\n\n\n
    • Unoptimized database – A database cluttered with unnecessary data, like old revisions or spam comments, can slow query times.
    • \n\n\n\n
    • High traffic without proper resources – A sudden spike in visitors can overwhelm your hosting plan, leading to slowdowns.
    • \n
    \n\n\n\n

    Whatever the issue is, make sure you fix it on time since most users access the web via mobile, a responsive, clutter-free design helps with usability and improves your search rankings. 

    \n\n\n\n

    Schema markup for author pages

    \n\n\n\n

    Implementing schema markup helps search engines understand your content better. Use the “Author” schema to display rich snippets, such as your name, bio, and image, directly in search results. 

    \n\n\n\n\"Example\n\n\n\n

    Canonical URLs and structured navigation

    \n\n\n\n

    Ensure each author page has a unique, canonical URL to prevent duplicate content issues. Structured navigation, including breadcrumbs, helps search engines and users understand your site’s hierarchy, improving crawlability and the user experience. They are also essential for screen readers and users who only use keyboards to navigate. 

    \n\n\n\n

    Secure and accessible design

    \n\n\n\n

    A secure site (HTTPS) is critical for building trust with both users and search engines. Additionally, ensure your content is accessible to all users, including those with disabilities, by adhering to Web Content Accessibility Guidelines (WCAG). Here are some of the main areas you need to consider: 

    \n\n\n\n
      \n
    • If you have a shop for your books, events, or services, make sure that users can successfully complete a purchase with any assistive technology, including screen readers and keyboard navigation. 
    • \n\n\n\n
    • Create functional and descriptive alt text for your images and files. Users should be able to understand the main idea behind each image and if it’s only decorative, just leave the alt text tag empty. 
    • \n\n\n\n
    • Make sure your link texts make sense – “click here to book a spot for my book signing” is much better than just “click here.”
    • \n\n\n\n
    • Use accessible fonts and ensure that users can scale text up to 200% without the loss of functionality and content. 
    • \n
    \n\n\n\n

    Meta descriptions and optimized headings

    \n\n\n\n

    Every author page should have a compelling meta description and properly structured headings (H1, H2, etc.). These elements improve click-through rates and help search engines identify the page’s main focus. They are also essential for accessibility: The meta descriptions and titles are what the assistive technologies will read out loud to people who use them and want to search online. 

    \n\n\n\n

    Implementing author schema markup

    \n\n\n\n

    Schema markup helps search engines understand the structure and content of your author pages, boosting visibility in search results. By implementing author-specific schema, you can enhance your E-E-A-T signals, making your pages more appealing to both users and search engines.

    \n\n\n\n\"Example\n\n\n\n

    For blog authors, use the Article schema to mark up your blog posts, including details like the headline, author name, and publication date. For book authors, the Book schema is ideal. It highlights properties like the book title, ISBN, and author information, making your work easier to find​.

    \n\n\n\n\"Example\n\n\n\n

    You can then implement the schema on your website with the Google’s Structured Data Markup Helper or WordPress plugins like Rank Math and Yoast. You can tag relevant sections of your page, such as your name, bio, and links to your published works, and generate JSON-LD code for seamless integration​. 

    \n\n\n\n

    To get the most out of schema markup, make sure you: 

    \n\n\n\n
      \n
    • Include key details: Author name, profile image, and links to verified profiles.
    • \n\n\n\n
    • Stay consistent across platforms by syncing with Gravatar, which adds a professional touch to your author bio.
    • \n\n\n\n
    • Validate your schema with Google’s Rich Results Test to check for errors and ensure all required fields are present.
    • \n
    \n\n\n\n

    Measuring and improving author page performance

    \n\n\n\n

    Optimizing your author pages doesn’t stop at implementation – you need to measure their performance and refine them over time. Here’s how:

    \n\n\n\n

    Key metrics to track

    \n\n\n\n
      \n
    • Organic traffic – Use tools like Google Analytics to monitor how many users find your author pages through search.
    • \n\n\n\n
    • Bounce rate – A high bounce rate could indicate poor user experience or irrelevant content.
    • \n\n\n\n
    • Time on page – Longer time spent suggests that visitors find your content engaging and valuable.
    • \n\n\n\n
    • Search rankings – Track keyword rankings for your name, book titles, or blog posts using tools like Google Search Console, Ahrefs, or SEMrush.
    • \n
    \n\n\n\n

    Improving author page performance

    \n\n\n\n
      \n
    • Enhance content – Ensure your bio includes relevant keywords, links to authoritative publications, and an engaging summary of your work.
    • \n\n\n\n
    • Optimize for mobile – Many visitors will access your page from mobile devices, so ensure your layout is responsive and user-friendly.
    • \n\n\n\n
    • Leverage internal linking – Link to related blog posts, books, or interviews to keep users engaged and improve site navigation.
    • \n\n\n\n
    • Update regularly – Add new publications, awards, or noteworthy achievements to keep your page fresh and relevant.
    • \n
    \n\n\n\n

    Use heatmaps and session recordings

    \n\n\n\n

    Heatmaps (e.g., from tools like Hotjar) show which parts of your page users interact with most, helping you refine layout and content. 

    \n\n\n\n\"Example\n\n\n\n

    Session recordings provide deeper insights into user behavior, highlighting any obstacles they encounter.

    \n\n\n\n

    Enhance your author authority now

    \n\n\n\n

    As AI-generated content continues to flood the web, a verified and consistent author profile is the best strategy to help you stand out and maintain reader trust. A strong, recognizable presence builds credibility and helps search engines and audiences alike see you as a reliable source.

    \n\n\n\n

    With the tips outlined in this article, you’ll lay a solid foundation for optimizing your author website. Start with a polished bio, leverage schema markup for better search visibility, and use Gravatar to maintain a consistent online identity. With its “Update Once, Sync Everywhere” functionality, Gravatar ensures your avatar and profile details are synchronized across platforms, saving you time while keeping your branding professional and cohesive.

    \n\n\n\n

    The key to successful author SEO lies in the trinity of a professional bio and website, technical SEO, and an up-to-date Gravatar profile. Ready to boost your authority? Learn more about Gravatar today!

    \n\n\n\n\"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 13 Mar 2025 18:49:01 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:40;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:62:\"Do The Woo Community: Meet Some of Our Hosts at CloudFest 2025\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92709\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"https://dothewoo.io/blog/meet-some-of-our-hosts-at-cloudfest-2025/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:100:\"Make sure and say hi to some of our hosts if you are attending the CloudFest event or the Hackathon.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 13 Mar 2025 12:03:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:41;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"Do The Woo Community: A New Show, Content Sparks, with Regular Host BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92609\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:46:\"https://dothewoo.io/a-new-show-content-sparks/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:172:\"BobWP introduces \"Content Sparks,\" a show focusing on content creation insights, featuring tips from his 18 years in the WordPress space combined with my hosts experiences.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Thu, 13 Mar 2025 09:27:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:42;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:66:\"WPTavern: #160 – Rahul Bansal on Success in Enterprise WordPress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"https://wptavern.com/?post_type=podcast&p=188219\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:80:\"https://wptavern.com/podcast/160-rahul-bansal-on-success-in-enterprise-wordpress\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:57342:\"Transcript
    \n

    [00:00:00] Nathan Wrigley: Welcome to the Jukebox Podcast from WP Tavern. My name is Nathan Wrigley.

    \n\n\n\n

    Jukebox is a podcast which is dedicated to all things WordPress. The people, the events, the plugins, the blocks, the themes, and in this case, creating a successful business in enterprise WordPress, and working to foster the WordPress community.

    \n\n\n\n

    If you’d like to subscribe to the podcast, you can do that by searching for WP Tavern in your podcast player of choice. Or by going to wptavern.com/feed/podcast, and you can copy that URL into most podcast players.

    \n\n\n\n

    If you have a topic that you’d like us to feature on the podcast, I’m keen to hear from you and hopefully get you, or your idea, featured on the show. Head to wptavern.com/contact/jukebox, and use the form there.

    \n\n\n\n

    So on the podcast today, we have Rahul Bansal.

    \n\n\n\n

    Rahul is the founder and CEO of rtCamp, a large agency that specializes in enterprise grade WordPress projects. He began his journey quite differently, starting as an individual blogger back in 2006, discovering WordPress in 2007, and gradually transitioning from being a publisher to a freelance developer, before founding rtCamp in 2009.

    \n\n\n\n

    Today, rtCamp is an enterprise grade WordPress consultancy agency operating globally and trusted by clients such as Google, Meta, Automattic, News UK and Al Jazeera.

    \n\n\n\n

    Rahul sheds his light on working with enterprise clients in the WordPress space. Many of us are familiar with WordPress in the context of small businesses and blogging, but the enterprise space demands additional layers of security and scalability. Rahul explains the factors that set enterprise projects apart, and why meticulous code reviews, and security audits are essential when working at this level.

    \n\n\n\n

    He talks about the opportunities in the enterprise space, recounting how rtCamp initially stumbled into enterprise level projects, not even realizing their potential until a client’s high expectations led to a decision to market themselves as an enterprise agency.

    \n\n\n\n

    We also discussed the role of WordPress in enterprise environments, from why Gutenberg has become a credible selling point due to its powerful editing capabilities, to how the platform’s flexibility supports varied enterprise needs.

    \n\n\n\n

    Rahul also gets into the importance of positioning. How historical context offers advantages, and the expanding market that makes WordPress a compelling choice for large clients today.

    \n\n\n\n

    Towards the end, we explore rtCamp’s innovative intern program, aimed at growing the WordPress talent pool, and the way they’re contributing back to the WordPress project, a win-win for the business and the broader community.

    \n\n\n\n

    If you’ve ever considered what it takes to work with WordPress at the enterprise level, this episode is for you.

    \n\n\n\n

    If you’re interested in finding out more, you can find all of the links in the show notes by heading to wptavern.com/podcast, where you’ll find all the other episodes as well.

    \n\n\n\n

    And so without further delay, I bring you, Rahul Bansal.

    \n\n\n\n

    I am joined on the podcast today by Rahul Bansal. Hello.

    \n\n\n\n

    [00:03:47] Rahul Bansal: Hello.

    \n\n\n\n

    [00:03:48] Nathan Wrigley: It is very nice to have you on the podcast today. We’re going to talk about the enterprise, which I confess is something that I only really know about because people talk about it. I’ve never worked in the enterprise, I’ve never worked with enterprise clients. So Rahul is here. He’s very much in the enterprise as you’re about to find out, and he’s going to educate me all about that.

    \n\n\n\n

    So Rahul, I wonder if you wouldn’t mind just for a minute or two minutes, just tell us who you are, what you do in the WordPress space, where you work, your position there, and so on. A little potted bio.

    \n\n\n\n

    [00:04:18] Rahul Bansal: Currently I am founder and CEO of rtCamp, which is a large agency specifically dealing in enterprise grade WordPress projects. I started quite differently, like I started as a individual blogger, back in 2006.

    \n\n\n\n

    In 2007 I found WordPress. I started developing with WordPress in 2007. And slowly from being a publisher, I become freelance developer, and then around 2009 rtCamp started. So I’ve been with rtCamp for the last 16 years.

    \n\n\n\n

    [00:04:46] Nathan Wrigley: That’s been quite a journey. I see the name rtCamp everywhere. And we should just say, so it’s spelt, lowercase r, lowercase t, and then Camp with a capitol C, a m p. Go and Google that, and have a look at what the team over there doing.

    \n\n\n\n

    How big has the team grown to? How many employees, staff do you have over there now?

    \n\n\n\n

    [00:05:05] Rahul Bansal: So currently we are 230 people, all spread over.

    \n\n\n\n

    [00:05:08] Nathan Wrigley: That is truly an enormous agency. So bravo for growing that. That’s really incredible.

    \n\n\n\n

    The first question that I want to ask though is, when does normal WordPress become enterprise WordPress? At what point do we cross the Rubicon where a site is, I don’t know, big enough, or your agency is working with a different type of client? Can you define what you think that means? And I’m sure that if you’re on the cusp of being an enterprise agency, this is something that, you know, may be slightly confusing.

    \n\n\n\n

    [00:05:37] Rahul Bansal: Firstly, there is no formal definition to that. Many agencies believe they’re serving enterprise space when they’re not. Some people are actually serving enterprise space, but they don’t realise it.

    \n\n\n\n

    So in my opinion, it’s where the requirement changes a lot. Like, for example, if we’re building a small WordPress site, which I don’t consider as an enterprise site, we will be tempted to pick first theme and plugin that matches our need, like if it works, if it gets a job done, that’s it.

    \n\n\n\n

    But then in enterprise space, there is a lot of security and scalability concerns. These two concerns are very big. Something might be working all right, but then when you look at the code, you realise that there’s going to be a security issues, or there could be scalability issues. Many times, indy developer person, they design small WordPress plugins. They don’t have data or big enough site to test it on a large installation. So those things are not tested on really high traffic website. So enterprise can mean really high traffic website, with a lot of scalability requirement.

    \n\n\n\n

    On the other hand, the traffic can be less, but the security requirement can be enormous. Consider the White House website. It was on the WordPress with the previous administration, and it’s again, on the WordPress with the new administration. So in both cases, I don’t think White House, like a website we can classify as a very high traffic website, but it is a very sensitive website.

    \n\n\n\n

    It would be a lot embarrassing if that site gets hacked. So every piece of code that goes into White House website, which agency is working on it, will be thoroughly checked for security attack, for audit, for all the compliances. And this additional efforts is what makes it enterprisey, in my opinion.

    \n\n\n\n

    [00:07:12] Nathan Wrigley: Okay, so it’s not necessarily the size of the client, or the fame, for want of a better word, of the client. It’s more about the kind of work that you’re doing in the background. So custom code largely, because you simply at that scale cannot have something off the shelf.

    \n\n\n\n

    [00:07:28] Rahul Bansal: So we can have things off the shelf. The thing is, you cannot just take it and use it. You still have to own it in that sense. Like, for our clients also, we go and use many things from WordPress plugin directory. But then when we put it on this website, it is kind of like signed by us. So it’s like we have to verify, even if it is not coded by us, we have to verify line by line that it is following best coding practices, database queries will scale with high traffic, if it is a high traffic website.

    \n\n\n\n

    There are many checks and balances in place. So no matter if you are doing in-house, like as a custom coding, or we are buying a premium plugin or using a free plugin, everything has to go through certain checks. And those checks are very expensive to do, because that’s a human labor. You have to literally go through things line by line. And in many cases, you have to put extra efforts to make it scalable with their existing system.

    \n\n\n\n

    Because usually a large enterprise won’t use just a website in silos. It’ll be part of multiple system like authentication system, where if an employee joins a large organisation based on some rule, they might get automatic access to their website. Likewise, if they leave organisation, their access should be automatically revoked, or they have some CRM integrations, data integrations, some kind of asset, like digital asset management solution integration.

    \n\n\n\n

    So all these have to be connected, and this all need to work together. So a lot of effort goes in doing these extra things, which are either don’t exist for small websites. So, enterprise website that I’m talking about, this can be really unknown website. We have a client which is basically a government public origin fund. Common people don’t even know about them, but they basically want pretty much all the big companies we know. Like, they have stake in all the big companies. Their asset is something like $400 billion in under management.

    \n\n\n\n

    Most people don’t even know that company. But then it’s very sensitive because that money they’re managing is public money, it’s not like VC fund. It’s actually state reserve. Now, seriousness, we need to demonstrate in the security is very high, because if something gets hacked or somebody uploads the wrong investor report or something like portfolio report, it can have a lot of consequences.

    \n\n\n\n

    [00:09:32] Nathan Wrigley: It kind of sounds to me as if the assurance that you are giving an enterprise client is basically that what we’ve built is, as far as we can tell, it’s bulletproof. We’ve gone through it line by line. We may have custom coded bits and pieces, but certainly the bits that we didn’t custom code, we are totally guaranteeing that this is going to be robust.

    \n\n\n\n

    And also it’s sounds a bit like, if a client at an enterprise level approaches you and they say, can you do this? Your answer is yes. Basically, yes, we can do it. We can do it with WordPress. There may be a cost, but we can do it. There’s almost no scenario where a client would come to you and say, can you do this, forget the money, can you do it? The answer’s never no. The answer’s always going to be yeah, yeah, we’ll figure it out.

    \n\n\n\n

    [00:10:15] Rahul Bansal: So that’s the thing, like if the budget has no limit then there is no limit on technology. Most often, like even where enterprise agency, WordPress has this large spectrum. So we end up with a lot of low quality leads, where somebody knocks on an enterprise agencies’ door and they really have budget constraint. They really want something really good out of the box, but they don’t want to pay for it. Or they don’t want to pay as high as it’ll require to deliver that kind of solution.

    \n\n\n\n

    For some enterprises, budget is no limit, but then we try to be mindful of resources. For example, many enterprise agencies, including us, if you go to their GitHub account, they would have list of published themes and plugins. Most commonly plugins, themes rarely are used off the shelf. So we will build these plugins to ensure that the cost of rebuild project is less, like if we have to deliver another project, we try our best that we reuse as much as possible.

    \n\n\n\n

    And that’s the open source spirit, that the entire WordPress committee follows. We use many times solutions that are already put in open source by our competing agencies. They also use our solution. So that’s where the enterprise solution with WordPress is also affordable. The right enterprise client that we target, usually have higher budget than we would need to develop because we are competing against a lot of experienced managers, which are very expensive, super expensive.

    \n\n\n\n

    And when I is super expensive, I’m just talking about licensing fees. Before you hire an agency to write custom code for you, you have already paid a lot of money just for the right to use the software. With WordPress, that right to use costs zero. And then all the nice agencies in WordPress space, big, small, no matter what size they are, try their best to reuse existing solutions, to bring the cost down.

    \n\n\n\n

    So enterprise WordPress, relatively, cost less than other enterprise CMS, but then it certainly costs a lot than building a small website. Like, you cannot go to an enterprise agency and expect in $500 your site to be built perfectly, because the requirement gathering phase, like talking to all stakeholders and understanding all the solutions they use inhouse can take like many days.

    \n\n\n\n

    [00:12:15] Nathan Wrigley: So you may have answered this question just now with what you’ve just said. I feel that you’ve definitely gone into this territory, but it sounds like there’s a lot of line by line checking of everything. So for example, if you use a plugin off the repo, you’re going to go through that one line at a time. And you said this can be an expensive process. You’ve also said that obviously there’s benefits of using WordPress because you can take things that other people have used and so on.

    \n\n\n\n

    But I guess at some point there’s got to be some sort of tipping point where you think, okay, WordPress is going to be good for this project, but it might not be good for that project. Is it always WordPress for you? Do you always lean into WordPress, or does there come a point where you say, do you know what, with the custom things that this particular client wants and what have you, lets just build the thing ourselves, let’s not rely on the CMS, or do you always lean in on WordPress?

    \n\n\n\n

    [00:13:01] Rahul Bansal: Maybe it’s the nature of our positioning that we rarely get things that we cannot do in WordPress, so we always do things in WordPress. The boundary varies with how much off the shelf WordPress we’ll use, and how much custom we’ll use. In one of the project, I remember there was a specific data crunching process that we needed to build. And we felt that it’ll be better if it is built as a microservice and run independently.

    \n\n\n\n

    So we built that in Python, but then it was talking to WordPress REST API. So that freedom we have from client, for example like that microservice, that microservice was never visible to any of the client’s editorial team. Everything they were doing, their only interface was WP admin. There was no second login or no second interface to them. It was just something was running on some server and magically data was going inside and outside WordPress.

    \n\n\n\n

    And that’s the power of WordPress. It has so many APIs to communicate with outside world, like rest API, GraphQL, and even from the traditional XML-RPC. That WordPress can coexist with other systems very nicely. And that’s where we never face that, can we do this on WordPress or not? It’s like, can we do everything on WordPress, or do we need to put some minor things outside WordPress?

    \n\n\n\n

    And those decisions are not the engineering limitation. Like, that microservice, we could have put it in WordPress also, but we felt that its architecture was more suited for independent microservice. That was the right call, it turned out to be right call. Much later that microservice grew independently.

    \n\n\n\n

    [00:14:26] Nathan Wrigley: If we rewind the clock to the beginning when you were just beginning with WordPress and beginning the agency that ended up being rtCamp with your 230 odd employees, did you intend for what’s happened to happen? Did you always know that you wanted to grow something to the point where it became, air quotes, enterprise with many, many employees, or did it just evolve over time unexpectedly?

    \n\n\n\n

    [00:14:49] Rahul Bansal: Yeah, it all happened unexpectedly. Like, I started as a professional blogger. I used to make money from advertising, affiliate marketing. So it’s like, I wasn’t doing anything remotely related to agencies.

    \n\n\n\n

    So one thing led to another and then I started freelancing. Then even after freelancing, when I started rtCamp as an agency, because I was coming from bloggersphere, most of my initial client were bloggers, like independent bloggers. Somebody wanted a theme, somebody wanted a plugin, somebody wanted a sidebar, which sidebar just used to be a lot more popular in those early days of blogging. Like, people used to have MySpace, like experience on the web, like lots of widgets, email submission form, this pop up.

    \n\n\n\n

    So in fact, the first enterprise client that walked into our door, that’s why I said like many agencies don’t even realise when they mingle with enterprise space. I kind of felt very irritated because they asked so many questions. They got our reference from LinkedIn. We had zero, we were not even using enterprise word anywhere in our branding, marketing, anywhere at all. But back in 2010, also, we made a good name for ourselves.

    \n\n\n\n

    So anybody who shouted, hey, any WordPress references, our name used to pop up on social media. So we got that. And they sent us a very large procurement checklist, which we never heard of. All of our projects were like email exchange, two, three emails, money via PayPal, and emails used to be contact. Like, whatever you committed on email is the contract.

    \n\n\n\n

    And suddenly there comes like this long PDF, Excel sheets with check boxes. Do you have a data storage policy? This policy, that policy. If we end up filling this, we’re not going make any profit with this project. So then one of my teammates said, let’s price in that. Let’s price in and see if they can afford it. So we literally added another zero to our pricing, literally like 5 times, 10 times. And we said like, hey, this is our minimum, do you want to go ahead?

    \n\n\n\n

    I said, sure, like this is peanuts. And they were worried like, do you understand the project? You are quoting very less, your starting point is very less than our internal budget. So they came to our office, they were based in India. Luckily they were in the same city. They came to our office to audit us physically. They put like remarks like, you don’t have a fingerprint scanner in your biometric sensors in your office entry. There is no employee log.

    \n\n\n\n

    But we are not storing any of your data. So this office is not the building where your data will reside. Your data will reside on AWS, or all those cloud servers. And then they got convinced. WordPress was very small then, and we were the only known agencies, which was fully committed to WordPress at that point. So they didn’t have choice two, three, so they kind of crossed the fingers and gave us that project.

    \n\n\n\n

    It took six months to close. I was very pessimistic. It’s only after two, three years that we realised that they’d become our largest client by a huge margin. All my blogger friend put one side, and this single client, one side. And that revenue was growing very nicely, year on year. Renewals, they had this retainers, every year they were renewing without asking questions.

    \n\n\n\n

    So I realise that it’s very hard to win these big clients, but once you are in it becomes very smooth journey, henceforth, like after that point. And then I think 2014 around, after two, three years data, when I saw that this client was consistently, for the last three years in a row, our biggest client. Zero sales effort, zero account issues, no negotiation on pricing, and everything was smooth.

    \n\n\n\n

    So then I thought like we should go in to some enterprise space, and luckily around that time I had a call with Chris Lema. Chris Lema used to be available for consulting calls on Clarity. I’m not sure if that service is still around. And I still remember it was exactly 33 minutes that I talked to Chris. He repositioned rtCamp. In 33 minutes he gave me some amazing breakthrough idea.

    \n\n\n\n

    And after that call, first time we told ourselves, we are enterprise WordPress agency from today. Until 2014 we were not identifying ourself or branding ourself as an enterprise workplace agency. That moment was the first time when we put in bold letters on our homepage, in SEO Meta, everywhere we added, we are enterprise, enterprise, enterprise WordPress.

    \n\n\n\n

    [00:18:35] Nathan Wrigley: Can you remember that moment? So if you cast your mind back, when you added the zero and sent it, and there was obviously some suspicion in your mind that nothing’s going to come of this or what have you. Can you remember the feeling? So it’s an odd question because I’m asking you about your feelings, but can you remember the feeling when they came back and said, oh yeah, this is not as expensive as we’d imagined? That really must have opened up an entirely new world for you.

    \n\n\n\n

    [00:19:00] Rahul Bansal: Yeah. So firstly, it was very unexpected because we were selling like WordPress projects for $100, $50, $500. The biggest was $1,000. We still remember we built a complete BuddyPress plugin for $900. And we were like so happy when that client sent us $100 tip. He rounded up to $1,000 and we were partying, like with that extra $100, we throw a party to our team.

    \n\n\n\n

    And suddenly this client comes and they said, $5,000 is okay? Are you kidding me? Because they sent so much data I didn’t want to fill in, so I just thought, let’s just give them a number and they will walk away. We’ll not appear as a company who didn’t want to fulfill their data request. I thought, I will give them a reason to walk away, but then it didn’t walk out.

    \n\n\n\n

    Initially I was still skeptical because they really demand too much data. Just imagine, we were like some 20 people agency at that time, and we spent three to six months in back and forth sales call. We didn’t have typical sales team at that point. Writing those long answers. We were not even understanding questions. The problem was not that we didn’t want to give data or we didn’t take security seriously, there were things that we never heard of.

    \n\n\n\n

    It was all like foreign language to us. What are they asking? Why do they want to do that? I was not expecting lifetime revenue, that concept was not in our books then. So it was project, money in, money out, end of email, site goes live. Then the recurring revenues hosting companies. We were not into selling maintenance contract.

    \n\n\n\n

    So it was a project kind of thinking like big, big economy mindset. So even with 5,000, I thought like, the amount of effort they’re putting us, we won’t be left with any decent margin after this project. And that was a true case. For first year there was not much margin left because they had put us through a lot of work to fulfill that project. And then we realised we underquoted after that also, because when the data, we had to talk to their Microsoft vendor. They were using Microsoft SharePoint. There were many rough edges that we had no idea could happen to us.

    \n\n\n\n

    In year one, they were the highest revenue, but project was in loss. It’s only a year, two, three, it was very good profit. And then we have the strategy that we call now land and expand. Land big accounts, no matter whatever price point you wanted to do, go aggressive, and then once you are in, then you spread within the organisation.

    \n\n\n\n

    [00:21:08] Nathan Wrigley: Oh that’s an interesting insight. So land and expand. Land the client, the big fish, if you like, with the knowledge that if you maintain the relationship over many years, the profit can build up. Not necessarily year one, but maybe a bit in year two, and year three, and year four, it’s beginning to mature.

    \n\n\n\n

    And, it sounds like such an interesting story. And, again, I’m going to rewind back to before 2014, so before you added enterprise to your website and have you. Do you think if you had begun your journey today, that you would have the same capability to expand in the same way? Because it feels like there are now quite a few players. Perhaps when you began that was less of the case. You were competing in a much less crowded marketplace.

    \n\n\n\n

    But it feels like everybody’s intent now is to become an agency which can call itself enterprise. And I’m imagining that you got your foot in the door at a really nice time where you became a name that everybody could trust, and the recommendations come in because of prior work, but maybe that would be more difficult now.

    \n\n\n\n

    [00:22:08] Rahul Bansal: The market is much bigger now. In fact, just imagine WordPress market share. When we were building the first initial websites, there was not even custom post types that were present in WordPress. So all the WordPress plugins, we used to do a lot of hacks. There was not standardisation. So a lot of things happened with WordPress as a platform. WordPress evolved. The market share has become so big. It’s easier to sell. We have so many examples like from White House to large publishers. And globally, it’s not like just the American companies are using WordPress. India’s second largest publisher also uses WordPress. So does Al Jazeera in Qatar.

    \n\n\n\n

    So there are many big websites all over the world so it makes WordPress easy to sell. The market is big. There is a precedence where you can pitch somebody, this is WordPress used by so and so. I believe that no matter which lead you are dealing with, so if you have a lead from a certain industry, a certain geography, you will find a WordPress success story in their geography. You will find WordPress being used by your prospect’s competition. That makes it easier to sell WordPress.

    \n\n\n\n

    So, yeah, the competition is more because opportunity is bigger. The pie is a lot bigger. Otherwise we would’ve stuck to the same size. Every year we are adding more people because we are able to get more work for them, even with these new agencies coming up. In fact, it’s easier to build WordPress agency, or any kind of enterprise grade agency now, because the recipe is quite clear. Because we can look at how other agencies are doing and you can take some lessons from them.

    \n\n\n\n

    At that time we had no idea. Like, in fact, we didn’t have the idea that we should position ourselves enterprise grade agency, that was the call with Chris. Before that call, we had no idea that we should be labeling ourselves as an enterprise grade agency.

    \n\n\n\n

    [00:23:42] Nathan Wrigley: If clients approach you, and it sounds like this may not be the case. It feels like people are approaching you because you build WordPress, not inquiring whether or not you would do a WordPress project for them. What are the one or two bits that you always bring out when a client says, well, why would we go with WordPress? What are the one or two top line items which you think, okay, if we’re going to build you a website, we’re going to choose WordPress, and here’s the best reasons at enterprise? So we’re not talking about a mom and pop store, that it really doesn’t matter if it goes down a bit. What are the one or two things which you bring out when an enterprise client wants to know why WordPress?

    \n\n\n\n

    [00:24:18] Rahul Bansal: First we want to reassure them that WordPress is the right platform. So this is a difference between a product company and agency. A product has a landing page, which is more similar, it gets us to a lot of people. But an agency pitch is tailored for every client, every prospect. So our first goal is to find competition. So which are the competitors for this particular client, prospective client, and see if they’re using WordPress. If your competition is using WordPress, you will feel a lot more comfortable going after it, because nobody wants to be first, especially in large enterprises.

    \n\n\n\n

    Another way we define enterprise is that, when you are not buying from out of your pocket. In a large organisation, your job is not to save the money or find cheapest solution, your job is to deliver result so that it can go very nicely in your annual review report. I still believe people, especially in enterprise, are looking for safety as a first because they know that they have budget to build anything under the sun.

    \n\n\n\n

    So usually we say less like, WordPress can do this, WordPress can do that. Because for everything that WordPress or any platform doesn’t do out of the box, they have budget. What they need to know is that it’s secure, it’s safe, it’ll scale well. And if some government approaches us, so we show that public sovereign fund, that they’re managing. So that client has a special permission with us, like we cannot refer them publicly, that government agency, but we can refer them to other government agencies in private conversations. So that is how we convince like, okay, this is similar people to you who are using WordPress.

    \n\n\n\n

    And I think safety is still the first thing that people are looking for because, it’s not even WordPress, it starts with open source. There is something, somebody did some marketing where people believe or have this misconception that open source will be easy to hack, because you can see the code, you can easily hack. That is our first step. If client mentions it explicitly, we go all in. Even if the client doesn’t mention it, if the prospect says that we are looking for rating interest, we still will verify. Are you sure that you are sorted on WordPress being safe? Any concerns, any doubts?

    \n\n\n\n

    And then features, because WordPress has no match. And I’m not saying this as a WordPress agency. The Gutenberg editor itself alone is miles apart. If you go to any other platform, the editing capabilities are nowhere close to Gutenberg editor. Gutenberg editor demo itself is a deal breaker in many cases. We just show them Gutenberg editor, and they’re like, wow, is this possible? Is this thing real? Is this some mockup? No, this is website. After the call, we are going to send you a URL, go and try your hands on. This is no fake, that vaporware demo where you see something on my screen, but in reality it doesn’t work like that. This is the real website. Go and try it.

    \n\n\n\n

    [00:26:53] Nathan Wrigley: That’s really interesting because in the non-enterprise, that message hasn’t necessarily landed. Gutenberg is, it’s very divisive issue, isn’t it? Whether you use it or not. And it’s curious that you are saying that it’s one of the key things which leads to the success.

    \n\n\n\n

    Can you just dig into that a little bit? What are some of the aspects of Gutenberg which make the clients think, okay, this is great, this is perfect, this is just what we need? What are some of the features that you draw out of the block editor?

    \n\n\n\n

    [00:27:19] Rahul Bansal: So I think the main difference that we feel like compared to the consumer WordPress, I would say. The consumer WordPress access technologies on very different platform, like proprietary. Just imagine somebody is using Instagram to create reels. With that mindset they come to WordPress Media Library and expect video editing experience like that to happen in WordPress, they will be disappointed.

    \n\n\n\n

    But here we’re talking to people in large companies, very large companies, using legacy systems, probably from the nineties. They might have a desktop application to update a webpage, some ugly looking forms. We even have a memory where a client, their publishing workflow they had to write an article using a very poorly designed HTML web form, and they had to upload images via FTP. And then they had to reference images in document. There was no drag and drop interface.

    \n\n\n\n

    So now if somebody like this person comes to Gutenberg, it’s like an iPhone moment for them. With that being said, Gutenberg itself is a very powerful editor. We haven’t come across a case where somebody said, oh, this is not flexible. As I said, like enterprise have a very good balance around the feature versus maintenance. For example, so Gutenberg may have one or two features less compared to a third party page builder, but then being part of Core, they’re assured that five years down the line, it will be very well maintained.

    \n\n\n\n

    Security is more important to them because one less plugin means one less attack vector. Less things to break, less things to train, less things to maintain going forward. We as an agency develop so many sites on Gutenberg that we have our own libraries and our own patterns. So it’s like, whenever a requirement comes, we can easily map it to Gutenberg.

    \n\n\n\n

    [00:28:51] Nathan Wrigley: I think that’s the difficult thing to imagine if you’ve never built your own block or you’ve never delved into patterns. But certainly at the enterprise level, if a client comes to you and said, we have this repeatable thing, and we need to put this repeatable thing on page every time. And honestly it’s real chore. And you can build a block, and they drop the block in, and now they just fill out some fields, drag an image in here, and suddenly, boom, it’s exactly on the front end what were expecting.

    \n\n\n\n

    It’s that kind of thing, isn’t it? It’s that, almost like an app inside of an editor. So we’ve got a block which consumes perfectly the content that you want, and we can adapt it if your needs change. But if you’ve never really gotten into that, it’s hard to imagine. It’s just a bunch of paragraphs and images, but it’s not, it’s so much more powerful than that.

    \n\n\n\n

    [00:29:34] Rahul Bansal: One thing I would say that, if you look at any large corporation, they have something called design systems, where they have their brand guidelines across products, not just websites like, across mediums like print and everywhere. With Gutenberg, it is very intuitive and easy to map the design system into WordPress. So that is where Gutenberg shines, that you can create patterns, you can create theme json. You can give them a starting point which blends very well with their existing design system.

    \n\n\n\n

    That is where half of the job gets done. Like, compared to indie hackers or small businesses, large enterprises are not running after lots of plugins. They don’t want to try a hundred plus blocks plugin, a plugin with 200 blocks. They want to restrict number of choices. They want to have less number of blocks, but properly weighted with the user’s guidelines. So it’s like, the freedom they demand is easily given by Gutenberg, and with the assurance of, it is going to be around long term. It’ll be very well maintained. It’ll be very well supported, and performance. I still feel Gutenberg has much better performance, the markup, SEO qualities, top notch.

    \n\n\n\n

    [00:30:35] Nathan Wrigley: I think it’s just the constraints that you can put around that editing experience. So if the client comes and they want this inexperienced user to be able to create content but have boundaries so they can, I don’t know, they can add an image here and it will be, it doesn’t matter, they just put it in and it will output perfectly. And here’s where the text goes, but they can’t change the fonts, you’re not allowed to change the color and what have you. All of those kind of constraints around the editing experience. It’s just miraculous really what’s possible.

    \n\n\n\n

    And I think it gets lost because the majority of people, I’m imagining using WordPress are sort of tinkering with Core blocks and it can become confusing. There’s lots of choices. You try one thing and it doesn’t work out, and you throw your hands in the air. But if you’ve built the perfect thing, then all of those guardrails are in place and it will output the perfect thing every time. I think that’s really interesting.

    \n\n\n\n

    How do you grow, and how do you find your next employees? Because I’m guessing at the level that you are now at, you must have some fairly exacting specifications when you put out a job description. And WordPress is becoming an increasingly JavaScript based thing. Lot more technical difficulties. Where do you find your talent, and is it becoming harder to find?

    \n\n\n\n

    [00:31:40] Rahul Bansal: This would be unique to literally us. We have what we call our own training center where we, every year we take some 50 students from college, who recently graduated. Every six months we take 25 to 30 students from colleges. We put them through six months of training, like a complete, they get paid to learn WordPress for six month. They have no obligation to continue with us. They can join our competition, they can do anything with the WordPress.

    \n\n\n\n

    But we really get this talent and this job is very popular in India. So this training we run, the pay scales are very popular in India. So last year also we had some 90,000 applications for 60 positions. We literally have to build a platform. So we have a campus adding platform, its name is Chitragupta. Chitragupta is basically is responsible for managing the ledger of your good and bad work. So in Hindu mythology. So we built  Chitragupta, which basically scans your GitHub repos and assigns your grade.

    \n\n\n\n

    And those 9,000 people gets graded. And then we interview from top to bottom until 60 positions gets filled. So last time we had to interview some 1,200 students, by the time 60 students got selected.

    \n\n\n\n

    Then we put them to the six month training. Our course is public, so people know what is going to be in the course, and so we find a lot of passionate people. Many times by the time they join our course, I’ve already gone through it from the public website that we have learn.rtcamp.com. From there, they already have checked it. And then we put them through the six month training. After that, this thing we started this year only. After six month training, we put them six months into the WordPress.

    \n\n\n\n

    So WordPress Core has a mentorship program running on for new contributors. So this year we enrolled 10 people, managed by Automattic and Google employees, senior employees. So they are mentoring this people for further. So first year we, we invest them heavily. Zero revenue, only investment in year one.

    \n\n\n\n

    And then from year two, we start getting, like some client work done from them. And this is something turned out to be very great for us from last three years. At some point we felt, there are same number of people switching between agencies, and net new addition to the WordPress worker pool was getting stagnant, especially around Covid.

    \n\n\n\n

    I felt the way people used to discover life with WordPress, or a professional life with WordPress was mostly through WordCamps or meetup groups, and when that Covid happened, we suddenly missed those years, when new people didn’t come to the WordPress, as many as they used to come before.

    \n\n\n\n

    So there was this gap that started hurting large agencies, like us. Because if we look at a small website, then the enterprise budget appears a lot, but there’s always a limit. No company approves unlimited budget for any venture. Like for every project there’s a budget. It’s usually large enough, but there’s always a number and, as talent was getting more expensive, WordPress was getting unaffordable at some point.

    \n\n\n\n

    So I talked to some medium publishers, medium sized publishers, not the big ones, who complain a lot. Like the good WordPress agencies are either sold out or too expensive. It’s like WordPress is suddenly getting unaffordable, and that is when we started in this hiding experiment, where we onboarded people every year. And this is, we are doing from last four years.

    \n\n\n\n

    So we have been hiring for many years, but early it was 5, 10 people. This massive scale of hiring we started from last three to four years. And, it turned very well for us. Like all these people in second year clocked, like in agency billable hours is a very big metric, and in second year, these people clock 90%, more than 90% billable hours.

    \n\n\n\n

    [00:35:08] Nathan Wrigley: That’s incredible. What a great idea. Can I just ask, just to clarify with that, is that an in-person thing? So you come to a place where 60 people gather, and the tuition is taking place in the same room, or is it an online thing or?

    \n\n\n\n

    [00:35:23] Rahul Bansal: So before Covid it was, it used to be in the same room, but the scale was 20 people at that time only. After Covid, we made it completely remote. It’s now completely remote. It’s still in the same time zone because, these are the Zoom calls, recordings. The time zone synchronization is needed. So that’s why it’s currently India only. But we are expanding it to other territories, and we are seeing like if we can create similar talent pool in other part of the world. Because,early it was in n office, then it went remote over Zoom. And this year, it is going async. We have a dedicated department, which is called Learning and Development Department.

    \n\n\n\n

    So our agency head has implemented most lessons in a synced way, so that people can wake up at different time. And so it’s like they won’t get blocked. They can learn asynchronously, they can complete this six month course asynchronously.

    \n\n\n\n

    [00:36:11] Nathan Wrigley: It just sounds like the appetite is incredible. The numbers that you just mentioned there, I think you said something like 1200 or something like that, people for 90 places. That’s just remarkable. So the appetite really is there. It seems like such a commendable project as well, in that you are putting out a limited, you know what, you can manage. 60 people out into the workplace. Some of them may end up working with you. Some may end up working with your competitors. But you’ve put 60 people out there who are really credible at pushing the boundaries of what WordPress can do, and hopefully just making a start on their career.

    \n\n\n\n

    [00:36:44] Rahul Bansal: Yeah.

    \n\n\n\n

    [00:36:45] Nathan Wrigley: But I know that it’s not just limited to that. And, I would like to get into this just before we finish, because I think this is important. Over the last few years we see these metrics every year of companies who put time into the WordPress project in general, in a whole manner of different ways. They may be sponsoring events. They may be committing staff to Five for the Future and what have you.

    \n\n\n\n

    And the company, your company, rtCamp, it always seems to be right at the forefront of that in a growing way. I’d just like to applaud you for that and give you an opportunity to say what it is that you do so that we’ve got an impression of just how much good you are doing apart from obviously, having a very profitable agency and what have you, how much good you’re putting back into the community as well. So just outline your commitments to the WordPress project.

    \n\n\n\n

    [00:37:29] Rahul Bansal: So, as I mentioned that, so we have multiple ways of contributing. So as we hire a lot of from college, unfortunately we cannot have a lot of Core committers with us, but we take care of the other end. For example, these 10 people, we have a commitmentt now internally that every six months, so we will put 10 people full-time, like full-time as in literally full-time. A hundred percent of their time will go in working on WordPress project for six months.

    \n\n\n\n

    And then this will be rotated by next batch. So in rotation there will be at least 10 people. As we grow further, then we’ll make it 15, 20. And we want to keep this ramping up this number. So there will be always, WordPress Core will have enough junior people to pick the task. So, that good first issues will, somebody will be looking at them.

    \n\n\n\n

    Then we have a QA people, work into the QA team, other teams. I myself as WordCamp organizer, for WordCamp Asia. We have other people contributing to different part of WordPress.

    \n\n\n\n

    We have a training course, which is public domain, in public domain. We started that much before learn.wordpress.org is there. Now  learn.wordpress.org is there, it is much better resource. But then this course was there for many years, and many other agencies use it. So that is one of the way to build human capital. So this word actually drives me a lot. We want to consciously put our efforts in developing human capital of WordPress.

    \n\n\n\n

    Because in the end, it’s people that do the job, no matter how fancy it is. You need a human to put a prompt to the AI. ChatGPT won’t build things on its own. You need to, you need a human to ask creative questions. And we want to ensure that WordPress economy continues to grow, and it never falls short of people. So we hire a lot of junior people. We put into the workplace. We publish our videos tutorial. We publish our training material also in the public domain.

    \n\n\n\n

    Many companies use it, and we expect no link back, also, no credit. Because sometimes they have a apprehension that if they know, this is why rtCamp course will, for, example, our training course site doesn’t require registration. So if you’re sending your employees to learn WordPress on our site, we won’t track them. We won’t solicit them. We have no way of knowing who’s learning. Google Analytics just shows traffic. A lot of traffic is coming to those training sites, but we have no personally identify information tracked there.

    \n\n\n\n

    [00:39:45] Nathan Wrigley: I would imagine that in every aspect of your business, except this, maybe, there’s gotta be some measurable ROI. Okay, we put this in, we get this out. Do you have any metrics to measure your commitment to the community, or is it just putting your finger in the air and thinking, okay, last year, our business did this, let’s put, I don’t know, whatever it might be. Do you have a pro forma that you stick to? A number of hours, a number of people? Or is it just, yeah, this feels right this year. Because you can’t measure this. And in some cases, I imagine people would think, yeah, they’re probably overdoing it a little bit over there and what have you.

    \n\n\n\n

    [00:40:21] Rahul Bansal: So, we have a top line mandate that, so it’s like, internally we divide engineers in three categories in rtCamp. The junior ones were like less than two years in rtCamp. The senior ones like two to five years. And lead levels were like more than five years with us. The junior one, we target 20% of their time for WordPress Core. And the medium level, the seniors, 10%, and lead level is 5%. Lead level is very hard, because we have very less lead engineers. The demand supply gap is more evident on senior and lead level. But then, these metrics are, so our office structure is that we have some called business needs.

    \n\n\n\n

    So every people need to submit their 20% report. Not only they need to submit the hours report, like they have their hours went into the WordPress Core or different part. They have to compile what are the issues they solved. It’s not like you’re just making time entries. You have to tell in the leadership quarterly review that I have 50 people in my business units, and together they clock 3000 hours. And this is what we achieved in 3000 hours. And this is approved. The props messages we see in WordPress Slack, those screenshots, if our employee names is mentioned, are taken screenshots and filing into those review reports.

    \n\n\n\n

    Three people got props from my team. The WordPress Core release notes, like with major releases. So those contributor list also presented by them. If somebody’s doing some make WordPress blog post or activity, those are also tracked by them. So the heads compile this report, from like bottom ups and then present in leadership meeting. So this is not accidental.

    \n\n\n\n

    The material ROI is very hard to measure. We cannot say that, oh, we made like X dollars because of this effort. I think, as a salesperson, when I tell a client like, hey, I’m going to give you an engineer who knows WordPress very well. I’m more confident if that person has contributed six months to the WordPress Core. And their patches is weighted by some amazing people in WordPress community, especially senior ones. It’s like a win-win situation for all. This gives me a very, very well trained people to sell.

    \n\n\n\n

    [00:42:16] Nathan Wrigley: That’s exactly how I was just thinking about it. This kind of win-win cycle of you put people into WordPress, and obviously at a junior level, more time and I can understand that. That makes sense. Presumably the ones who are more experienced, they’ve got other work to be doing. But also they’ve probably gained a ton of experience doing those prior years of extra hours.

    \n\n\n\n

    So you put the hours in, but also they contribute to Core, but they get experience back out. They’ll be exposed to all sorts of different things that your projects would never have put them in front of, presumably. So they’ll be touching on subject matters. Getting into plugins, themes, blocks, code, Core, whatever it may be in a whole range of different ways than they would be. So like you say, it’s like you slap my back, I’ll slap yours a little bit. Win-win. WordPress wins, you win.

    \n\n\n\n

    [00:43:06] Rahul Bansal: There are three wins here. The person, that student, who came right out of the college, and usually in college, people here, people have some negative perception about professional life. That companies are evil. You are going to do labor. Somebody will steal your credit, and here they’re on their own. Like they go into the WordPress community on their own. They sign a patch with their name. They file a Trac ticket with their name. They get props in their name. They get treated very well by contributor. If somebody makes mistakes, WordPress committee is full of nice people. Nobody’s going to pull them down. Nobody’s going to shout at them.

    \n\n\n\n

    Everybody corrects them with respect and compassion, and that helped them grow as a person. Like, they become better human. They become better coder. And that empathy, we see that, when they become senior engineers, and when they’re reviewing some junior’s code, they remember that, hey, when I was, it was my first day in WordPress community, and I made that patch. I made one mistake, but somebody was nice to me, so I have to pass it on. So that niceness cycle continues.

    \n\n\n\n

    And, the biggest win is that these people like, who has an incredible job satisfaction. They love open source more. Many of them don’t join for the love of open source, they’re at a point when they, join rtCamp, they’re at a point when their college is ending. They just want to get a job, and secure a financial life. Whatever jobs comes their way, they’re okay with it. Open source, closed source, not much preference. But once they’re in, and then we take them through this one year of tour, like six months in training center, then six months in WordPress community, they become the advocate of open source for life.

    \n\n\n\n

    And that is a very most important win for us because we want people to believe in open source. We don’t want them to say open source is good because their company is selling it. We want them to have that faith that open source is the right way to do things. And that faith is very important for growth. You cannot mug up your mission statement and stand for it.. You have to believe in something to stand for it.

    \n\n\n\n

    [00:45:00] Nathan Wrigley: What a profoundly interesting thing to have said. I think that’s just fabulous. I think your company is doing so many interesting things. It’s obviously, financially it’s working out, but just the position that you’ve painted there of the way that you are treating your employees, and the autonomy that you’re giving them, and the future opportunities that you are giving them. And the training opportunities giving them, just remarkable. And I’m profoundly impressed by what you’ve been doing.

    \n\n\n\n

    Unfortunately, time is our enemy. We’re going to call it a day there. Rahul, thank you so much for chatting to me today. That has been an incredible journey. Long may it continue. I wish you and rtCamp all the success that you can possibly have the future.

    \n\n\n\n

    [00:45:39] Rahul Bansal: Thank you, Nathan. Thanks for having me on this podcast.

    \n
    \n\n\n\n

    On the podcast today we have Rahul Bansal.

    \n\n\n\n

    Rahul is the founder and CEO of rtCamp, a large agency that specialises in enterprise-grade WordPress projects. He began his journey quite differently, starting as an individual blogger back in 2006, discovering WordPress in 2007, and gradually transitioning from being a publisher to a freelance developer, before founding rtCamp in 2009. Today, rtCamp is an enterprise-grade WordPress consultancy agency, operating globally and trusted by clients such as Google, Meta, Automattic, NewsUK, and Al Jazeera.

    \n\n\n\n

    Rahul sheds light on working with enterprise clients in the WordPress space. Many of us are familiar with WordPress in the context of small businesses and blogging, but the enterprise space demands additional layers of security and scalability. Rahul explains the factors that set enterprise projects apart, and why meticulous code reviews,   and security audits are essential when working at this level.

    \n\n\n\n

    He talks about the opportunities in the enterprise space, recounting how rtCamp initially stumbled into enterprise level projects, not even realising their potential until a client’s high expectations led to a decision to market themselves as an enterprise agency.

    \n\n\n\n

    We also discuss the role of WordPress in enterprise environments, from why Gutenberg has become a credible selling point, due to its powerful editing capabilities, to how the platform’s flexibility supports varied enterprise needs.

    \n\n\n\n

    Rahul also gets into the importance of positioning, how historical context offers advantages, and the expanding market that makes WordPress a compelling choice for large clients today.

    \n\n\n\n

    Towards the end, we explore rtCamp’s innovative internship program aimed at growing the WordPress talent pool, and the way they are contributing back to the WordPress project; a win-win for the business and the broader community.

    \n\n\n\n

    If you’ve ever considered what it takes to work with WordPress at the enterprise level, this episode is for you.

    \n\n\n\n

    Useful links

    \n\n\n\n

    rtCamp

    \n\n\n\n

    White House website

    \n\n\n\n

    Al Jazeera website

    \n\n\n\n

    Campus at rtCamp

    \n\n\n\n

    rtLearn

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 12 Mar 2025 14:00:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Nathan Wrigley\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:43;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:97:\"Do The Woo Community: Effective Collaboration with Clients and Teams: A Chat with Zach Hendershot\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92561\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:95:\"https://dothewoo.io/effective-collaboration-with-clients-and-teams-a-chat-with-zach-hendershot/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:237:\"In this episode, Adam and Emma discuss effective collaboration with Zach, CEO of Miruni, focusing on setting clear expectations, minimizing manual tasks via automation, and enhancing communication for better client and team interactions.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 12 Mar 2025 09:49:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:44;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:58:\"Gravatar: Top Strategies for Reducing Friction in Sign-Ups\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:32:\"http://blog.gravatar.com/?p=2830\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:50:\"https://blog.gravatar.com/2025/03/11/sign-up-flow/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:17831:\"

    Creating effective sign-up flows presents a challenging balance. Users expect quick, frictionless experiences, but businesses need quality data to better serve their customers. To get this information, they often overload the sign-up process, leading to high abandonment rates and lost opportunities.

    \n\n\n\n

    Thankfully, there is a way to find balance – and we’re talking about more than just user-friendly designs. Advanced strategies like intelligent data collection timing and progressive disclosure techniques help maintain healthy conversion rates while gathering essential user information. These approaches, combined with AI-driven personalization, can transform a standard sign-up process into an engaging experience.

    \n\n\n\n

    Reducing friction while maintaining control over data collection might seem daunting. However, by implementing strategic optimization techniques and tools like Gravatar’s developer API, you can significantly reduce friction points in their sign-up process. 

    \n\n\n\n

    So, let’s see how you can do just that while still collecting valuable user data that allows for personalization and improves the overall user experience.

    \n\n\n\n

    Essential strategies for reducing sign-up friction

    \n\n\n\n

    When talking about sign-up friction, a common topic is form optimization, but that’s only the beginning. You need a bit more if you want to create better sign-up experiences and reduce drop-off rates while still maintaining high data quality.

    \n\n\n\n

    First, progressive profiling allows you to collect user information gradually rather than overwhelming new users with lengthy forms like these: 

    \n\n\n\n\" Example\n\n\n\n

    Instead of requesting all details upfront, ask only for essential information during sign-up, and additional data can be gathered as users engage with your product.

    \n\n\n\n\"Example\n\n\n\n

    You can also use email-based profile systems like Gravatar to make the process even easier. By integrating Gravatar into your sign-up flow, you can automatically populate user avatars and profile information using just an email address. This eliminates several manual entry steps.

    \n\n\n\n\"\"\n\n\n\n

    Delayed email verification keeps users engaged by letting them access your app immediately after sign-up. ChargeBee is a great example of this approach: 

    \n\n\n\n
      \n
    1. New users enter the platform right away by filling in the more important details. 
    2. \n
    \n\n\n\n\"Chargebee\n\n\n\n
      \n
    1. They verify their email address only after signing in.
    2. \n
    \n\n\n\n\"Chargebee\n\n\n\n

    Finally, smart forms with predictive error prevention catch potential issues before submission rather than returning users to a form with error messages. This real-time validation helps users complete sign-up forms correctly the first time.

    \n\n\n\n\"Example\n\n\n\n

    Intelligent data collection: When and what to ask 

    \n\n\n\n

    Making smart decisions about when to request user information can significantly impact sign-up completion rates. A strategic approach starts with distinguishing between essential and non-essential data.

    \n\n\n\n

    Essential information typically includes:

    \n\n\n\n
      \n
    • Email address (for account creation).
    • \n\n\n\n
    • Password.
    • \n\n\n\n
    • Username (if required).
    • \n
    \n\n\n\n

    Non-essential information such as company name, last name, job title, team size, and phone number can definitely wait. 

    \n\n\n\n

    Custom triggers help time additional data requests effectively. For example, only ask for team size after users show interest in collaboration features. Or request company details when someone visits the enterprise pricing page.

    \n\n\n\n\"Example\n\n\n\n

    Profile enrichment through integrations and APIs offers another powerful approach. By combining email-based profile services like Gravatar with progressive data collection, you can build comprehensive user profiles without overwhelming new users.

    \n\n\n\n

    Gravatar’s API can automatically populate non-essential information from a user’s email address, eliminating the need to ask for basic profile details during sign-up. This approach maintains high conversion rates while still gathering valuable user data.

    \n\n\n\n

    How Gravatar simplifies user onboarding

    \n\n\n\n\"Gravatar\n\n\n\n

    Gravatar transforms the traditional sign-up process by automatically populating user profiles through a single email address. This approach eliminates multiple manual entry steps that often cause users to abandon sign-up forms – according to a 2020 study by Wyzow, 80% of users have deleted an app because they found the initial setup process too complex.

    \n\n\n\n

    This is why major platforms like GitHub, OpenAI, and Atlassian use Gravatar to enhance their sign-up experiences. 

    \n\n\n\n

    By implementing Gravatar’s REST API, developers can instantly access a rich set of user information:

    \n\n\n\n
      \n
    • Display names and avatars.
    • \n\n\n\n
    • Professional information.
    • \n\n\n\n
    • Biography and location.
    • \n\n\n\n
    • Language preferences.
    • \n\n\n\n
    • Pronouns.
    • \n\n\n\n
    • Social and professional links.
    • \n\n\n\n
    • User interests.
    • \n\n\n\n
    • Work history.
    • \n\n\n\n
    • Social connections.
    • \n
    \n\n\n\n

    This enriched data collection happens without requesting additional information from users during sign-up. Instead of presenting new users with lengthy forms asking for profile details, applications can pull this information automatically through the Gravatar API.

    \n\n\n\n

    The benefits extend beyond the initial sign-up. With comprehensive profile data available immediately, applications can create personalized experiences from the first interaction:

    \n\n\n\n
      \n
    • Customized welcome messages using the user’s name.
    • \n\n\n\n
    • Interface language set to user preferences.
    • \n\n\n\n
    • Content recommendations based on stated interests.
    • \n\n\n\n
    • Contextual features based on professional background.
    • \n\n\n\n
    • Team collaboration suggestions using work history.
    • \n\n\n\n
    • Social connections through matched interests.
    • \n\n\n\n
    • Location-based content and recommendations.
    • \n
    \n\n\n\n

    Implementing Gravatar also helps solve common onboarding challenges:

    \n\n\n\n
      \n
    • Reduces form abandonment by minimizing required fields.
    • \n\n\n\n
    • Eliminates the need for users to upload profile pictures.
    • \n\n\n\n
    • Maintains consistency across multiple platforms.
    • \n\n\n\n
    • Allows users to update their information in one place.
    • \n\n\n\n
    • Supports both individual and role-based personalization.
    • \n\n\n\n
    • Enables automatic profile updates across integrated services.
    • \n
    \n\n\n\n

    The system respects user privacy by letting individuals control what information they share. Users can maintain multiple profiles with different levels of detail tied to separate email addresses, giving them full control over their online presence while still providing valuable data for personalization.

    \n\n\n\n\"Example\n\n\n\n

    For developers, integration is straightforward through the REST API, with comprehensive documentation and support available. And since Gravatar is free for both users and developers, it offers a cost-effective way to enhance sign-up flows and improve user engagement from the start. The API’s design focuses on developer experience, making it simple to implement and maintain while providing powerful personalization capabilities.

    \n\n\n\n

    Real-world examples: Successful Gravatar implementations

    \n\n\n\n

    Let’s see how different websites use Gravatar to make signing up and getting started super simple. 

    \n\n\n\n

    OpenAI offers a perfect example of a streamlined approach: 

    \n\n\n\n
      \n
    1. Users sign up with their email and create a password.
    2. \n
    \n\n\n\n\"Creating\n\n\n\n
      \n
    1. Their profile picture automatically appears from Gravatar. 
    2. \n
    \n\n\n\n\"Profile\n\n\n\n

    No extra steps are needed. This small touch adds a personal element to their AI platform experience right from the start.

    \n\n\n\n

    WordPress.com takes this integration even further. When someone signs up, the platform automatically pulls in everything from their Gravatar profile – their bio, display name, social links, and even their location and interests. 

    \n\n\n\n\"Profile\n\n\n\n

    This means new bloggers can jump right into writing instead of spending time filling out profile forms. Plus, any changes they make to their Gravatar profile automatically update across all their WordPress sites.

    \n\n\n\n

    Other popular platforms also use Gravatar in creative ways to make things easier for their users:

    \n\n\n\n

    Developer platforms:

    \n\n\n\n
      \n
    • GitHub shows Gravatar avatars next to code contributions, helping developers build recognition in open-source communities.
    • \n
    \n\n\n\n\"Profile\n\n\n\n
      \n
    • GitLab uses Gravatar to personalize project dashboards and team features.
    • \n
    \n\n\n\n

    Collaboration tools:

    \n\n\n\n
      \n
    • Figma automatically loads team member profiles to help people connect faster.
    • \n\n\n\n
    • Slack shows profile pictures in chat to help teammates recognize each other.
    • \n\n\n\n
    • Trello adds Gravatar photos to cards and boards to make project tracking more personal.
    • \n
    \n\n\n\n

    The best part? Users only need to update their info in one place – their Gravatar profile. That single update gets reflected everywhere they use these tools, making it super convenient to keep a consistent online presence.

    \n\n\n\n

    Optimizing mobile sign-up experiences

    \n\n\n\n

    Making sign-ups work smoothly on mobile devices has become essential, with mobile traffic now exceeding 60% of all web visits. But mobile users face unique challenges – smaller screens, touch interfaces, and often spotty connections. Here’s how to create a mobile-friendly sign-up flow that gets results.

    \n\n\n\n

    Start with the basics: optimize every element for touch. 

    \n\n\n\n
      \n
    • Buttons need to be at least 44×44 pixels, with enough spacing to prevent accidental taps. 
    • \n\n\n\n
    • Make forms finger-friendly by adding ample padding between fields. 
    • \n\n\n\n
    • Stick to readable font sizes – 16px minimum for text inputs to prevent automatic zooming.
    • \n
    \n\n\n\n

    Smart keyboard handling makes a big difference too. Set the right input types (email, tel, number) so users get appropriate keyboards. Group similar fields together to minimize keyboard switches. For example, keep all text fields together, then numeric fields.

    \n\n\n\n

    Simplify data entry by:

    \n\n\n\n
      \n
    • Enabling autofill where possible.
    • \n
    \n\n\n\n\"Example\n\n\n\n
      \n
    • Offer social login options optimized for mobile.
    • \n
    \n\n\n\n\"Example\n\n\n\n
      \n
    • Using Gravatar to auto-populate profile info from email addresses.
    • \n\n\n\n
    • Adding real-time validation to catch errors early.
    • \n
    \n\n\n\n\"Example\n\n\n\n

    Break up longer forms into logical steps with clear progress indicators. Each step should fit comfortably on a mobile screen without scrolling. And remember – every field you require is another chance for users to abandon the process. Only ask for what’s absolutely necessary.

    \n\n\n\n

    Finally, test your flow on multiple devices and screen sizes. What works on a large iPhone might be frustrating on a smaller Android phone.

    \n\n\n\n

    Get started with Gravatar’s developer tools

    \n\n\n\n

    Ready to streamline your sign-up process with Gravatar? Their developer tools make integration surprisingly simple. The new REST API gives you instant access to user profiles with just a few lines of code.

    \n\n\n\n

    Getting started takes just three steps:

    \n\n\n\n
      \n
    • Register for a free API key at Gravatar’s Developer Dashboard.
    • \n\n\n\n
    • Use the interactive console to test API endpoints.
    • \n\n\n\n
    • Follow the comprehensive documentation to add Gravatar to your app.
    • \n
    \n\n\n\n

    The API lets you fetch rich user data like:

    \n\n\n\n
      \n
    • Profile pictures and avatars.
    • \n\n\n\n
    • Display names.
    • \n\n\n\n
    • Professional details.
    • \n\n\n\n
    • Social links.
    • \n\n\n\n
    • Location preferences.
    • \n\n\n\n
    • Custom profile fields.
    • \n
    \n\n\n\n

    Best of all, users control what information they share. You just need an email address to start pulling available profile data. This balance between functionality and privacy makes Gravatar great for both developers and users.

    \n\n\n\n

    Want to explore more? Get in touch with our team today, and we can discuss specific integrations for your platform. 

    \n\n\n\n\"\"\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 22:19:10 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:11:\"Ronnie Burt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:45;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:40:\"WordPress.org blog: WordPress 6.8 Beta 2\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=18619\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:56:\"https://wordpress.org/news/2025/03/wordpress-6-8-beta-2/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:5846:\"

    WordPress 6.8 Beta 2 is now ready for testing!

    \n\n\n\n

    This beta version of the WordPress software is under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites.  Instead, you should evaluate Beta 2 on a test server and site.

    \n\n\n\n

    You can test WordPress 6.8 Beta 2 in four ways:

    \n\n\n\n
    PluginInstall and activate the WordPress Beta Tester plugin on a WordPress install. (Select the “Bleeding edge” channel and “Beta/RC Only” stream.)
    Direct DownloadDownload the Beta 2 version (zip) and install it on a WordPress website.
    Command LineUse this WP-CLI command: wp core update --version=6.8-beta2
    WordPress PlaygroundUse the 6.8 Beta 2 WordPress Playground instance to test the software directly in your browser.  No setup is required–just click and go! 
    \n\n\n\n

    The current target date for the final release of WordPress 6.8 is April 15, 2025. Get an overview of the 6.8 release cycle, and check the Make WordPress Core blog for 6.8-related posts in the coming weeks for more information.

    \n\n\n\n

    Catch up on what’s new in WordPress 6.8: Read the Beta 1 announcement for details and highlights.

    \n\n\n\n

    How to test this release

    \n\n\n\n

    Your help testing the WordPress 6.8 Beta 2 version is key to ensuring everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally important.  This detailed guide will walk you through testing features in WordPress 6.8.

    \n\n\n\n

    If you encounter an issue, please report it to the Alpha/Beta area of the support forums or directly to WordPress Trac if you are comfortable writing a reproducible bug report. You can also check your issue against a list of known bugs.

    \n\n\n\n

    Curious about testing releases in general? Follow along with the testing initiatives in Make Core and join the #core-test channel on Making WordPress Slack.

    \n\n\n\n

    Vulnerability bounty doubles during Beta/RC

    \n\n\n\n

    Between Beta 1, released on March 4, 2025, and the final Release Candidate (RC) scheduled for April 8, 2025, the monetary reward for reporting new, unreleased security vulnerabilities is doubled. Please follow responsible disclosure practices as detailed in the project’s security practices and policies outlined on the HackerOne page and in the security white paper.

    \n\n\n\n

    Beta 2 updates and highlights

    \n\n\n\n

    WordPress 6.8 Beta 2 contains more than 14 Editor updates and fixes since the Beta 1 release, including 21 tickets for WordPress core.

    \n\n\n\n

    Each beta cycle focuses on bug fixes; more are on the way with your help through testing. You can browse the technical details for all issues addressed since Beta 1 using these links:

    \n\n\n\n\n\n\n\n

    A Beta 2 haiku

    \n\n\n\n

    Second wave refines,
    Lines of code like rivers flow,
    WordPress finds its form.

    \n\n\n\n

    Props to @ankitkumarshah @vgnavada @krupajnanda @michelleames @audrasjb @marybaum @ecgan for proofreading and review.

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 15:46:13 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:12:\"Jeffrey Paul\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:46;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:63:\"Do The Woo Community: What’s a WordPress Site Without a Blog?\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:43:\"https://dothewoo.io/?post_type=blog&p=92636\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:63:\"https://dothewoo.io/blog/whats-a-wordpress-site-without-a-blog/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:179:\"In September 2024, we relaunched our community-focused blog, emphasizing its importance for site substance while highlighting the relevance of blogging amidst evolving technology.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 11:01:14 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:47;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:108:\"Do The Woo Community: Securing the Supply Chain, Insights from the WordPress 6.8 Update with John Blackbourn\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"https://dothewoo.io/?p=92331\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:106:\"https://dothewoo.io/securing-the-supply-chain-insights-from-the-wordpress-6-8-update-with-john-blackbourn/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:250:\"John Blackbourn discusses significant security enhancements in WordPress 6.8, notably switching to Bcrypt for password storage. The conversation highlights evolving perceptions of open-source security and upcoming events like the CloudFest Hackathon.\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Mar 2025 10:08:00 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"BobWP\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:48;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:113:\"Gutenberg Times: Gutenberg Changelog 115 – Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"https://gutenbergtimes.com/?post_type=podcast&p=37944\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:87:\"https://gutenbergtimes.com/podcast/gutenberg-changelog-115-wordpress-6-8-wordcamp-asia/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:43300:\"

    Birgit Pauli-Haack and Jessica Lyschik talked about Gutenberg Releases 20.2, 20.3, 20.4, WordPress 6.8 and WordCamp Asia

    \n\n\n\n

    Show Notes / Transcript

    \n\n\n\n\n\n\n\n

    Show Notes

    \n\n\n\n

    Special guest: Jessica Lyschik

    \n\n\n\n\n\n\n\n

    Community Contributions

    \n\n\n\n\n\n\n\n

    What’s released

    \n\n\n\n\n\n\n\n

    What’s in active development or discussed

    \n\n\n\n\n\n\n\n

    Stay in Touch

    \n\n\n\n
    \n\n
    \n\n\n\n

    Transcript

    \n\n\n\n

    Birgit Pauli-Haack: Hello and welcome to our 115th episode of the Gutenberg Changelog podcast. In today’s episode, we will talk about Gutenberg releases 20.2, 20.3, and 20 .4, and a little bit of WordPress 6.8 and WordCamp Asia. I’m your host, Birgit Pauli-Haack, curator at the Gutenberg Times and a WordPress developer advocate working for Automattic and still recovering from my cold that I brought back from Manila.

    \n\n\n\n

    And today, I’m happy to get to chat again, it was Jessica Lyschik, front-end developer at Greyd and also core contributor to the WordPress open source project. We both just returned from WordCamp Asia.

    \n\n\n\n

    Hello, Jessica. How are you today? How is your jet lag?

    \n\n\n\n

    Jessica Lyschik: Hey, thanks for having me. I think the jet lag is, by now, done, I would say. So I’m back to the European time zone, but I also caught a bug after returning and had to take off a couple of days to get better. But by now, it’s like another week has passed. I’ve been working normally and yeah, I’m back to normal and preparing for the next event next week, which is CloudFest.

    \n\n\n\n

    Birgit Pauli-Haack: You’re going to CloudFest. Wonderful.

    \n\n\n\n

    Jessica Lyschik: Yeah.

    \n\n\n\n

    Birgit Pauli-Haack: I had to cancel my participation in CloudFest because I have a bum knee. And my doctor said, “Well, going to another congress where you run around like crazy from one thing to the next, it’s probably not conducive to your healing that bum knee.” It sucks at one point, yeah. But on the other hand, “Okay. I don’t have to travel.” It’s another… Yeah, I can concentrate on some of the work again.

    \n\n\n\n

    Jessica Lyschik: And get enough sleep, which is something you do not get on conferences and stuff like that.

    \n\n\n\n

    Birgit Pauli-Haack: Right. Especially, CloudFest. I think every evening there is a festival or a party or something.

    \n\n\n\n

    Jessica Lyschik: You can actually make it work. I do it the same on WordCamps. It’s the same for me. So it’s just when you are deciding where do you want to go, maybe not just be there as the first person and leave as the last person. But come late, leave early, and then just try to make it work for you. And it’s, of course, different for everyone. Some people are just like, they want to be everywhere and they need to go everywhere. And I’m more like, I need some breaks in between because otherwise that’s not going to work.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, I’m pretty much the same way. However, sometimes I’m just so present in the moment, in the conversation, that I can really lose track of time. And then these are people I’ve never going to see for the next year or so, or maybe two. So at least, that was at WordCamp Asia. Where you’re only going to go to that particular family reunion and almost feels like that. Once a year and you need to catch up on what happened with other people, and there were so many good things to happen.

    \n\n\n\n

    WordCamp Asia                                                       

    \n\n\n\n

    So, what are your takeaways from WordCamp Asia? Do you have anything that will say, “Okay. Yeah, that was very surprising”? Interesting. New.

    \n\n\n\n

    Jessica Lyschik: It has been my first time to the Philippines, I don’t know about you, but I think it has been a very interesting couple of days there in Manila. I did not get to see so much about Manila itself, unfortunately. The jet lag coming to Manila also hit me very hard. So the day I had planned to do something, go out somewhere did not happen. But I saw the Mall of Asia, which was like a gigantic mall where you could get your daily steps in very easily and not walk around the same circle for 10 times or something like that.

    \n\n\n\n

    What I found very interesting was the food. I think the food was pretty good there. There was a lot of variety. We had a lot of Filipino food during the conference days, which I found pretty amazing. There’s a lot of seafood and fish in there. I’m not such a fan of seafood, but I tried the other things and they were all pretty good. So, I did not have anything that I didn’t like.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah. I was really… Not surprised, but it was quite unusual that the vegetarian as well as the vegan options are so particularly tasteful and very… I have a big variety there.

    \n\n\n\n

    Jessica Lyschik: That’s true.

    \n\n\n\n

    Birgit Pauli-Haack: And I got to chat with Dan, who is a former chef, who was on the organizing team and responsible for all the food. And he just has such a passion for the Filipino food and knows everybody in Manila to pick the right caterer for the events. It was really interesting, yeah. I also got to talk with a lot of Automatticians, but they all had the same T-shirt on, so all of a sudden, I was recognizing my fellow, my coworkers. And we don’t get to see each other during the year, especially in other teams so much. So, it was really interesting for me.

    \n\n\n\n

    I like to hang out at the Do The Woo. Bob had… I think he started that last year in WordCamp Europe, that he is actually a sponsor and has a spot in the sponsor hall where people can hang out. And he invites his cohorts to spend an hour there. Or other people that he collaborates with, to just spend an hour there. So they can also say to their friends, “Okay. If you want to talk to me, I’m at that hour, at the Do The Woo booth.”

    \n\n\n\n

    Jessica Lyschik: Oh, nice.

    \n\n\n\n

    Birgit Pauli-Haack: But that was an interesting experience, yeah. So, I did that. And I was surprised how many people are actually in my talk because the such a niche topic which was about Playground and how to create demos with blueprints. And being the last session before Matt’s keynote and Q&A, I thought maybe they’re not going to be a whole lot of people in that talk, but I was surprised. There were, at least, 50 or 60 people there. Yeah, it was cool.

    \n\n\n\n

    Jessica Lyschik: Yeah. Well, that’s nice.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah.

    \n\n\n\n

    Jessica Lyschik: I was there too, I have to say.

    \n\n\n\n

    Birgit Pauli-Haack: Oh, right.

    \n\n\n\n

    Jessica Lyschik: I was at the very far back. Yeah, but it was quite interesting to go back and see, “Okay, this is…” I already know what blueprints are so it’s not that big of a deal, but going into the details again, it’s like, “Oh yeah, I remember that. Oh, I forgot this. Oh, okay.”

    \n\n\n\n

    So, it was a very good thing.

    \n\n\n\n

    Birgit Pauli-Haack: That was good. Yeah, good. So it was something for beginners, for the intermediate, and for the advanced. I was hoping about that. We will have WordCamp Europe.                                                       

    \n\n\n\n

    Oh, I’m not saying that. It’s not out yet. But yeah, announcements will come.

    \n\n\n\n

    Jessica Lyschik: Nice. I had a pretty good Speed Build as well with Nick, and that was a lot of fun. Nick tried to tackle the website with AI, or at least the top part with the slider with AI. Unfortunately, people said I won. I think Nick also did a great job. I felt a bit sad. Everyone’s clapping for me and cheering for me more than for Nick. It was like a bit disappointing. It’s like he tried. I would’ve never tried this with AI because I do not have the patience in 30 minutes to create something with AI. So I decided just to go, “Okay, do it in normal stuff. Just build some blocks, build some patterns there and do it.” But it was a lot of fun and it was great to see that afterwards, Nick also tried to not fix it, but further enhance it to make it an actual usable block.

    \n\n\n\n

    That was pretty cool to see. He showed me the demo the next day. That was very nice.

    \n\n\n\n

    Birgit Pauli-Haack: And I think he blogged about it.

    \n\n\n\n

    Jessica Lyschik: Yes, he did.

    \n\n\n\n

    Birgit Pauli-Haack: So, I’m going to share that link in the show notes when I find it fast. Yes, Speed Build Carousel Block. Because people are always asking for carousel blocks. Why isn’t that in community, I say. I’m going to put it in a community contributions. You’ll find it in show notes.

    \n\n\n\n

    I think the two of you saying, “Okay, I’ll go back to what I know, what is fast, and what I know how to accomplish.” And then the other approach was that, “Well, let’s, under pressure, do something new.” But it’s also the, how do you approach learning new things? And sometimes you say, “Okay, I’m not going to learn it because I need to get my stuff done, and I know how to do this and I get it done.” When you learn new things, your task becomes more as an inspiration rather than the success because you might not end up accomplishing your task with the new thing. Because of course you are in a learning mode, you need to learn a lot.

    \n\n\n\n

    So, I compare that with my first experience with the spreadsheet on the computer, MultiPlan was that. So I’m dating myself, but yeah, it was in the early ’90s. MultiPlan was even ahead of Excel from Microsoft. I had a big spreadsheet from the accountant and I said, “Oh, that should be much easier to be done in a spreadsheet on a computer.” So I spent all day, or all night actually, learning how to do this and put the spreadsheet in. But of course, it took me 6 or 8 hours. And if I would’ve done it just with a calculator, I would’ve calculated the whole spreadsheet probably in two hours or something like that. So, it’s not how long it takes to do something the first time when you learn this. It’s how long it takes when you do it a second time, because you need to discard the first time most of the time.

    \n\n\n\n

    And I found that a lot of people who learn block development, what took me a half an hour with short code took me three days in doing it as a block. I said, “Yeah, that’s the first time you learn of things. Of course, it takes longer. Of course, it takes… You’re all going to changing your brain into the new paradigm. But how long does it take the second time around? Is it faster or is it better?” Anyway, this is the philosophical Birgit in a horsey voice. Let’s go back.

    \n\n\n\n

    So WordCamp Asia, it was the first time for me in the Manila, and I actually planned a couple of days. Not a couple, a few days. Four days. Did some sightseeing, so I went to the historic sites of the Spanish occupation. I saw the monument for the atrocities that happened in the Second World War, and I learned about the current contemporary arts in two art museums. And I went downtown to the new business district there with a nice park and shops left and right on the street. It’s a pedestrian area. It’s beautifully done. And I also discovered a few street art that were purposefully put on that place as well.

    \n\n\n\n

    So, that was quite interesting. Of course, I overdid it and I got my bum knee from there. So yeah, it was a little painful than going on the conference and going in the… The venue was quite vast, I found. 

    \n\n\n\n

    Jessica Lyschik: You had to walk a lot?

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, you had to walk a lot. But I found all the escalators, so that was good. I didn’t have to do stairs so much. But yeah, it was a walk a lot. I like the Automattic booth was really big, but there was other… Hostinger was really big out of the usual. I also saw Mark Westguard of this WS Forms. He is on every flagship and shows off his plugin. I have to think really hard to get back to that because there’s the whole week, two weeks after that that already took over my life.

    \n\n\n\n

    Community Contributions                                                       

    \n\n\n\n

    Which brings us back to, “Okay, let’s record that rest of the show.” So, we had a few releases. So on the developer blog, Robert Meszaros published an article on customizing WordPress embeds to match your theme. And I think that’s very interesting to an approach to make sure that all the embeds that you use are actually matching your theme and you don’t use it out of the box. So he has some nice examples in there, and some great code snippets in how to do all of that. It’s definitely something to go back to, to make a better theme or a better site view for that.

    \n\n\n\n

    Jessica Lyschik: Yeah, I think it’s a nice finishing touch when you’re creating a new website that really embraces embeds. I didn’t know about this, to be honest. I just saw it today. And I think it’s really great. It’s not something super big, but when you have a brand new website and have put so many thoughts and hours into the design, and then there comes this embed that just looks like it’s not meant to be on this website, then I think this is a great example of how tweaking the sites essentially can make an embed also look like it’s part of the website and not just some part of default WordPress that just pops up somewhere.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, that hasn’t gotten a whole lot of love.

    \n\n\n\n

    Jessica Lyschik: Yeah, that’s true.

    \n\n\n\n

    Birgit Pauli-Haack: So, he shared this. For instance, one example is that out of the box, the featured image of a post that you embed has some border around, and he just shows you how to make that image go all the way to the corners. That’s such a small little detail, but it shows the attention to detail. And when you have all your cards that you have, your postcards in the query loop all having the same design, and all of a sudden, the embed doesn’t… It really stands out. It doesn’t… And it also distracts the reader from, “Why is this different? What I haven’t seen yet?” It has some nice little features on how to change things. Some great sailing pictures here. So, take a look at that and spruce up your site with some of the little things and big things.

    \n\n\n\n

    What’s Released – Gutenberg 20.2                                                       

    \n\n\n\n

    All right. So now, we come to Gutenberg 20.2 that was released in January, to be exact.

    \n\n\n\n

    Jessica Lyschik: End of January, I think.

    \n\n\n\n

    Birgit Pauli-Haack: Do you want to start out with what we are talking about?

    \n\n\n\n

    Jessica Lyschik: Yeah. So, this was one of the two. I think I did the Gutenberg blog post on this one. So yeah, this wasn’t such a big release. It was rather small compared to the previous ones. Also, it was combined with, I think, 21.

    \n\n\n\n

    Birgit Pauli-Haack: 21, yep. And we talked about that.

    \n\n\n\n

    Jessica Lyschik: 20.1 release? Yeah. So, there isn’t that much going on in this release. It’s rather smaller bug fixes and some polishing overall. And I think one of the interesting things was that in the post content, you can now define the heading colors on a more global level. I think this was also a highlight from my blog post when I remember correctly.

    \n\n\n\n

    Birgit Pauli-Haack: Mm-hmm. Yeah, I really like that you can now have the details block be more like an accordion with a name attribute. So it’s not in the UI, but you can do it in the… It’s in the UI, but you have to go to the advanced section to give all.

    \n\n\n\n

    Jessica Lyschik: Oh, okay.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, to give it all. To get this all done. It’s not for someone who doesn’t know what to do, that kind of thing. It’s not intuitive for site builders, so you need to give it a block name so it shows up as a summary. A block name about a name attribute.

    \n\n\n\n

    Jessica Lyschik: Oh. So, when you give it the name.

    \n\n\n\n

    Birgit Pauli-Haack: Sorry. Yeah, you need to give it a name attribute in the advanced section so the CSS that is built knows, “Okay. This is all one section. And one is open, the other ones are closed.” So, it kind of has accordion package.

    \n\n\n\n

    Jessica Lyschik: So they all need to have the same name in this name tag, so then it automatically brings this only one of these sections is open. Okay, got it. Apparently, I missed that one.

    \n\n\n\n

    Birgit Pauli-Haack: Well, great.

    \n\n\n\n

    Jessica Lyschik: But it’s okay. Now, we talked about it.

    \n\n\n\n

    Birgit Pauli-Haack: Right. Yeah, that’s what we’re here for. Two eyes see more than one. Four eyes see more than two.

    \n\n\n\n

    Jessica Lyschik: Definitely.

    \n\n\n\n

    Birgit Pauli-Haack: I also wanted to point out that the WP env local development tool now has WP-MyAdmin support as well as Multisite support. It had it before, but now it’s also documented so you know how to use it. That’s why I wanted to point it out because…

    \n\n\n\n

    Documentation

    \n\n\n\n

    Jessica Lyschik: Oh, I didn’t know it had this. You had this phpMyAdmin in the WP env.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah.

    \n\n\n\n

    Jessica Lyschik: I’m not using PHP. We are so confused. I’m not using WP nth Multi… Multisite or WP env fit-all?

    \n\n\n\n

    Birgit Pauli-Haack: WP env.

    \n\n\n\n

    Jessica Lyschik: Ah, okay.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah. It’s when you’re working on Gutenberg, on your Gutenberg, something you can do. Just WP nth and it spins up a local WordPress instance with that particular folder. It also supports Multisite that came with 20.8.

    \n\n\n\n

    Jessica Lyschik: Interesting.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, you’re right. There were quite a few bug fixes in there and some polish in terms of previews. And also, some panel changes that have been in the last few Gutenberg releases, and also for the ones for the next. That’s a refactor of things. It was 20.2. I don’t think there’s anything else.

    \n\n\n\n

    Jessica Lyschik: It’s a bit tricky with the numbers of 20.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah. God.

    \n\n\n\n

    Jessica Lyschik: … in the brains of WordPress people.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah. So that brings us to 20.3, which was released just two weeks ago.

    \n\n\n\n

    Gutenberg 20.3

    \n\n\n\n

    Jessica Lyschik: We were all hanging out in Manila.

    \n\n\n\n

    Birgit Pauli-Haack: Well, it was actually before or right on February 18th and it was released. Yes, we were all hanging out already. On travel, on planes. Yeah, my plane was… I was…

    \n\n\n\n

    Jessica Lyschik: On planes, yeah.

    \n\n\n\n

    Birgit Pauli-Haack: So, it was 12 hours to Singapore and then there’s another 3 1/2 hours from Singapore to Manila.

    \n\n\n\n

    Jessica Lyschik: Oh, I did the same route.

    \n\n\n\n

    Birgit Pauli-Haack: It was kind of 15 hours flight, but then you have to be 2 or 3 hours earlier at the airport. You have a layover in Singapore, and then you have to transfer from the airport to the hotel and…

    \n\n\n\n

    Jessica Lyschik: Yeah. I think I calculated something, like 23, 24-ish hours door to door, so it’s not just like a 15 hour flight. But yeah, you have to count in all the waiting time. I had to travel to Munich airport two hours, so that all adds up to this whole ordeal of…

    \n\n\n\n

    Traveling to Asia is easy. No, it’s not.

    \n\n\n\n

    Enhancements

    \n\n\n\n

    Birgit Pauli-Haack: No, it’s not. Yeah. So Gutenberg 20.3 also has a not particular big features coming in, but some nice additions. And one of them is that the social links now of a Discord logo that you can add to it. The query block now, that is really nice. It has an option to ignore sticky post. It took a while to get the sticky post into the filter, but then there’s also the need that sometimes you need a query loop that ignores the sticky post.

    \n\n\n\n

    Jessica Lyschik: Yeah. It’s definitely something that you’re used to this when you’re doing classic themes and just have all the opportunity with the WP query nth function. And it’s great to see that these little things and… Even if you do not use them that often, that these are still now available. That just makes transitioning to block themes and block inside it are so much better because you finally have all the options. But maybe not all yet for the query loop, but we are getting there. Let’s put it like that. We are getting there.

    \n\n\n\n

    Birgit Pauli-Haack: For sure, yeah. There was a major push in that.

    \n\n\n\n

    Do you want to take the next one?

    \n\n\n\n

    Jessica Lyschik: The yet another one of completing the options that you have on block is the RSS block got border and spacing support. And also, duotone settings got improved, they now have a reset button and improved toggle rendering. Let’s have a look what this does.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, the reset button has gotten quite the attention now that it was missing on a few of those color pickers or so, or panels. So, what did you find out?

    \n\n\n\n

    Jessica Lyschik: Oh. I think it’s also, these are such tiny changes. But once you have them, you realize it’s so much easier to clear colors or remove something that you would have needed another four clicks or something, and then it’s just one. So it doesn’t seem like big things, but it slowly improves over time. And I think this is what the editors actually need right now, this refinement. Because there’s always been in the past pushing big projects, new features, and now it’s more like, “Okay, we are in the situation, but the best we can do is basically to do the housekeeping and fix the smaller things and polish it.”

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, and the smaller things.

    \n\n\n\n

    I think it’s for the user. Very important to have a consistent interface. So, if you put a background color in and you have a reset button, why don’t you have a reset button on the shadows? So, shadow panel. Or why can’t I have a reset button on the text color, for instance, if it was missing. So it’s definitely, you cannot take that cognitive load. You lower that quite a bit by having an inconsistent interface. Also, with border and spacing support, if the block doesn’t have it and all of a sudden it doesn’t match what you want, then you go over looking for things. And the spacer block is not always the best solution for things. It’s not a bad solution, but it’s not the best because once a panel gets or a block gets spacing support, now you have to chase down all the spacer blocks to take them out. So, it’s kind of interesting.

    \n\n\n\n

    Jessica Lyschik: That’s true, yeah.

    \n\n\n\n

    Birgit Pauli-Haack: The next one is there was a bug fix or maybe a revert on the quick inserter, that it didn’t search the patterns anymore when you put a search parameter in there. And that has been restored. So I think although that’s bug fix, or I think it’s bug fix, it’s definitely worth pointing out. So, a missing feature comes back. Yay.

    \n\n\n\n

    Jessica Lyschik: We just talked about it having the same options on blocks. Like, archives and categories got the color support. So, you can now have select colors on the archives and category blocks. Yet another one of those because then, people try.

    \n\n\n\n

    If you do not have them, it’s like, what do these blocks do not have? Why can I not change the color there? Then, people go to CSS and then it’s not needed actually if these settings would just be provided right from the start. But yeah, it’s like a living project. So, here we are.

    \n\n\n\n

    Birgit Pauli-Haack: Or what I always did when I didn’t have color support, I put it in a group block, and then of course it blows up the nesting of my blocks. So there are always ways around it, but once things then come into the editor, you need to think about how your workaround needs to be worked around.

    \n\n\n\n

    So, I think those were the few things that I wanted to point out. Did you see anything else that you wanted to point out?

    \n\n\n\n

    Jessica Lyschik: No, I don’t think so, but I’ve been just scrolling through it. It’s been a good chunk of bug fixes, some accessibility improvements, some performance improvements, good quality tools.

    \n\n\n\n

    Gutenberg 20.4

    \n\n\n\n

    Birgit Pauli-Haack: All right. That brings us to Gutenberg 20.4, which is also the last Gutenberg release for which the enhancements made it into 6.8. After that, it’s all bug fixes that go into the release, and any new enhancements coming into Gutenberg will be reserved for the next release. What is it? 6.9? We don’t know yet when that’s going to be, but…

    \n\n\n\n

    So, what’s in there? There is a conditional enable the new default rendering mode for pages. I highlighted that. And I heard from quite a few people that they like that there is a default rendering mode for pages, but I have not seen yet the use case for it. So, why are people so excited about this? But yeah.

    \n\n\n\n

    Jessica Lyschik: That’s a very good question. You already had this show template. That’s already in there. That’s a good question. Why it’s so hyped? Maybe, I need to test it out. That’s probably a problem.

    \n\n\n\n

    I haven’t gotten to looking at the latest releases on an actual site yet because WordCamp Asia, being sick, being busy at work, life happens. I only heard this week, things were a bit off, and template parts were actually missing from if you had 6.8 Beta 1 running. So there have been some hiccups there as well,

    \n\n\n\n

    Birgit Pauli-Haack: Yeah. We definitely need to track that down here. So now, there is a persistence. So you could have a show template preferences, but now there are also sport, which is pretty cool. There was a time where you started with a new page, and first you saw all the patterns that are labeled for new pages, page layouts. That modal was removed, and now it’s back. So, it’s a 50/50 thing what people want and what don’t want when they use that. So, that’s also an interesting development.

    \n\n\n\n

    Jessica Lyschik: I mean, the problem with the modal… I mean, it wasn’t removed. There was an option, because I worked on this part as well. It got an option to be disabled in the settings when you’re on a site where you have to add new pages over and over again, and you know what you want to put on a page. You do not need this modal popping up every time. So, it was more of a user enhancement so that you can decide, “Okay, do I need this model every time or do I just turn it off?” So, there was that part.

    \n\n\n\n

    I’m not aware if it’s back yet. I heard people saying to remove it completely. But yeah, there’s a lot of different use cases how you would like to… Some people want the model always to be on because they don’t know what they are doing, basically. They just want to pop on a template or a pattern there and are good to go. And there are people who would like to just start writing first. There are people who maybe, want to use it but don’t want to be bothered all the time. It’s one of these things where a lot of different use cases clash together, and then it’s just so hard to actually find what is it, where is the…

    \n\n\n\n

    Birgit Pauli-Haack: The middle ground there.

    \n\n\n\n

    Jessica Lyschik: What’s the thing? Where’s the middle ground that we can go and implement it that way? So, kind of everyone or the majority of people is okay with it. There will always be people who are like, “I don’t like this. I want it to be different.”

    \n\n\n\n

    Birgit Pauli-Haack: Right.

    \n\n\n\n

    Jessica Lyschik: But that’s basically impossible to make it happen for everyone.

    \n\n\n\n

    Birgit Pauli-Haack: Right, yeah. Another problem was when you say, “Oh, I don’t want the starter modal,” it was hard to get the layouts, if you wanted, to get to patterns and get the layouts because there was no category for that. So, you had to assemble them from a list of patterns or from multiple pattern categories to put those page layouts together. And I think… I don’t know if it’s here or it was in an earlier version where they restored or created a category for patterns for the starter content. I think that was part of that, or how can we do that better for our users.

    \n\n\n\n

    So there is now a pop-over on the left-hand side to show post template. If there is one to give you additional options, I think there. The next thing is that pull quote finally has the assignment styles that was missing for a long time. That you couldn’t do left, right and all of that, or wide. So, it has it now. It’s all about persistence. And border control got the reset button.

    \n\n\n\n

    Jessica Lyschik: Yes. It’s, again, these tiny things that make or break something, or your experience.

    \n\n\n\n

    Bug Fixes

    \n\n\n\n

    Birgit Pauli-Haack: Right. And post comments count also have received border support. That’s cool. So now, you can have it stand out some more. Post formats have still be a little bit of a hit-and-miss with the block themes, but sometimes somebody says, “Okay, well let’s fix that some of the things.” And now, you see title and description for post formats in your templates. So in the list of templates, you can now see which are the templates for your image formats, for your link format, and if they are templates for that. So, that’s really cool.

    \n\n\n\n

    And there’s an interesting bug fix that drove me nuts for a while, was that the text and color picker were overlapping each other in the format library. And that is fixed, thank God. Thank you so much. 

    \n\n\n\n

    Documentation

    \n\n\n\n

    And then there are some documents updates. There’s obviously, the problem that a lot of features come in and the documentation hasn’t been updated. So, that has been rectified for the block variations using get_block_type_variationblock. And then also, removes the nodes for block hooks that it only supports static theme elements because that’s not true anymore. Block hooks also support dynamic blocks. All right.

    \n\n\n\n

    Jessica Lyschik: Yeah, nice.

    \n\n\n\n

    Birgit Pauli-Haack: So, that was that for 20.4. That was just released this week, and we are recording this on March 7th. Just to say that.

    \n\n\n\n

    What’s in Active Development & Discussed – WordPress 6.8 Beta                                                       

    \n\n\n\n

    So, what’s an active development? And discussion brings us to WordPress 6.8 in Beta has been released. Beta 1 has been released. And you can follow along on the WordPress.org announcements or news. So, there will be Beta 1, Beta 2, Beta 3 and Release Candidate 1, 2, and 3 before the final release on April 15th. The test team has published, for the last few releases, always a Help Test, the next release. And this one is not different. There’s Help Test WordPress 6.8, and it helps… Well, you can help making this release the best that it can be. Finding all the bugs, not all of it, but report them. Find as much many. Try to break it as often as you can. Report the bugs.

    \n\n\n\n

    And I have found another incentive on, actually, heeding to the call for testing is to learn more about the new features because instructions are very well done, compliments to Krupa Nanda, to learn more about the new features or the enhancements and how are they supposed to work so you can distinguish them. So, is it me that I don’t know how this works? That I don’t get it? Or is that a bug? So, they went to great lengths to do that.

    \n\n\n\n

    You can also use Playground to test things. You don’t have to spin up a new WordPress staging site or something like that to test things. Yeah, you can go to make.wordpress.org/test to find the post or you look for the show notes on the Gutenberg Times and click on that link.

    \n\n\n\n

    So Jessica, the WordPress 6.8 is characterized as a polished release. Is there anything that stands out for you coming to 6.8 that you’re excited about?

    \n\n\n\n

    Jessica Lyschik: I do. It’s a polishing that I think is… I mean, as I said before, given the situation that we are in, I think this is the best that we can do. And yeah, I’ve been just scrolling through these Call for Testing blog posts that you just mentioned. And it is really thoroughly, so I would actually be excited to dive into this and do the testing because this is pretty well done.

    \n\n\n\n

    And I think about 6.8 and the coming releases… I haven’t been paying too much attention to what is in 6.8 apart from a few things that we highlighted today, and I have probably forgotten again because I was just out of the office for two weeks. 

    \n\n\n\n

    Speculative Loading in 6.8

    \n\n\n\n

    I think what’s also interesting is this speculative loading thing. I think there was also just a blog post these days. So, this speculative loading is, when I understood correctly, something like a browser? Like, the browser offers this API and WordPress has added its performance improvements. The performance team will probably come after me if I do not say this correctly. But from what I understood, it’s improving overall performance of a WordPress website by using these speculation rules. So it’s about what can be prefetched or what makes sense to be prefetched next, so that when you actually click on a link on the website, it loads faster because it already knows what I have, what the browser has to load in this case.

    \n\n\n\n

    I think this is something very interesting that might be bumping up the performance of a few websites. So, that will be interesting to see what the actual impact will be once 6.8 is out.

    \n\n\n\n

    Birgit Pauli-Haack: Yeah, I’m excited about that too. I think the browsers are now pretty well caught up with that. Not all browsers have all the features all the time, but this is something that, I think, has a big footprint around all the browsers being Firefox, Safari, Google Chrome.

    \n\n\n\n

    I link in the show notes too, Felix Arntz has published… Has worked on this feature, in the feature plugin before. And now, it’s coming to 6.8 and the dev note has been published now.

    \n\n\n\n

    Jessica Lyschik: I just checked on Can I Use, and it’s actually Safari and Firefox do not support it at the moment. Chrome, Edge, and Opera do. So, there is still a bit of a… It’s not a hundred percent on all browsers, but a good chunk of browsers already support this. So I hope these other browsers, Safari and Firefox, will catch up on this because it sounds pretty promising from a performance point of view to use these speculation rules.

    \n\n\n\n

    Birgit Pauli-Haack: I keep scrolling through the dev notes that have been published. They’re not in bulk coming out until Release Candidate 1, but John Blackburn also published a dev notes about the new encryption for the password hashing.

    \n\n\n\n

    Jessica Lyschik: Oh. Yes, I forgot this one.

    \n\n\n\n

    Birgit Pauli-Haack: Which there’s not a whole lot of things for users to do or even for developers. It’s just to know that the passwords are now hashed differently and increase the security of any of the passwords quite exponentially, which is really good. So, thank you for Felix and John to publish the dev notes early for that.

    \n\n\n\n

    All right, I’m sure we are going to talk about WordPress 6.8 some more on our next show when we know a little bit more what’s in there and what’s not in there. Thank you so much, Jessica, for being here. As always, the show notes will be published on GutenbergTimes.com/podcast. This is episode 115. And if you have questions and suggestions, just send them to Changelog@GutenbergTimes.com.

    \n\n\n\n

    And now, a plea for all those who use Spotify for their podcast pleasure, you can leave comments there. And also, check some of the stars so people know what they can expect on the show when they discover that on Spotify. Shopify. Well, yeah. So, thanks for listening and goodbye until the next time. Thank you, Jessica.

    \n\n\n\n

    Jessica Lyschik: Thank you. Bye.

    \n\n\n\n

    Birgit Pauli-Haack: Bye.

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sun, 09 Mar 2025 09:21:58 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Birgit Pauli-Haack\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}i:49;a:6:{s:4:\"data\";s:13:\"\n \n \n \n \n \n \n\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";s:5:\"child\";a:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:29:\"Matt: Real WordPress Security\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"https://ma.tt/?p=140118\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:4:\"link\";a:1:{i:0;a:5:{s:4:\"data\";s:46:\"https://ma.tt/2025/03/real-wordpress-security/\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:2753:\"

    One thing you’ll see on every host that offers WordPress is claims about how secure they are, however they don’t put their money where their mouth is. When you dig deeper, if your site actually gets hacked they’ll hit you with remediation fees that can go from hundreds to thousands of dollars.

    \n\n\n\n

    They may try to sell you a security plan that for example at Godaddy goes from $300 to $700 a year on top of your hosting. (Don’t be fooled by the low entry price, look at renewal.) It’s heartbreaking to hear stories of non-technical people forced into these high fees to fix something their host should have prevented in the first place.

    \n\n\n\n

    When a host is powered by WP.cloud, it doesn’t need to do this because hacks are so incredibly rare. (That’s why it may appear more expensive, but the total cost of ownership or being a WP.cloud-powered host is much lower when you factor in human time.)

    \n\n\n\n

    One problem we’ve had on WordPress.com is we do all these amazing things and don’t tell anyone about it, something we’re trying to change with our focus this year on developers and developer tooling. One great example is we’re so confident about our security, if your site gets hacked we’ll fix it for free! We’ve actually been doing this for the better part of a decade, just never mentioned it anywhere.

    \n\n\n\n

    Pressable (which is WP.cloud-powered) does a better job talking about these things and has a nice landing page on malware cleaning and hack recovery that says essentially the same thing.

    \n\n\n\n

    WordPress has done a ton over the years to move the hosting industry around upgrading PHP and MySQL, PHP extensions, free SSL, and in general using our clout to advocate for user rights and freedoms from even the largest hosting companies, and I’m proud to say there are a good number, for example the ones you see at WordCamps, that have not just embraced these values but actually been more commercially successful as they’ve done so. I hope security and auto-upgrades not just for core but for plugins and themes becomes the next standard. (Jetpack does this for free, some hosts charge $100/yr per site.)

    \";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}s:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 08 Mar 2025 11:07:49 +0000\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}s:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:4:\"Matt\";s:7:\"attribs\";a:0:{}s:8:\"xml_base\";s:0:\"\";s:17:\"xml_base_explicit\";b:0;s:8:\"xml_lang\";s:0:\"\";}}}}}}}}}}}}}}}}s:4:\"type\";i:128;s:7:\"headers\";O:48:\"WpOrg\\Requests\\Utility\\CaseInsensitiveDictionary\":1:{s:7:\"\0*\0data\";a:9:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Tue, 01 Apr 2025 10:03:24 GMT\";s:12:\"content-type\";s:8:\"text/xml\";s:13:\"last-modified\";s:29:\"Tue, 01 Apr 2025 10:00:30 GMT\";s:4:\"vary\";s:15:\"Accept-Encoding\";s:15:\"x-frame-options\";s:10:\"SAMEORIGIN\";s:16:\"content-encoding\";s:2:\"br\";s:7:\"alt-svc\";s:19:\"h3=\":443\"; ma=86400\";s:4:\"x-nc\";s:9:\"HIT ord 2\";}}s:5:\"build\";i:1743023515;s:21:\"cache_expiration_time\";i:1743545004;s:23:\"__cache_expiration_time\";i:1743545004;}','off'),(203,'_transient_timeout_dash_v2_88ae138922fe95674369b1cb3d215a2b','1743545004','off'),(204,'_transient_dash_v2_88ae138922fe95674369b1cb3d215a2b','','off'); +/*!40000 ALTER TABLE `wp_options` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_postmeta` +-- + +DROP TABLE IF EXISTS `wp_postmeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_postmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `post_id` (`post_id`), + KEY `meta_key` (`meta_key`(191)) +) ENGINE=InnoDB AUTO_INCREMENT=119 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_postmeta` +-- + +LOCK TABLES `wp_postmeta` WRITE; +/*!40000 ALTER TABLE `wp_postmeta` DISABLE KEYS */; +INSERT INTO `wp_postmeta` VALUES (1,2,'_wp_page_template','default'),(2,3,'_wp_page_template','default'),(5,7,'_thumbnail_id','47'),(7,9,'_thumbnail_id','49'),(8,10,'_thumbnail_id','30'),(9,11,'_thumbnail_id','44'),(10,12,'_thumbnail_id','42'),(11,13,'_thumbnail_id','30'),(12,14,'_thumbnail_id','37'),(13,15,'_thumbnail_id','32'),(14,16,'_thumbnail_id','50'),(19,2,'_edit_lock','1742997882:1'),(20,15,'_edit_last','1'),(21,15,'_pingme','1'),(22,15,'_encloseme','1'),(23,15,'_wp_old_date','2025-03-25'),(24,15,'_edit_lock','1742931597:1'),(25,14,'_edit_last','1'),(26,14,'_pingme','1'),(27,14,'_encloseme','1'),(28,14,'_wp_old_date','2025-03-25'),(29,14,'_edit_lock','1742931857:1'),(30,13,'_edit_last','1'),(31,13,'_pingme','1'),(32,13,'_encloseme','1'),(33,13,'_wp_old_date','2025-03-25'),(34,13,'_edit_lock','1742931998:1'),(35,12,'_edit_last','1'),(36,12,'_edit_lock','1742932259:1'),(37,12,'_pingme','1'),(38,12,'_encloseme','1'),(39,12,'_wp_old_date','2025-10-31'),(40,11,'_edit_last','1'),(41,11,'_pingme','1'),(42,11,'_encloseme','1'),(43,11,'_wp_old_date','2025-03-25'),(44,11,'_edit_lock','1742932445:1'),(45,10,'_edit_last','1'),(46,10,'_edit_lock','1742994981:1'),(47,10,'_pingme','1'),(48,10,'_encloseme','1'),(49,10,'_wp_old_date','2025-09-25'),(50,9,'_edit_last','1'),(51,9,'_pingme','1'),(52,9,'_encloseme','1'),(53,9,'_wp_old_date','2025-03-25'),(54,9,'_edit_lock','1742995177:1'),(60,16,'_edit_last','1'),(61,16,'_pingme','1'),(62,16,'_encloseme','1'),(63,16,'_wp_old_date','2025-03-25'),(64,16,'_edit_lock','1742995315:1'),(65,13,'_wp_old_date','2024-12-01'),(66,7,'_edit_lock','1743443206:1'),(67,7,'_pingme','1'),(68,7,'_encloseme','1'),(69,30,'_wp_attached_file','2025/03/photo-1535914254981-b5012eebbd15-scaled.jpeg'),(70,30,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1709;s:4:\"file\";s:52:\"2025/03/photo-1535914254981-b5012eebbd15-scaled.jpeg\";s:8:\"filesize\";i:439216;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1535914254981-b5012eebbd15-300x200.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:9781;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1535914254981-b5012eebbd15-1024x684.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:684;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:77946;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1535914254981-b5012eebbd15-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:5392;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1535914254981-b5012eebbd15-768x513.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:513;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:45623;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1535914254981-b5012eebbd15-1536x1025.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:1025;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:167809;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1535914254981-b5012eebbd15-2048x1367.jpeg\";s:5:\"width\";i:2048;s:6:\"height\";i:1367;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:287704;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"0\";s:8:\"keywords\";a:0:{}}s:14:\"original_image\";s:37:\"photo-1535914254981-b5012eebbd15.jpeg\";}'),(73,30,'_oembed_1408d7503c4135659e536228875088a0','{{unknown}}'),(74,32,'_wp_attached_file','2025/02/photo-1507608616759-54f48f0af0ee-scaled.jpeg'),(75,32,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:1707;s:6:\"height\";i:2560;s:4:\"file\";s:52:\"2025/02/photo-1507608616759-54f48f0af0ee-scaled.jpeg\";s:8:\"filesize\";i:175489;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1507608616759-54f48f0af0ee-200x300.jpeg\";s:5:\"width\";i:200;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:10473;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1507608616759-54f48f0af0ee-683x1024.jpeg\";s:5:\"width\";i:683;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:46226;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1507608616759-54f48f0af0ee-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:6876;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:46:\"photo-1507608616759-54f48f0af0ee-768x1152.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:53990;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1507608616759-54f48f0af0ee-1024x1536.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:80805;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1507608616759-54f48f0af0ee-1365x2048.jpeg\";s:5:\"width\";i:1365;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:124506;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"0\";s:8:\"keywords\";a:0:{}}s:14:\"original_image\";s:37:\"photo-1507608616759-54f48f0af0ee.jpeg\";}'),(78,30,'_wp_attachment_image_alt','Physical Health'),(79,32,'_wp_attachment_image_alt','Travel'),(80,32,'_oembed_1b77ec249b94a1484674c6d916f40581','{{unknown}}'),(81,37,'_wp_attached_file','2025/01/photo-1617624969413-932d9b07f000-scaled.jpeg'),(82,37,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1920;s:4:\"file\";s:52:\"2025/01/photo-1617624969413-932d9b07f000-scaled.jpeg\";s:8:\"filesize\";i:352730;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1617624969413-932d9b07f000-300x225.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:225;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:10982;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1617624969413-932d9b07f000-1024x768.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:768;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:64640;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1617624969413-932d9b07f000-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:7067;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1617624969413-932d9b07f000-768x576.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:576;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:39786;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1617624969413-932d9b07f000-1536x1152.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:135188;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1617624969413-932d9b07f000-2048x1536.jpeg\";s:5:\"width\";i:2048;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:231273;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"0\";s:8:\"keywords\";a:0:{}}s:14:\"original_image\";s:37:\"photo-1617624969413-932d9b07f000.jpeg\";}'),(83,37,'_wp_attachment_image_alt','Good sleep'),(84,37,'_oembed_4202ee2a526ce0c566214afa164b480b','{{unknown}}'),(85,39,'_acf_changed',''),(86,39,'footnotes',''),(87,41,'_acf_changed',''),(88,41,'footnotes',''),(89,42,'_wp_attached_file','2024/10/premium_photo-1683306661472-d7bd9497c82a-scaled.jpeg'),(90,42,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1707;s:4:\"file\";s:60:\"2024/10/premium_photo-1683306661472-d7bd9497c82a-scaled.jpeg\";s:8:\"filesize\";i:454871;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:53:\"premium_photo-1683306661472-d7bd9497c82a-300x200.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:13237;}s:5:\"large\";a:5:{s:4:\"file\";s:54:\"premium_photo-1683306661472-d7bd9497c82a-1024x683.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:92669;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:53:\"premium_photo-1683306661472-d7bd9497c82a-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:7895;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:53:\"premium_photo-1683306661472-d7bd9497c82a-768x512.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:55523;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:55:\"premium_photo-1683306661472-d7bd9497c82a-1536x1024.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:187612;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:55:\"premium_photo-1683306661472-d7bd9497c82a-2048x1365.jpeg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:309848;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"0\";s:8:\"keywords\";a:0:{}}s:14:\"original_image\";s:45:\"premium_photo-1683306661472-d7bd9497c82a.jpeg\";}'),(91,42,'_wp_attachment_image_alt','Traveling the world'),(92,42,'_oembed_cd21d5654ab94168d1c0d70ba337575f','{{unknown}}'),(93,44,'_wp_attached_file','2024/10/photo-1591228127791-8e2eaef098d3-scaled.jpeg'),(94,44,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1707;s:4:\"file\";s:52:\"2024/10/photo-1591228127791-8e2eaef098d3-scaled.jpeg\";s:8:\"filesize\";i:375704;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1591228127791-8e2eaef098d3-300x200.jpeg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:15062;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1591228127791-8e2eaef098d3-1024x683.jpeg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:89427;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1591228127791-8e2eaef098d3-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:8327;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"photo-1591228127791-8e2eaef098d3-768x512.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:56577;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1591228127791-8e2eaef098d3-1536x1024.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:167776;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1591228127791-8e2eaef098d3-2048x1365.jpeg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:264342;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"0\";s:8:\"keywords\";a:0:{}}s:14:\"original_image\";s:37:\"photo-1591228127791-8e2eaef098d3.jpeg\";}'),(95,44,'_wp_attachment_image_alt','Meditating at the beach'),(96,44,'_oembed_04515bbc425980c9e9f9fc927d8deded','{{unknown}}'),(99,47,'_wp_attached_file','2025/03/photo-1553969546-6f7388a7e07c.jpeg'),(100,47,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1336;s:6:\"height\";i:2000;s:4:\"file\";s:42:\"2025/03/photo-1553969546-6f7388a7e07c.jpeg\";s:8:\"filesize\";i:888387;s:5:\"sizes\";a:5:{s:6:\"medium\";a:5:{s:4:\"file\";s:42:\"photo-1553969546-6f7388a7e07c-200x300.jpeg\";s:5:\"width\";i:200;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:14836;}s:5:\"large\";a:5:{s:4:\"file\";s:43:\"photo-1553969546-6f7388a7e07c-684x1024.jpeg\";s:5:\"width\";i:684;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:110482;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:42:\"photo-1553969546-6f7388a7e07c-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:9188;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:43:\"photo-1553969546-6f7388a7e07c-768x1150.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:137510;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:44:\"photo-1553969546-6f7388a7e07c-1026x1536.jpeg\";s:5:\"width\";i:1026;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:245441;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(101,47,'_wp_attachment_image_alt','Running'),(102,47,'_oembed_ea4d37de883dd4848eb08d38cf4aae81','{{unknown}}'),(103,49,'_wp_attached_file','2024/08/photo-1565092730214-e04a3f140040.jpeg'),(104,49,'_wp_attachment_metadata','a:6:{s:5:\"width\";i:1125;s:6:\"height\";i:1500;s:4:\"file\";s:45:\"2024/08/photo-1565092730214-e04a3f140040.jpeg\";s:8:\"filesize\";i:936145;s:5:\"sizes\";a:4:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1565092730214-e04a3f140040-225x300.jpeg\";s:5:\"width\";i:225;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:23555;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1565092730214-e04a3f140040-768x1024.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:260206;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1565092730214-e04a3f140040-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:8837;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:46:\"photo-1565092730214-e04a3f140040-768x1024.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:260206;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}}'),(105,49,'_wp_attachment_image_alt','Waterfalls'),(106,49,'_oembed_f16a6fca84264642fb740685ead0b80d','{{unknown}}'),(107,50,'_wp_attached_file','2024/07/photo-1569230919100-d3fd5e1132f4-scaled.jpeg'),(108,50,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:1920;s:6:\"height\";i:2560;s:4:\"file\";s:52:\"2024/07/photo-1569230919100-d3fd5e1132f4-scaled.jpeg\";s:8:\"filesize\";i:370497;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"photo-1569230919100-d3fd5e1132f4-225x300.jpeg\";s:5:\"width\";i:225;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:12866;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"photo-1569230919100-d3fd5e1132f4-768x1024.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:84752;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"photo-1569230919100-d3fd5e1132f4-150x150.jpeg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:5536;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:46:\"photo-1569230919100-d3fd5e1132f4-768x1024.jpeg\";s:5:\"width\";i:768;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:84752;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"photo-1569230919100-d3fd5e1132f4-1152x1536.jpeg\";s:5:\"width\";i:1152;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:162043;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"photo-1569230919100-d3fd5e1132f4-1536x2048.jpeg\";s:5:\"width\";i:1536;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:256797;}}s:10:\"image_meta\";a:12:{s:8:\"aperture\";s:1:\"0\";s:6:\"credit\";s:0:\"\";s:6:\"camera\";s:0:\"\";s:7:\"caption\";s:0:\"\";s:17:\"created_timestamp\";s:1:\"0\";s:9:\"copyright\";s:0:\"\";s:12:\"focal_length\";s:1:\"0\";s:3:\"iso\";s:1:\"0\";s:13:\"shutter_speed\";s:1:\"0\";s:5:\"title\";s:0:\"\";s:11:\"orientation\";s:1:\"1\";s:8:\"keywords\";a:0:{}}s:14:\"original_image\";s:37:\"photo-1569230919100-d3fd5e1132f4.jpeg\";}'),(109,50,'_wp_attachment_image_alt','Routine'),(110,50,'_oembed_bb85b0ddff88c453bdaf149643efd7c1','{{unknown}}'),(111,51,'_acf_changed',''),(112,51,'footnotes',''),(116,54,'_edit_lock','1743441247:1'),(117,55,'_edit_lock','1743439396:1'),(118,3,'_edit_lock','1743441682:1'); +/*!40000 ALTER TABLE `wp_postmeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_posts` +-- + +DROP TABLE IF EXISTS `wp_posts`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_posts` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `post_author` bigint(20) unsigned NOT NULL DEFAULT 0, + `post_date` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_date_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content` longtext NOT NULL, + `post_title` text NOT NULL, + `post_excerpt` text NOT NULL, + `post_status` varchar(20) NOT NULL DEFAULT 'publish', + `comment_status` varchar(20) NOT NULL DEFAULT 'open', + `ping_status` varchar(20) NOT NULL DEFAULT 'open', + `post_password` varchar(255) NOT NULL DEFAULT '', + `post_name` varchar(200) NOT NULL DEFAULT '', + `to_ping` text NOT NULL, + `pinged` text NOT NULL, + `post_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_modified_gmt` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `post_content_filtered` longtext NOT NULL, + `post_parent` bigint(20) unsigned NOT NULL DEFAULT 0, + `guid` varchar(255) NOT NULL DEFAULT '', + `menu_order` int(11) NOT NULL DEFAULT 0, + `post_type` varchar(20) NOT NULL DEFAULT 'post', + `post_mime_type` varchar(100) NOT NULL DEFAULT '', + `comment_count` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`ID`), + KEY `post_name` (`post_name`(191)), + KEY `type_status_date` (`post_type`,`post_status`,`post_date`,`ID`), + KEY `post_parent` (`post_parent`), + KEY `post_author` (`post_author`) +) ENGINE=InnoDB AUTO_INCREMENT=58 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_posts` +-- + +LOCK TABLES `wp_posts` WRITE; +/*!40000 ALTER TABLE `wp_posts` DISABLE KEYS */; +INSERT INTO `wp_posts` VALUES (2,1,'2025-03-25 18:09:09','2025-03-25 18:09:09','\n

    This is an example page for https://github.com/wpengine/hwptoolkit

    \n\n\n\n

    Content was generated by AI and images from https://unsplash.com/

    \n','Sample Page','','publish','closed','open','','sample-page','','','2025-03-26 14:04:42','2025-03-26 14:04:42','',0,'http://localhost:8888/?page_id=2',0,'page','',0),(3,1,'2025-03-25 18:09:09','2025-03-25 18:09:09','\n

    Who we are

    \n\n\n

    Suggested text: Our website address is: http://localhost:8888.

    \n\n\n

    Comments

    \n\n\n

    Suggested text: When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.

    \n\n\n

    An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.

    \n\n\n

    Media

    \n\n\n

    Suggested text: If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.

    \n\n\n

    Cookies

    \n\n\n

    Suggested text: If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.

    \n\n\n

    If you visit our login page, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.

    \n\n\n

    When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.

    \n\n\n

    If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.

    \n\n\n

    Embedded content from other websites

    \n\n\n

    Suggested text: Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.

    \n\n\n

    These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.

    \n\n\n

    Who we share your data with

    \n\n\n

    Suggested text: If you request a password reset, your IP address will be included in the reset email.

    \n\n\n

    How long we retain your data

    \n\n\n

    Suggested text: If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.

    \n\n\n

    For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.

    \n\n\n

    What rights you have over your data

    \n\n\n

    Suggested text: If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.

    \n\n\n

    Where your data is sent

    \n\n\n

    Suggested text: Visitor comments may be checked through an automated spam detection service.

    \n\n','Privacy Policy','','publish','closed','open','','privacy-policy','','','2025-03-31 17:20:29','2025-03-31 17:20:29','',0,'http://localhost:8888/?page_id=3',0,'page','',0),(4,1,'2025-03-25 18:19:22','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2025-03-25 18:19:22','0000-00-00 00:00:00','',0,'http://localhost:8888/?p=4',0,'post','',0),(5,1,'2025-03-25 18:45:08','2025-03-25 18:45:08','','Navigation','','publish','closed','closed','','navigation','','','2025-03-25 18:45:08','2025-03-25 18:45:08','',0,'http://localhost:8888/blog/2025/03/25/navigation/',0,'wp_navigation','',0),(7,1,'2025-03-25 19:27:54','2025-03-25 19:27:54','\n

    Maintaining physical health requires consistent exercise, and incorporating a variety of workouts into your routine can significantly improve overall fitness and well-being. A well-rounded exercise regimen should include strength training, cardiovascular workouts, and flexibility exercises to ensure comprehensive health benefits. Strength training exercises such as squats, push-ups, and deadlifts help build muscle mass, improve endurance, and increase bone density, which is essential for overall strength and injury prevention. These exercises also boost metabolism, aiding in weight management and overall body composition.

    \n\n\n\n

    In addition to strength training, cardiovascular workouts like running, cycling, and jumping rope enhance heart health, improve lung capacity, and increase stamina. Regular cardio exercises help lower the risk of chronic conditions such as heart disease, high blood pressure, and diabetes. Meanwhile, incorporating flexibility exercises such as yoga and dynamic stretching improves mobility, reduces muscle stiffness, and prevents injuries. Stretching before and after workouts enhances recovery and promotes better posture and balance, which is crucial for maintaining physical function as you age.

    \n\n\n\n

    By combining these different types of exercises, you create a balanced fitness routine that supports long-term health and overall well-being. Regular exercise not only strengthens the body but also enhances mental health by reducing stress, improving mood, and boosting energy levels. Whether you\'re a beginner looking to establish a fitness habit or an experienced athlete aiming to maintain peak performance, integrating these essential exercises into your routine can help you stay active, strong, and healthy for years to come.

    \n','10 Essential Exercises for Better Physical Health','','publish','open','open','','10-essential-exercises-for-better-physical-health','','','2025-03-26 13:16:01','2025-03-26 13:16:01','',0,'http://localhost:8888/blog/10-essential-exercises-for-better-physical-health/',0,'post','',2),(9,1,'2024-08-29 19:27:54','2024-08-29 19:27:54','\n

    Southeast Asia offers an incredible blend of cultural richness, breathtaking landscapes, and unique adventures, making it a dream destination for travelers. While popular spots like Bangkok, Bali, and Hanoi attract millions of visitors, the region is also home to countless hidden gems waiting to be explored. From remote islands with pristine beaches to charming mountain villages rich in tradition, these lesser-known destinations provide a more authentic and immersive travel experience. Exploring these hidden spots allows travelers to connect with local cultures, escape the crowds, and discover the true essence of Southeast Asia.

    \n\n\n\n

    One such destination is Luang Prabang, Laos, a UNESCO-listed town known for its stunning temples, vibrant night markets, and serene Mekong River views. For those seeking adventure, the Philippines’ Camiguin Island offers volcano hikes, refreshing waterfalls, and untouched white-sand beaches far from the typical tourist trail. Meanwhile, Indonesia’s Tana Toraja region provides a fascinating cultural experience, with its intricate wooden houses and unique funeral rituals that offer a glimpse into one of the world’s most distinctive traditions. These hidden gems showcase the diversity of Southeast Asia, where every country holds something special beyond its well-trodden tourist spots.

    \n\n\n\n

    To make the most of a trip through Southeast Asia, travelers should embrace local customs, try regional delicacies, and plan visits during off-peak seasons to enjoy a more relaxed experience. Budget-conscious travelers can take advantage of affordable public transportation, guesthouses, and street food, all of which make Southeast Asia an accessible destination for every type of traveler. Whether you’re drawn to tranquil temples, lush jungles, or remote coastal retreats, exploring the lesser-known corners of Southeast Asia guarantees unforgettable memories and a deeper appreciation for its vibrant cultures and landscapes.

    \n','Exploring the Hidden Gems of Southeast Asia','','publish','open','open','','exploring-the-hidden-gems-of-southeast-asia','','','2025-03-26 13:19:39','2025-03-26 13:19:39','',0,'http://localhost:8888/blog/exploring-the-hidden-gems-of-southeast-asia/',0,'post','',0),(10,1,'2024-09-25 19:27:54','2024-09-25 19:27:54','\n

    A balanced diet is the cornerstone of good health, providing the body with the essential nutrients it needs to function optimally. Proper nutrition supports energy levels, strengthens the immune system, and reduces the risk of chronic diseases such as diabetes, heart disease, and obesity. A well-rounded diet consists of a mix of macronutrients—carbohydrates, proteins, and fats—as well as vital micronutrients like vitamins and minerals. Understanding the role of these nutrients and how they work together is key to maintaining overall wellness and ensuring that the body receives the fuel it needs for daily activities.

    \n\n\n\n

    Macronutrients serve as the foundation of a healthy diet. Carbohydrates provide the primary source of energy, with whole grains, fruits, and vegetables offering fiber and essential nutrients. Proteins, found in lean meats, legumes, and dairy products, are crucial for muscle repair and overall body maintenance. Healthy fats, such as those from nuts, avocados, and olive oil, support brain function and heart health. Equally important are micronutrients, including vitamins like C and D, which boost immunity, and minerals like calcium and iron, which strengthen bones and support oxygen circulation. Ensuring a varied diet rich in whole foods helps meet these nutritional needs and promotes long-term health.

    \n\n\n\n

    Creating balanced meals doesn’t have to be complicated. Simple strategies such as meal prepping, incorporating a variety of colorful fruits and vegetables, and choosing whole, unprocessed foods can significantly improve dietary quality. Drinking enough water, practicing portion control, and limiting processed foods and added sugars further contribute to better health. By making mindful food choices and focusing on nutrient-dense meals, individuals can enhance their well-being, sustain energy levels, and build a strong foundation for a healthier lifestyle.

    \n','Nutrition Basics: Building a Balanced Diet','','publish','open','open','','nutrition-basics-building-a-balanced-diet','','','2025-03-26 13:16:27','2025-03-26 13:16:27','',0,'http://localhost:8888/blog/nutrition-basics-building-a-balanced-diet/',0,'post','',0),(11,1,'2024-10-10 19:27:54','2024-10-10 19:27:54','\n

    In today’s fast-paced world, managing stress is essential for maintaining mental well-being and overall health. Chronic stress can negatively impact both the mind and body, leading to anxiety, fatigue, and even physical ailments. One effective way to combat stress is through mindfulness, a practice that encourages present-moment awareness and self-reflection. By incorporating mindfulness techniques into daily life, individuals can cultivate a sense of calm, improve mental clarity, and develop emotional resilience. Whether through meditation, deep breathing, or mindful movement, these practices provide a valuable toolset for navigating life’s challenges with greater ease.

    \n\n\n\n

    Meditation is one of the most powerful mindfulness techniques for reducing stress. Simple practices such as guided meditation, body scans, or mantra repetition can help quiet the mind and shift focus away from worries. Even just a few minutes of meditation each day can lead to improved concentration, emotional stability, and reduced stress levels. Similarly, deep breathing exercises, such as diaphragmatic breathing or the 4-7-8 technique, activate the body’s relaxation response, lowering heart rate and promoting a sense of calm. These techniques can be practiced anywhere, making them accessible tools for managing stress in the moment.

    \n\n\n\n

    Beyond meditation and breathing exercises, incorporating mindfulness into everyday activities can further enhance emotional balance. Practicing gratitude, engaging in mindful eating, and taking breaks to appreciate nature are all simple ways to stay present and reduce stress. By making mindfulness a regular part of life, individuals can improve their overall well-being, enhance focus, and develop a healthier relationship with stress. Embracing these techniques not only fosters inner peace but also strengthens mental resilience, allowing for a more balanced and fulfilling life.

    \n','Mindfulness Techniques for Stress Reduction','','publish','open','open','','mindfulness-techniques-for-stress-reduction','','','2025-03-25 19:54:00','2025-03-25 19:54:00','',0,'http://localhost:8888/blog/mindfulness-techniques-for-stress-reduction/',0,'post','',0),(12,1,'2024-10-31 19:27:54','2024-10-31 19:27:54','\n

    Traveling doesn’t have to be expensive; with the right approach, you can explore incredible destinations without breaking the bank. Budget-conscious travelers can enjoy meaningful experiences by prioritizing smart planning and cost-saving strategies. One of the best ways to cut travel costs is by being flexible with travel dates and destinations, as off-season trips and mid-week flights often come at significantly lower prices. Additionally, using budget airlines, fare comparison websites, and travel reward programs can help reduce transportation expenses, making it easier to reach your dream destination without overspending.

    \n\n\n\n

    Finding affordable accommodations is another key factor in budget travel. Instead of expensive hotels, consider alternative options such as hostels, guesthouses, vacation rentals, or even house-sitting opportunities. Many travelers also save money by staying in shared accommodations or using loyalty points from travel credit cards. For those seeking immersive cultural experiences, homestays and couchsurfing offer a way to connect with locals while keeping lodging costs minimal. By choosing accommodations that include kitchen facilities, travelers can further cut expenses by preparing their own meals rather than dining out for every meal.

    \n\n\n\n

    Maximizing your travel budget also means finding free or low-cost activities that enhance your trip. Many cities offer free walking tours, museums with discounted entry days, and scenic outdoor attractions that don’t cost a dime. Using public transportation instead of taxis or rental cars can significantly lower expenses while providing a more authentic local experience. Additionally, planning ahead and researching local deals, city passes, and budget-friendly dining options can help stretch your budget further. With thoughtful planning and mindful spending, budget travelers can enjoy unforgettable adventures without sacrificing quality experiences.

    \n','Budget Travel: How to Explore the World Without Breaking the Bank','','publish','open','open','','budget-travel-how-to-explore-the-world-without-breaking-the-bank','','','2025-03-25 19:49:36','2025-03-25 19:49:36','',0,'http://localhost:8888/blog/budget-travel-how-to-explore-the-world-without-breaking-the-bank/',0,'post','',0),(13,1,'2024-12-28 19:27:54','2024-12-28 19:27:54','\n

    Balancing work, personal life, and self-care can be challenging in today’s fast-paced world, but achieving harmony among these aspects is essential for overall well-being. A healthy work-life balance allows individuals to be productive without feeling overwhelmed, fostering both professional success and personal fulfillment. However, with demanding workloads, family responsibilities, and personal aspirations, it’s easy to feel stretched thin. Striking the right balance requires intentional effort, prioritization, and a willingness to set boundaries that protect both your time and energy.

    \n\n\n\n

    Effective time management plays a key role in maintaining a balanced lifestyle. Strategies such as prioritizing tasks, using productivity tools, and setting realistic goals can help individuals stay organized and focused. Establishing a structured routine that includes dedicated time for work, rest, and personal activities ensures that all areas of life receive proper attention. Additionally, learning to set boundaries—such as limiting work hours, unplugging from digital devices, and saying no to unnecessary commitments—prevents burnout and creates space for relaxation and self-care.

    \n\n\n\n

    Prioritizing self-care is just as important as professional and personal responsibilities. Engaging in activities that promote mental and physical well-being, such as exercise, hobbies, mindfulness, and quality time with loved ones, helps maintain overall happiness and resilience. By making conscious choices to balance work demands with personal growth and self-care, individuals can create a fulfilling lifestyle that supports both their ambitions and well-being. A well-balanced life not only leads to greater productivity but also enhances long-term satisfaction and inner peace.

    \n','Creating a Productive and Balanced Lifestyle','','publish','open','open','','creating-a-productive-and-balanced-lifestyle','','','2025-03-25 19:46:35','2025-03-25 19:46:35','',0,'http://localhost:8888/blog/creating-a-productive-and-balanced-lifestyle/',0,'post','',0),(14,1,'2025-01-02 19:27:54','2025-01-02 19:27:54','\n

    Sleep is a critical component of overall health that is often overlooked, yet it plays a fundamental role in both physical and mental well-being. Quality sleep is essential for cognitive function, memory consolidation, and emotional regulation, helping the brain process information and recover from daily stressors. Physically, sleep supports immune function, muscle recovery, and metabolic balance, reducing the risk of chronic conditions such as heart disease, diabetes, and obesity. Despite its importance, many people struggle with inadequate sleep due to busy schedules, stress, and poor sleep habits, which can lead to fatigue, irritability, and decreased productivity.

    \n\n\n\n

    Understanding the science behind sleep can help individuals make better choices to improve their rest. The body\'s natural sleep-wake cycle, known as the circadian rhythm, is influenced by light exposure, daily routines, and lifestyle factors. Poor sleep hygiene—such as excessive screen time before bed, irregular sleep schedules, or consuming caffeine late in the day—can disrupt this rhythm and negatively impact sleep quality. Establishing a consistent bedtime routine, creating a comfortable sleep environment, and practicing relaxation techniques like meditation or deep breathing can significantly enhance sleep quality and duration.

    \n\n\n\n

    Prioritizing sleep is essential for long-term health and well-being. By making small, intentional changes to sleep habits—such as limiting blue light exposure before bed, maintaining a cool and dark bedroom, and reducing stress levels—individuals can experience deeper, more restorative rest. Improved sleep not only enhances daily performance and mood but also contributes to overall longevity and resilience against illness. Making sleep a priority isn’t just about feeling rested—it’s a key foundation for a healthier, more balanced life.

    \n','The Importance of Sleep for Mental and Physical Health','','publish','open','open','','the-importance-of-sleep-for-mental-and-physical-health','','','2025-03-25 19:44:16','2025-03-25 19:44:16','',0,'http://localhost:8888/blog/the-importance-of-sleep-for-mental-and-physical-health/',0,'post','',0),(15,1,'2025-02-16 19:27:54','2025-02-16 19:27:54','\n

    Traveling is more than just visiting new places; it’s an opportunity to immerse yourself in different cultures, broaden your perspectives, and build meaningful connections with people around the world. Engaging in cultural experiences allows travelers to gain a deeper understanding of local traditions, history, and ways of life. Whether it’s participating in a traditional festival, learning a few words in the local language, or trying authentic cuisine, these experiences enrich your journey and make travel more than just sightseeing. By stepping outside of familiar surroundings and embracing new customs, you develop a greater appreciation for the diversity and uniqueness of different communities.

    \n\n\n\n

    Respecting local traditions is essential when traveling, as it fosters mutual understanding and creates positive interactions with locals. Simple gestures such as dressing appropriately, following local etiquette, and being mindful of sacred spaces can go a long way in showing respect for the culture you are experiencing. Additionally, supporting local artisans, markets, and businesses helps sustain communities and ensures that your travels have a positive impact. Engaging with locals, whether through guided cultural tours or casual conversations, offers insights that go beyond what guidebooks provide, allowing you to connect with a place on a deeper level.

    \n\n\n\n

    By prioritizing meaningful cultural experiences, travel becomes more than just a vacation—it transforms into a journey of learning and personal growth. The memories created through these interactions are often the most cherished, leaving a lasting impression that extends far beyond the trip itself. Whether you\'re exploring a bustling city, a quiet village, or a remote island, approaching travel with curiosity, respect, and openness ensures a richer, more fulfilling experience.

    \n','Cultural Immersion: Tips for Meaningful Travel Experiences','','publish','open','open','','cultural-immersion-tips-for-meaningful-travel-experiences','','','2025-03-25 19:39:21','2025-03-25 19:39:21','',0,'http://localhost:8888/blog/cultural-immersion-tips-for-meaningful-travel-experiences/',0,'post','',0),(16,1,'2024-07-22 19:27:54','2024-07-22 19:27:54','\n

    Finding time to exercise can be challenging for busy professionals, but staying active is essential for overall health and well-being. Long work hours, meetings, and daily responsibilities often make it difficult to commit to a traditional gym routine. However, incorporating short, effective home workouts into a busy schedule can make a significant difference. With the right approach, you can maintain fitness and build strength without needing a gym membership or expensive equipment. By focusing on high-impact, time-efficient exercises, professionals can stay fit and energized, even on their busiest days.

    \n\n\n\n

    One of the best strategies for fitting exercise into a hectic schedule is to focus on full-body workouts that maximize results in a short amount of time. High-intensity interval training (HIIT) is an excellent option, combining bursts of activity with short rest periods to increase calorie burn and improve cardiovascular health. A 20- to 30-minute session of bodyweight exercises such as squats, lunges, push-ups, and planks can effectively build strength and endurance. Resistance bands and dumbbells can also be incorporated for added intensity, allowing for a more dynamic and challenging routine without requiring a large workout space.

    \n\n\n\n

    To stay consistent, it’s helpful to schedule workouts like any other important task in the day. Morning workouts can boost energy and set a positive tone for the day, while quick evening sessions help relieve stress and unwind after work. Even small lifestyle adjustments, such as taking active breaks, using a standing desk, or doing short stretching sessions, contribute to overall fitness. By prioritizing movement and making exercise a part of daily life, busy professionals can maintain their health, increase productivity, and feel more energized—no matter how packed their schedule may be.

    \n','Home Workout Routines for Busy Professionals','','publish','open','open','','home-workout-routines-for-busy-professionals','','','2025-03-26 13:21:56','2025-03-26 13:21:56','',0,'http://localhost:8888/blog/home-workout-routines-for-busy-professionals/',0,'post','',0),(18,1,'2025-03-25 19:28:44','2025-03-25 19:28:44','{\"version\": 3, \"isGlobalStylesUserThemeJSON\": true }','Custom Styles','','publish','closed','closed','','wp-global-styles-twentytwentyfive','','','2025-03-25 19:28:44','2025-03-25 19:28:44','',0,'http://localhost:8888/blog/wp-global-styles-twentytwentyfive/',0,'wp_global_styles','',0),(19,1,'2025-03-25 19:29:16','2025-03-25 19:29:16','\n

    This is an example page for https://github.com/wpengine/hwptoolkit

    \n\n\n\n

    All content has been generated by AI

    \n','Sample Page','','inherit','closed','closed','','2-revision-v1','','','2025-03-25 19:29:16','2025-03-25 19:29:16','',2,'http://localhost:8888/?p=19',0,'revision','',0),(20,1,'2025-03-25 19:30:17','2025-03-25 19:30:17','Traveling is more than just visiting new places; it\'s about understanding and connecting with different cultures. This guide provides insights into how to engage in meaningful cultural experiences, respect local traditions, and create lasting memories during your travels.','Cultural Immersion: Tips for Meaningful Travel Experiences','','inherit','closed','closed','','15-revision-v1','','','2025-03-25 19:30:17','2025-03-25 19:30:17','',15,'http://localhost:8888/?p=20',0,'revision','',0),(21,1,'2025-03-25 19:30:23','2025-03-25 19:30:23','Sleep is a critical component of overall health that is often overlooked. This comprehensive post explores the scientific importance of quality sleep, its impact on mental and physical well-being, and practical tips for improving sleep hygiene and establishing a restful routine.','The Importance of Sleep for Mental and Physical Health','','inherit','closed','closed','','14-revision-v1','','','2025-03-25 19:30:23','2025-03-25 19:30:23','',14,'http://localhost:8888/?p=21',0,'revision','',0),(22,1,'2025-03-25 19:30:35','2025-03-25 19:30:35','Balancing work, personal life, and self-care can be challenging. This post provides insights into creating a lifestyle that promotes productivity, personal growth, and overall well-being. Learn strategies for time management, setting boundaries, and maintaining a healthy work-life balance.','Creating a Productive and Balanced Lifestyle','','inherit','closed','closed','','13-revision-v1','','','2025-03-25 19:30:35','2025-03-25 19:30:35','',13,'http://localhost:8888/?p=22',0,'revision','',0),(23,1,'2025-03-25 19:30:47','2025-03-25 19:30:47','Traveling doesn\'t have to be expensive. This guide offers practical tips and strategies for budget-conscious travelers, including how to find affordable accommodations, save on transportation, and make the most of your travel budget while experiencing amazing destinations.','Budget Travel: How to Explore the World Without Breaking the Bank','','inherit','closed','closed','','12-revision-v1','','','2025-03-25 19:30:47','2025-03-25 19:30:47','',12,'http://localhost:8888/?p=23',0,'revision','',0),(24,1,'2025-03-25 19:31:08','2025-03-25 19:31:08','In today\'s fast-paced world, managing stress is crucial for mental well-being. This post explores various mindfulness techniques that can help reduce stress, improve mental clarity, and promote emotional balance. Learn practical meditation and breathing exercises you can incorporate into your daily routine.','Mindfulness Techniques for Stress Reduction','','inherit','closed','closed','','11-revision-v1','','','2025-03-25 19:31:08','2025-03-25 19:31:08','',11,'http://localhost:8888/?p=24',0,'revision','',0),(25,1,'2025-03-25 19:31:13','2025-03-25 19:31:13','A balanced diet is the cornerstone of good health. This comprehensive guide breaks down the essential nutrients your body needs, explains the importance of macro and micronutrients, and provides practical tips for creating meals that support overall wellness.','Nutrition Basics: Building a Balanced Diet','','inherit','closed','closed','','10-revision-v1','','','2025-03-25 19:31:13','2025-03-25 19:31:13','',10,'http://localhost:8888/?p=25',0,'revision','',0),(26,1,'2025-03-25 19:31:28','2025-03-25 19:31:28','Southeast Asia offers an incredible blend of cultural experiences, breathtaking landscapes, and unique adventures. This travel guide explores some of the region\'s most stunning yet lesser-known destinations, providing insights into local cultures, must-visit locations, and travel tips.','Exploring the Hidden Gems of Southeast Asia','','inherit','closed','closed','','9-revision-v1','','','2025-03-25 19:31:28','2025-03-25 19:31:28','',9,'http://localhost:8888/?p=26',0,'revision','',0),(28,1,'2025-03-25 19:31:51','2025-03-25 19:31:51','Finding time to exercise can be challenging for busy professionals. This post offers a series of effective home workout routines that require minimal equipment and can be completed in 30 minutes or less, helping you maintain fitness despite a hectic schedule.','Home Workout Routines for Busy Professionals','','inherit','closed','closed','','16-revision-v1','','','2025-03-25 19:31:51','2025-03-25 19:31:51','',16,'http://localhost:8888/?p=28',0,'revision','',0),(29,1,'2025-03-25 19:32:30','2025-03-25 19:32:30','Maintaining physical health requires consistent exercise. Here are 10 essential exercises that can help improve your overall fitness and well-being. From strength training to cardiovascular workouts, these exercises target different muscle groups and provide comprehensive health benefits.','10 Essential Exercises for Better Physical Health','','inherit','closed','closed','','7-revision-v1','','','2025-03-25 19:32:30','2025-03-25 19:32:30','',7,'http://localhost:8888/?p=29',0,'revision','',0),(30,1,'2025-03-25 19:33:38','2025-03-25 19:33:38','https://unsplash.com/photos/assorted-fruits-and-vegetables-on-green-surface-kcRFW-Hje8Y','photo-1535914254981-b5012eebbd15','Photo taken by \nVitalii Pavlyshynets','inherit','open','closed','','photo-1535914254981-b5012eebbd15','','','2025-03-25 19:36:03','2025-03-25 19:36:03','',7,'http://localhost:8888/wp-content/uploads/2025/03/photo-1535914254981-b5012eebbd15.jpeg',0,'attachment','image/jpeg',0),(32,1,'2025-03-25 19:35:30','2025-03-25 19:35:30','https://unsplash.com/photos/assorted-hot-air-balloons-flying-at-high-altitude-during-daytime-hpTH5b6mo2s','photo-1507608616759-54f48f0af0ee','Photo taken by Ian dooley','inherit','open','closed','','photo-1507608616759-54f48f0af0ee','','','2025-03-25 19:36:48','2025-03-25 19:36:48','',15,'http://localhost:8888/wp-content/uploads/2025/02/photo-1507608616759-54f48f0af0ee.jpeg',0,'attachment','image/jpeg',0),(34,1,'2025-03-25 19:38:34','2025-03-25 19:38:34','\n

    Maintaining physical health requires consistent exercise, and incorporating a variety of workouts into your routine can significantly improve overall fitness and well-being. A well-rounded exercise regimen should include strength training, cardiovascular workouts, and flexibility exercises to ensure comprehensive health benefits. Strength training exercises such as squats, push-ups, and deadlifts help build muscle mass, improve endurance, and increase bone density, which is essential for overall strength and injury prevention. These exercises also boost metabolism, aiding in weight management and overall body composition.

    \n\n\n\n

    In addition to strength training, cardiovascular workouts like running, cycling, and jumping rope enhance heart health, improve lung capacity, and increase stamina. Regular cardio exercises help lower the risk of chronic conditions such as heart disease, high blood pressure, and diabetes. Meanwhile, incorporating flexibility exercises such as yoga and dynamic stretching improves mobility, reduces muscle stiffness, and prevents injuries. Stretching before and after workouts enhances recovery and promotes better posture and balance, which is crucial for maintaining physical function as you age.

    \n\n\n\n

    By combining these different types of exercises, you create a balanced fitness routine that supports long-term health and overall well-being. Regular exercise not only strengthens the body but also enhances mental health by reducing stress, improving mood, and boosting energy levels. Whether you\'re a beginner looking to establish a fitness habit or an experienced athlete aiming to maintain peak performance, integrating these essential exercises into your routine can help you stay active, strong, and healthy for years to come.

    \n','10 Essential Exercises for Better Physical Health','','inherit','closed','closed','','7-revision-v1','','','2025-03-25 19:38:34','2025-03-25 19:38:34','',7,'http://localhost:8888/?p=34',0,'revision','',0),(35,1,'2025-03-25 19:39:21','2025-03-25 19:39:21','\n

    Traveling is more than just visiting new places; it’s an opportunity to immerse yourself in different cultures, broaden your perspectives, and build meaningful connections with people around the world. Engaging in cultural experiences allows travelers to gain a deeper understanding of local traditions, history, and ways of life. Whether it’s participating in a traditional festival, learning a few words in the local language, or trying authentic cuisine, these experiences enrich your journey and make travel more than just sightseeing. By stepping outside of familiar surroundings and embracing new customs, you develop a greater appreciation for the diversity and uniqueness of different communities.

    \n\n\n\n

    Respecting local traditions is essential when traveling, as it fosters mutual understanding and creates positive interactions with locals. Simple gestures such as dressing appropriately, following local etiquette, and being mindful of sacred spaces can go a long way in showing respect for the culture you are experiencing. Additionally, supporting local artisans, markets, and businesses helps sustain communities and ensures that your travels have a positive impact. Engaging with locals, whether through guided cultural tours or casual conversations, offers insights that go beyond what guidebooks provide, allowing you to connect with a place on a deeper level.

    \n\n\n\n

    By prioritizing meaningful cultural experiences, travel becomes more than just a vacation—it transforms into a journey of learning and personal growth. The memories created through these interactions are often the most cherished, leaving a lasting impression that extends far beyond the trip itself. Whether you\'re exploring a bustling city, a quiet village, or a remote island, approaching travel with curiosity, respect, and openness ensures a richer, more fulfilling experience.

    \n','Cultural Immersion: Tips for Meaningful Travel Experiences','','inherit','closed','closed','','15-revision-v1','','','2025-03-25 19:39:21','2025-03-25 19:39:21','',15,'http://localhost:8888/?p=35',0,'revision','',0),(36,1,'2025-03-25 19:40:38','2025-03-25 19:40:38','\n

    Sleep is a critical component of overall health that is often overlooked, yet it plays a fundamental role in both physical and mental well-being. Quality sleep is essential for cognitive function, memory consolidation, and emotional regulation, helping the brain process information and recover from daily stressors. Physically, sleep supports immune function, muscle recovery, and metabolic balance, reducing the risk of chronic conditions such as heart disease, diabetes, and obesity. Despite its importance, many people struggle with inadequate sleep due to busy schedules, stress, and poor sleep habits, which can lead to fatigue, irritability, and decreased productivity.

    \n\n\n\n

    Understanding the science behind sleep can help individuals make better choices to improve their rest. The body\'s natural sleep-wake cycle, known as the circadian rhythm, is influenced by light exposure, daily routines, and lifestyle factors. Poor sleep hygiene—such as excessive screen time before bed, irregular sleep schedules, or consuming caffeine late in the day—can disrupt this rhythm and negatively impact sleep quality. Establishing a consistent bedtime routine, creating a comfortable sleep environment, and practicing relaxation techniques like meditation or deep breathing can significantly enhance sleep quality and duration.

    \n\n\n\n

    Prioritizing sleep is essential for long-term health and well-being. By making small, intentional changes to sleep habits—such as limiting blue light exposure before bed, maintaining a cool and dark bedroom, and reducing stress levels—individuals can experience deeper, more restorative rest. Improved sleep not only enhances daily performance and mood but also contributes to overall longevity and resilience against illness. Making sleep a priority isn’t just about feeling rested—it’s a key foundation for a healthier, more balanced life.

    \n','The Importance of Sleep for Mental and Physical Health','','inherit','closed','closed','','14-revision-v1','','','2025-03-25 19:40:38','2025-03-25 19:40:38','',14,'http://localhost:8888/?p=36',0,'revision','',0),(37,1,'2025-03-25 19:43:43','2025-03-25 19:43:43','https://unsplash.com/photos/brown-wooden-letter-blocks-on-white-surface-feKxV48FZVM','photo-1617624969413-932d9b07f000','Photo taken by Brett Jordan','inherit','open','closed','','photo-1617624969413-932d9b07f000','','','2025-03-25 19:44:14','2025-03-25 19:44:14','',14,'http://localhost:8888/wp-content/uploads/2025/01/photo-1617624969413-932d9b07f000.jpeg',0,'attachment','image/jpeg',0),(38,1,'2025-03-25 19:45:54','2025-03-25 19:45:54','\n

    Balancing work, personal life, and self-care can be challenging in today’s fast-paced world, but achieving harmony among these aspects is essential for overall well-being. A healthy work-life balance allows individuals to be productive without feeling overwhelmed, fostering both professional success and personal fulfillment. However, with demanding workloads, family responsibilities, and personal aspirations, it’s easy to feel stretched thin. Striking the right balance requires intentional effort, prioritization, and a willingness to set boundaries that protect both your time and energy.

    \n\n\n\n

    Effective time management plays a key role in maintaining a balanced lifestyle. Strategies such as prioritizing tasks, using productivity tools, and setting realistic goals can help individuals stay organized and focused. Establishing a structured routine that includes dedicated time for work, rest, and personal activities ensures that all areas of life receive proper attention. Additionally, learning to set boundaries—such as limiting work hours, unplugging from digital devices, and saying no to unnecessary commitments—prevents burnout and creates space for relaxation and self-care.

    \n\n\n\n

    Prioritizing self-care is just as important as professional and personal responsibilities. Engaging in activities that promote mental and physical well-being, such as exercise, hobbies, mindfulness, and quality time with loved ones, helps maintain overall happiness and resilience. By making conscious choices to balance work demands with personal growth and self-care, individuals can create a fulfilling lifestyle that supports both their ambitions and well-being. A well-balanced life not only leads to greater productivity but also enhances long-term satisfaction and inner peace.

    \n','Creating a Productive and Balanced Lifestyle','','inherit','closed','closed','','13-revision-v1','','','2025-03-25 19:45:54','2025-03-25 19:45:54','',13,'http://localhost:8888/?p=38',0,'revision','',0),(39,1,'2025-03-25 19:46:17','2025-03-25 19:46:17','\n

    Balancing work, personal life, and self-care can be challenging in today’s fast-paced world, but achieving harmony among these aspects is essential for overall well-being. A healthy work-life balance allows individuals to be productive without feeling overwhelmed, fostering both professional success and personal fulfillment. However, with demanding workloads, family responsibilities, and personal aspirations, it’s easy to feel stretched thin. Striking the right balance requires intentional effort, prioritization, and a willingness to set boundaries that protect both your time and energy.

    \n\n\n\n

    Effective time management plays a key role in maintaining a balanced lifestyle. Strategies such as prioritizing tasks, using productivity tools, and setting realistic goals can help individuals stay organized and focused. Establishing a structured routine that includes dedicated time for work, rest, and personal activities ensures that all areas of life receive proper attention. Additionally, learning to set boundaries—such as limiting work hours, unplugging from digital devices, and saying no to unnecessary commitments—prevents burnout and creates space for relaxation and self-care.

    \n\n\n\n

    Prioritizing self-care is just as important as professional and personal responsibilities. Engaging in activities that promote mental and physical well-being, such as exercise, hobbies, mindfulness, and quality time with loved ones, helps maintain overall happiness and resilience. By making conscious choices to balance work demands with personal growth and self-care, individuals can create a fulfilling lifestyle that supports both their ambitions and well-being. A well-balanced life not only leads to greater productivity but also enhances long-term satisfaction and inner peace.

    \n','Creating a Productive and Balanced Lifestyle','','inherit','closed','closed','','13-autosave-v1','','','2025-03-25 19:46:17','2025-03-25 19:46:17','',13,'http://localhost:8888/?p=39',0,'revision','',0),(40,1,'2025-03-25 19:47:39','2025-03-25 19:47:39','\n

    Traveling doesn’t have to be expensive; with the right approach, you can explore incredible destinations without breaking the bank. Budget-conscious travelers can enjoy meaningful experiences by prioritizing smart planning and cost-saving strategies. One of the best ways to cut travel costs is by being flexible with travel dates and destinations, as off-season trips and mid-week flights often come at significantly lower prices. Additionally, using budget airlines, fare comparison websites, and travel reward programs can help reduce transportation expenses, making it easier to reach your dream destination without overspending.

    \n\n\n\n

    Finding affordable accommodations is another key factor in budget travel. Instead of expensive hotels, consider alternative options such as hostels, guesthouses, vacation rentals, or even house-sitting opportunities. Many travelers also save money by staying in shared accommodations or using loyalty points from travel credit cards. For those seeking immersive cultural experiences, homestays and couchsurfing offer a way to connect with locals while keeping lodging costs minimal. By choosing accommodations that include kitchen facilities, travelers can further cut expenses by preparing their own meals rather than dining out for every meal.

    \n\n\n\n

    Maximizing your travel budget also means finding free or low-cost activities that enhance your trip. Many cities offer free walking tours, museums with discounted entry days, and scenic outdoor attractions that don’t cost a dime. Using public transportation instead of taxis or rental cars can significantly lower expenses while providing a more authentic local experience. Additionally, planning ahead and researching local deals, city passes, and budget-friendly dining options can help stretch your budget further. With thoughtful planning and mindful spending, budget travelers can enjoy unforgettable adventures without sacrificing quality experiences.

    \n','Budget Travel: How to Explore the World Without Breaking the Bank','','inherit','closed','closed','','12-revision-v1','','','2025-03-25 19:47:39','2025-03-25 19:47:39','',12,'http://localhost:8888/?p=40',0,'revision','',0),(41,1,'2025-03-25 19:47:46','2025-03-25 19:47:46','\n

    Traveling doesn’t have to be expensive; with the right approach, you can explore incredible destinations without breaking the bank. Budget-conscious travelers can enjoy meaningful experiences by prioritizing smart planning and cost-saving strategies. One of the best ways to cut travel costs is by being flexible with travel dates and destinations, as off-season trips and mid-week flights often come at significantly lower prices. Additionally, using budget airlines, fare comparison websites, and travel reward programs can help reduce transportation expenses, making it easier to reach your dream destination without overspending.

    \n\n\n\n

    Finding affordable accommodations is another key factor in budget travel. Instead of expensive hotels, consider alternative options such as hostels, guesthouses, vacation rentals, or even house-sitting opportunities. Many travelers also save money by staying in shared accommodations or using loyalty points from travel credit cards. For those seeking immersive cultural experiences, homestays and couchsurfing offer a way to connect with locals while keeping lodging costs minimal. By choosing accommodations that include kitchen facilities, travelers can further cut expenses by preparing their own meals rather than dining out for every meal.

    \n\n\n\n

    Maximizing your travel budget also means finding free or low-cost activities that enhance your trip. Many cities offer free walking tours, museums with discounted entry days, and scenic outdoor attractions that don’t cost a dime. Using public transportation instead of taxis or rental cars can significantly lower expenses while providing a more authentic local experience. Additionally, planning ahead and researching local deals, city passes, and budget-friendly dining options can help stretch your budget further. With thoughtful planning and mindful spending, budget travelers can enjoy unforgettable adventures without sacrificing quality experiences.

    \n','Budget Travel: How to Explore the World Without Breaking the Bank','','inherit','closed','closed','','12-autosave-v1','','','2025-03-25 19:47:46','2025-03-25 19:47:46','',12,'http://localhost:8888/?p=41',0,'revision','',0),(42,1,'2025-03-25 19:48:58','2025-03-25 19:48:58','https://unsplash.com/photos/a-group-of-people-standing-on-top-of-a-mountain-B_GLxJ7UzGQ','premium_photo-1683306661472-d7bd9497c82a','Photo taken by Diana Light','inherit','open','closed','','premium_photo-1683306661472-d7bd9497c82a','','','2025-03-25 19:49:27','2025-03-25 19:49:27','',12,'http://localhost:8888/wp-content/uploads/2024/10/premium_photo-1683306661472-d7bd9497c82a.jpeg',0,'attachment','image/jpeg',0),(43,1,'2025-03-25 19:52:19','2025-03-25 19:52:19','\n

    In today’s fast-paced world, managing stress is essential for maintaining mental well-being and overall health. Chronic stress can negatively impact both the mind and body, leading to anxiety, fatigue, and even physical ailments. One effective way to combat stress is through mindfulness, a practice that encourages present-moment awareness and self-reflection. By incorporating mindfulness techniques into daily life, individuals can cultivate a sense of calm, improve mental clarity, and develop emotional resilience. Whether through meditation, deep breathing, or mindful movement, these practices provide a valuable toolset for navigating life’s challenges with greater ease.

    \n\n\n\n

    Meditation is one of the most powerful mindfulness techniques for reducing stress. Simple practices such as guided meditation, body scans, or mantra repetition can help quiet the mind and shift focus away from worries. Even just a few minutes of meditation each day can lead to improved concentration, emotional stability, and reduced stress levels. Similarly, deep breathing exercises, such as diaphragmatic breathing or the 4-7-8 technique, activate the body’s relaxation response, lowering heart rate and promoting a sense of calm. These techniques can be practiced anywhere, making them accessible tools for managing stress in the moment.

    \n\n\n\n

    Beyond meditation and breathing exercises, incorporating mindfulness into everyday activities can further enhance emotional balance. Practicing gratitude, engaging in mindful eating, and taking breaks to appreciate nature are all simple ways to stay present and reduce stress. By making mindfulness a regular part of life, individuals can improve their overall well-being, enhance focus, and develop a healthier relationship with stress. Embracing these techniques not only fosters inner peace but also strengthens mental resilience, allowing for a more balanced and fulfilling life.

    \n','Mindfulness Techniques for Stress Reduction','','inherit','closed','closed','','11-revision-v1','','','2025-03-25 19:52:19','2025-03-25 19:52:19','',11,'http://localhost:8888/?p=43',0,'revision','',0),(44,1,'2025-03-25 19:53:16','2025-03-25 19:53:16','https://unsplash.com/photos/person-in-blue-shorts-sitting-on-beach-shore-during-daytime-n8L1VYaypcw','photo-1591228127791-8e2eaef098d3','Photo taken by Chelsea Gates','inherit','open','closed','','photo-1591228127791-8e2eaef098d3','','','2025-03-25 19:53:58','2025-03-25 19:53:58','',11,'http://localhost:8888/wp-content/uploads/2024/10/photo-1591228127791-8e2eaef098d3.jpeg',0,'attachment','image/jpeg',0),(45,1,'2025-03-26 12:58:54','2025-03-26 12:58:54','\n

    A balanced diet is the cornerstone of good health, providing the body with the essential nutrients it needs to function optimally. Proper nutrition supports energy levels, strengthens the immune system, and reduces the risk of chronic diseases such as diabetes, heart disease, and obesity. A well-rounded diet consists of a mix of macronutrients—carbohydrates, proteins, and fats—as well as vital micronutrients like vitamins and minerals. Understanding the role of these nutrients and how they work together is key to maintaining overall wellness and ensuring that the body receives the fuel it needs for daily activities.

    \n\n\n\n

    Macronutrients serve as the foundation of a healthy diet. Carbohydrates provide the primary source of energy, with whole grains, fruits, and vegetables offering fiber and essential nutrients. Proteins, found in lean meats, legumes, and dairy products, are crucial for muscle repair and overall body maintenance. Healthy fats, such as those from nuts, avocados, and olive oil, support brain function and heart health. Equally important are micronutrients, including vitamins like C and D, which boost immunity, and minerals like calcium and iron, which strengthen bones and support oxygen circulation. Ensuring a varied diet rich in whole foods helps meet these nutritional needs and promotes long-term health.

    \n\n\n\n

    Creating balanced meals doesn’t have to be complicated. Simple strategies such as meal prepping, incorporating a variety of colorful fruits and vegetables, and choosing whole, unprocessed foods can significantly improve dietary quality. Drinking enough water, practicing portion control, and limiting processed foods and added sugars further contribute to better health. By making mindful food choices and focusing on nutrient-dense meals, individuals can enhance their well-being, sustain energy levels, and build a strong foundation for a healthier lifestyle.

    \n','Nutrition Basics: Building a Balanced Diet','','inherit','closed','closed','','10-revision-v1','','','2025-03-26 12:58:54','2025-03-26 12:58:54','',10,'http://localhost:8888/?p=45',0,'revision','',0),(47,1,'2025-03-26 13:15:31','2025-03-26 13:15:31','https://unsplash.com/photos/woman-walking-on-road-during-daytime-fzHmP6z8OQ4','photo-1553969546-6f7388a7e07c','Photo taken by Josh Gordon','inherit','open','closed','','photo-1553969546-6f7388a7e07c','','','2025-03-26 13:15:59','2025-03-26 13:15:59','',7,'http://localhost:8888/wp-content/uploads/2025/03/photo-1553969546-6f7388a7e07c.jpeg',0,'attachment','image/jpeg',0),(48,1,'2025-03-26 13:17:41','2025-03-26 13:17:41','\n

    Southeast Asia offers an incredible blend of cultural richness, breathtaking landscapes, and unique adventures, making it a dream destination for travelers. While popular spots like Bangkok, Bali, and Hanoi attract millions of visitors, the region is also home to countless hidden gems waiting to be explored. From remote islands with pristine beaches to charming mountain villages rich in tradition, these lesser-known destinations provide a more authentic and immersive travel experience. Exploring these hidden spots allows travelers to connect with local cultures, escape the crowds, and discover the true essence of Southeast Asia.

    \n\n\n\n

    One such destination is Luang Prabang, Laos, a UNESCO-listed town known for its stunning temples, vibrant night markets, and serene Mekong River views. For those seeking adventure, the Philippines’ Camiguin Island offers volcano hikes, refreshing waterfalls, and untouched white-sand beaches far from the typical tourist trail. Meanwhile, Indonesia’s Tana Toraja region provides a fascinating cultural experience, with its intricate wooden houses and unique funeral rituals that offer a glimpse into one of the world’s most distinctive traditions. These hidden gems showcase the diversity of Southeast Asia, where every country holds something special beyond its well-trodden tourist spots.

    \n\n\n\n

    To make the most of a trip through Southeast Asia, travelers should embrace local customs, try regional delicacies, and plan visits during off-peak seasons to enjoy a more relaxed experience. Budget-conscious travelers can take advantage of affordable public transportation, guesthouses, and street food, all of which make Southeast Asia an accessible destination for every type of traveler. Whether you’re drawn to tranquil temples, lush jungles, or remote coastal retreats, exploring the lesser-known corners of Southeast Asia guarantees unforgettable memories and a deeper appreciation for its vibrant cultures and landscapes.

    \n','Exploring the Hidden Gems of Southeast Asia','','inherit','closed','closed','','9-revision-v1','','','2025-03-26 13:17:41','2025-03-26 13:17:41','',9,'http://localhost:8888/?p=48',0,'revision','',0),(49,1,'2025-03-26 13:18:50','2025-03-26 13:18:50','https://unsplash.com/photos/waterfalls-surrounded-by-green-trees-at-daytime-yhc14cewjL4','photo-1565092730214-e04a3f140040','Photo taken by Antoine LE','inherit','open','closed','','photo-1565092730214-e04a3f140040','','','2025-03-26 13:19:22','2025-03-26 13:19:22','',9,'http://localhost:8888/wp-content/uploads/2024/08/photo-1565092730214-e04a3f140040.jpeg',0,'attachment','image/jpeg',0),(50,1,'2025-03-26 13:21:24','2025-03-26 13:21:24','https://unsplash.com/photos/white-book-WI30grRfBnE','photo-1569230919100-d3fd5e1132f4','Photo taken by Prophsee Journals','inherit','open','closed','','photo-1569230919100-d3fd5e1132f4','','','2025-03-26 13:21:47','2025-03-26 13:21:47','',16,'http://localhost:8888/wp-content/uploads/2024/07/photo-1569230919100-d3fd5e1132f4.jpeg',0,'attachment','image/jpeg',0),(51,1,'2025-03-26 13:21:48','2025-03-26 13:21:48','\n

    Finding time to exercise can be challenging for busy professionals, but staying active is essential for overall health and well-being. Long work hours, meetings, and daily responsibilities often make it difficult to commit to a traditional gym routine. However, incorporating short, effective home workouts into a busy schedule can make a significant difference. With the right approach, you can maintain fitness and build strength without needing a gym membership or expensive equipment. By focusing on high-impact, time-efficient exercises, professionals can stay fit and energized, even on their busiest days.

    \n\n\n\n

    One of the best strategies for fitting exercise into a hectic schedule is to focus on full-body workouts that maximize results in a short amount of time. High-intensity interval training (HIIT) is an excellent option, combining bursts of activity with short rest periods to increase calorie burn and improve cardiovascular health. A 20- to 30-minute session of bodyweight exercises such as squats, lunges, push-ups, and planks can effectively build strength and endurance. Resistance bands and dumbbells can also be incorporated for added intensity, allowing for a more dynamic and challenging routine without requiring a large workout space.

    \n\n\n\n

    To stay consistent, it’s helpful to schedule workouts like any other important task in the day. Morning workouts can boost energy and set a positive tone for the day, while quick evening sessions help relieve stress and unwind after work. Even small lifestyle adjustments, such as taking active breaks, using a standing desk, or doing short stretching sessions, contribute to overall fitness. By prioritizing movement and making exercise a part of daily life, busy professionals can maintain their health, increase productivity, and feel more energized—no matter how packed their schedule may be.

    \n','Home Workout Routines for Busy Professionals','','inherit','closed','closed','','16-autosave-v1','','','2025-03-26 13:21:48','2025-03-26 13:21:48','',16,'http://localhost:8888/?p=51',0,'revision','',0),(52,1,'2025-03-26 13:21:56','2025-03-26 13:21:56','\n

    Finding time to exercise can be challenging for busy professionals, but staying active is essential for overall health and well-being. Long work hours, meetings, and daily responsibilities often make it difficult to commit to a traditional gym routine. However, incorporating short, effective home workouts into a busy schedule can make a significant difference. With the right approach, you can maintain fitness and build strength without needing a gym membership or expensive equipment. By focusing on high-impact, time-efficient exercises, professionals can stay fit and energized, even on their busiest days.

    \n\n\n\n

    One of the best strategies for fitting exercise into a hectic schedule is to focus on full-body workouts that maximize results in a short amount of time. High-intensity interval training (HIIT) is an excellent option, combining bursts of activity with short rest periods to increase calorie burn and improve cardiovascular health. A 20- to 30-minute session of bodyweight exercises such as squats, lunges, push-ups, and planks can effectively build strength and endurance. Resistance bands and dumbbells can also be incorporated for added intensity, allowing for a more dynamic and challenging routine without requiring a large workout space.

    \n\n\n\n

    To stay consistent, it’s helpful to schedule workouts like any other important task in the day. Morning workouts can boost energy and set a positive tone for the day, while quick evening sessions help relieve stress and unwind after work. Even small lifestyle adjustments, such as taking active breaks, using a standing desk, or doing short stretching sessions, contribute to overall fitness. By prioritizing movement and making exercise a part of daily life, busy professionals can maintain their health, increase productivity, and feel more energized—no matter how packed their schedule may be.

    \n','Home Workout Routines for Busy Professionals','','inherit','closed','closed','','16-revision-v1','','','2025-03-26 13:21:56','2025-03-26 13:21:56','',16,'http://localhost:8888/?p=52',0,'revision','',0),(53,1,'2025-03-26 14:04:42','2025-03-26 14:04:42','\n

    This is an example page for https://github.com/wpengine/hwptoolkit

    \n\n\n\n

    Content was generated by AI and images from https://unsplash.com/

    \n','Sample Page','','inherit','closed','closed','','2-revision-v1','','','2025-03-26 14:04:42','2025-03-26 14:04:42','',2,'http://localhost:8888/?p=53',0,'revision','',0),(54,1,'2025-03-31 16:44:52','2025-03-31 16:44:52','\n

    Our Story

    \n\n\n\n

    Founded in 2018, Acme Solutions began with a simple vision: to create innovative products that solve everyday problems. What started as a small team working out of a garage has grown into a thriving company with over 50 dedicated professionals committed to excellence.

    \n\n\n\n

    Who We Are

    \n\n\n\n

    At Acme Solutions, we\'re more than just a company – we\'re a community of passionate individuals who believe in the power of creativity and collaboration. Our diverse team brings together experts from various fields, allowing us to approach challenges from multiple perspectives and develop truly comprehensive solutions.

    \n\n\n\n

    Our Mission

    \n\n\n\n

    We strive to develop products and services that make a meaningful difference in people\'s lives. By combining cutting-edge technology with thoughtful design, we create solutions that are not only effective but also intuitive and accessible to all.

    \n\n\n\n

    Our Values

    \n\n\n\n

    Innovation: We constantly push boundaries and explore new possibilities.

    \n\n\n\n

    Quality: We never compromise on excellence, ensuring every product meets our high standards.

    \n\n\n\n

    Integrity: We conduct business with honesty and transparency.

    \n\n\n\n

    Customer Focus: We listen to our customers and put their needs at the center of everything we do.

    \n\n\n\n

    Sustainability: We\'re committed to environmentally responsible practices throughout our operations.

    \n\n\n\n

    Our Approach

    \n\n\n\n

    We believe in a collaborative approach to problem-solving. Before developing any solution, we take the time to understand the root challenges, gather insights from various stakeholders, and prototype multiple options. This thorough process ensures that our final products truly address the needs they\'re designed to solve.

    \n\n\n\n

    Our Team

    \n\n\n\n

    Our team consists of designers, engineers, researchers, and business strategists who share a common passion for innovation. We foster an environment of continuous learning and professional growth, encouraging everyone to contribute their unique perspectives and skills.

    \n\n\n\n

    Looking Forward

    \n\n\n\n

    As we continue to grow, we remain committed to our founding principles while embracing new challenges and opportunities. We\'re excited about the future and look forward to developing the next generation of solutions that will help shape a better tomorrow.

    \n\n\n\n
    \n\n\n\n

    Acme Solutions - Innovating for a better everyday

    \n','About Us','','publish','closed','closed','','about-us','','','2025-03-31 16:44:52','2025-03-31 16:44:52','',0,'http://localhost:8888/?page_id=54',0,'page','',0),(55,1,'2025-03-31 16:43:16','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2025-03-31 16:43:16','0000-00-00 00:00:00','',0,'http://localhost:8888/?p=55',0,'post','',0),(56,1,'2025-03-31 16:44:52','2025-03-31 16:44:52','\n

    Our Story

    \n\n\n\n

    Founded in 2018, Acme Solutions began with a simple vision: to create innovative products that solve everyday problems. What started as a small team working out of a garage has grown into a thriving company with over 50 dedicated professionals committed to excellence.

    \n\n\n\n

    Who We Are

    \n\n\n\n

    At Acme Solutions, we\'re more than just a company – we\'re a community of passionate individuals who believe in the power of creativity and collaboration. Our diverse team brings together experts from various fields, allowing us to approach challenges from multiple perspectives and develop truly comprehensive solutions.

    \n\n\n\n

    Our Mission

    \n\n\n\n

    We strive to develop products and services that make a meaningful difference in people\'s lives. By combining cutting-edge technology with thoughtful design, we create solutions that are not only effective but also intuitive and accessible to all.

    \n\n\n\n

    Our Values

    \n\n\n\n

    Innovation: We constantly push boundaries and explore new possibilities.

    \n\n\n\n

    Quality: We never compromise on excellence, ensuring every product meets our high standards.

    \n\n\n\n

    Integrity: We conduct business with honesty and transparency.

    \n\n\n\n

    Customer Focus: We listen to our customers and put their needs at the center of everything we do.

    \n\n\n\n

    Sustainability: We\'re committed to environmentally responsible practices throughout our operations.

    \n\n\n\n

    Our Approach

    \n\n\n\n

    We believe in a collaborative approach to problem-solving. Before developing any solution, we take the time to understand the root challenges, gather insights from various stakeholders, and prototype multiple options. This thorough process ensures that our final products truly address the needs they\'re designed to solve.

    \n\n\n\n

    Our Team

    \n\n\n\n

    Our team consists of designers, engineers, researchers, and business strategists who share a common passion for innovation. We foster an environment of continuous learning and professional growth, encouraging everyone to contribute their unique perspectives and skills.

    \n\n\n\n

    Looking Forward

    \n\n\n\n

    As we continue to grow, we remain committed to our founding principles while embracing new challenges and opportunities. We\'re excited about the future and look forward to developing the next generation of solutions that will help shape a better tomorrow.

    \n\n\n\n
    \n\n\n\n

    Acme Solutions - Innovating for a better everyday

    \n','About Us','','inherit','closed','closed','','54-revision-v1','','','2025-03-31 16:44:52','2025-03-31 16:44:52','',54,'http://localhost:8888/?p=56',0,'revision','',0),(57,1,'2025-03-31 17:20:29','2025-03-31 17:20:29','\n

    Who we are

    \n\n\n

    Suggested text: Our website address is: http://localhost:8888.

    \n\n\n

    Comments

    \n\n\n

    Suggested text: When visitors leave comments on the site we collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.

    \n\n\n

    An anonymized string created from your email address (also called a hash) may be provided to the Gravatar service to see if you are using it. The Gravatar service privacy policy is available here: https://automattic.com/privacy/. After approval of your comment, your profile picture is visible to the public in the context of your comment.

    \n\n\n

    Media

    \n\n\n

    Suggested text: If you upload images to the website, you should avoid uploading images with embedded location data (EXIF GPS) included. Visitors to the website can download and extract any location data from images on the website.

    \n\n\n

    Cookies

    \n\n\n

    Suggested text: If you leave a comment on our site you may opt-in to saving your name, email address and website in cookies. These are for your convenience so that you do not have to fill in your details again when you leave another comment. These cookies will last for one year.

    \n\n\n

    If you visit our login page, we will set a temporary cookie to determine if your browser accepts cookies. This cookie contains no personal data and is discarded when you close your browser.

    \n\n\n

    When you log in, we will also set up several cookies to save your login information and your screen display choices. Login cookies last for two days, and screen options cookies last for a year. If you select "Remember Me", your login will persist for two weeks. If you log out of your account, the login cookies will be removed.

    \n\n\n

    If you edit or publish an article, an additional cookie will be saved in your browser. This cookie includes no personal data and simply indicates the post ID of the article you just edited. It expires after 1 day.

    \n\n\n

    Embedded content from other websites

    \n\n\n

    Suggested text: Articles on this site may include embedded content (e.g. videos, images, articles, etc.). Embedded content from other websites behaves in the exact same way as if the visitor has visited the other website.

    \n\n\n

    These websites may collect data about you, use cookies, embed additional third-party tracking, and monitor your interaction with that embedded content, including tracking your interaction with the embedded content if you have an account and are logged in to that website.

    \n\n\n

    Who we share your data with

    \n\n\n

    Suggested text: If you request a password reset, your IP address will be included in the reset email.

    \n\n\n

    How long we retain your data

    \n\n\n

    Suggested text: If you leave a comment, the comment and its metadata are retained indefinitely. This is so we can recognize and approve any follow-up comments automatically instead of holding them in a moderation queue.

    \n\n\n

    For users that register on our website (if any), we also store the personal information they provide in their user profile. All users can see, edit, or delete their personal information at any time (except they cannot change their username). Website administrators can also see and edit that information.

    \n\n\n

    What rights you have over your data

    \n\n\n

    Suggested text: If you have an account on this site, or have left comments, you can request to receive an exported file of the personal data we hold about you, including any data you have provided to us. You can also request that we erase any personal data we hold about you. This does not include any data we are obliged to keep for administrative, legal, or security purposes.

    \n\n\n

    Where your data is sent

    \n\n\n

    Suggested text: Visitor comments may be checked through an automated spam detection service.

    \n\n','Privacy Policy','','inherit','closed','closed','','3-revision-v1','','','2025-03-31 17:20:29','2025-03-31 17:20:29','',3,'http://localhost:8888/?p=57',0,'revision','',0); +/*!40000 ALTER TABLE `wp_posts` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_registration_log` +-- + +DROP TABLE IF EXISTS `wp_registration_log`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_registration_log` ( + `ID` bigint(20) NOT NULL AUTO_INCREMENT, + `email` varchar(255) NOT NULL DEFAULT '', + `IP` varchar(30) NOT NULL DEFAULT '', + `blog_id` bigint(20) NOT NULL DEFAULT 0, + `date_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + PRIMARY KEY (`ID`), + KEY `IP` (`IP`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_registration_log` +-- + +LOCK TABLES `wp_registration_log` WRITE; +/*!40000 ALTER TABLE `wp_registration_log` DISABLE KEYS */; +INSERT INTO `wp_registration_log` VALUES (1,'wordpress@example.com','172.19.0.1',2,'2025-03-25 18:23:51'); +/*!40000 ALTER TABLE `wp_registration_log` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_signups` +-- + +DROP TABLE IF EXISTS `wp_signups`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_signups` ( + `signup_id` bigint(20) NOT NULL AUTO_INCREMENT, + `domain` varchar(200) NOT NULL DEFAULT '', + `path` varchar(100) NOT NULL DEFAULT '', + `title` longtext NOT NULL, + `user_login` varchar(60) NOT NULL DEFAULT '', + `user_email` varchar(100) NOT NULL DEFAULT '', + `registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `activated` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `active` tinyint(1) NOT NULL DEFAULT 0, + `activation_key` varchar(50) NOT NULL DEFAULT '', + `meta` longtext DEFAULT NULL, + PRIMARY KEY (`signup_id`), + KEY `activation_key` (`activation_key`), + KEY `user_email` (`user_email`), + KEY `user_login_email` (`user_login`,`user_email`), + KEY `domain_path` (`domain`(140),`path`(51)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_signups` +-- + +LOCK TABLES `wp_signups` WRITE; +/*!40000 ALTER TABLE `wp_signups` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_signups` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_site` +-- + +DROP TABLE IF EXISTS `wp_site`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_site` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `domain` varchar(200) NOT NULL DEFAULT '', + `path` varchar(100) NOT NULL DEFAULT '', + PRIMARY KEY (`id`), + KEY `domain` (`domain`(140),`path`(51)) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_site` +-- + +LOCK TABLES `wp_site` WRITE; +/*!40000 ALTER TABLE `wp_site` DISABLE KEYS */; +INSERT INTO `wp_site` VALUES (1,'localhost:8888','/'); +/*!40000 ALTER TABLE `wp_site` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_sitemeta` +-- + +DROP TABLE IF EXISTS `wp_sitemeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_sitemeta` ( + `meta_id` bigint(20) NOT NULL AUTO_INCREMENT, + `site_id` bigint(20) NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `meta_key` (`meta_key`(191)), + KEY `site_id` (`site_id`) +) ENGINE=InnoDB AUTO_INCREMENT=211 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_sitemeta` +-- + +LOCK TABLES `wp_sitemeta` WRITE; +/*!40000 ALTER TABLE `wp_sitemeta` DISABLE KEYS */; +INSERT INTO `wp_sitemeta` VALUES (1,1,'site_name','Client Multisite Next.js App Router Example Sites'),(2,1,'admin_email','wordpress@example.com'),(3,1,'admin_user_id','1'),(4,1,'registration','none'),(5,1,'upload_filetypes','jpg jpeg jpe gif png bmp tiff tif webp avif ico heic heif heics heifs asf asx wmv wmx wm avi divx flv mov qt mpeg mpg mpe mp4 m4v ogv webm mkv 3gp 3gpp 3g2 3gp2 txt asc c cc h srt csv tsv ics rtx css vtt dfxp mp3 m4a m4b aac ra ram wav ogg oga flac mid midi wma wax mka rtf pdf class tar zip gz gzip rar 7z psd xcf doc pot pps ppt wri xla xls xlt xlw mdb mpp docx docm dotx dotm xlsx xlsm xlsb xltx xltm xlam pptx pptm ppsx ppsm potx potm ppam sldx sldm onetoc onetoc2 onetmp onepkg oxps xps odt odp ods odg odc odb odf wp wpd key numbers pages'),(6,1,'blog_upload_space','100'),(7,1,'fileupload_maxk','1500'),(8,1,'site_admins','a:1:{i:0;s:5:\"admin\";}'),(9,1,'allowedthemes','a:1:{s:16:\"twentytwentyfive\";b:1;}'),(10,1,'illegal_names','a:9:{i:0;s:3:\"www\";i:1;s:3:\"web\";i:2;s:4:\"root\";i:3;s:5:\"admin\";i:4;s:4:\"main\";i:5;s:6:\"invite\";i:6;s:13:\"administrator\";i:7;s:5:\"files\";i:8;s:4:\"blog\";}'),(11,1,'wpmu_upgrade_site','58975'),(12,1,'welcome_email','Howdy USERNAME,\r\n\r\nYour new SITE_NAME site has been successfully set up at:\r\nBLOG_URL\r\n\r\nYou can log in to the administrator account with the following information:\r\n\r\nUsername: USERNAME\r\nPassword: PASSWORD\r\nLog in here: BLOG_URLwp-login.php\r\n\r\nWe hope you enjoy your new site. Thanks!\r\n\r\n--The Team @ SITE_NAME'),(13,1,'first_post','Welcome to %s. This is your first post. Edit or delete it, then start writing!'),(14,1,'siteurl','http://localhost:8888/'),(15,1,'add_new_users','0'),(16,1,'upload_space_check_disabled','1'),(17,1,'subdomain_install',''),(18,1,'ms_files_rewriting','0'),(19,1,'user_count','1'),(20,1,'initial_db_version','58975'),(21,1,'active_sitewide_plugins','a:0:{}'),(22,1,'WPLANG',''),(23,1,'main_site','1'),(26,1,'_site_transient_update_core','O:8:\"stdClass\":4:{s:7:\"updates\";a:1:{i:0;O:8:\"stdClass\":10:{s:8:\"response\";s:6:\"latest\";s:8:\"download\";s:59:\"https://downloads.wordpress.org/release/wordpress-6.7.2.zip\";s:6:\"locale\";s:5:\"en_US\";s:8:\"packages\";O:8:\"stdClass\":5:{s:4:\"full\";s:59:\"https://downloads.wordpress.org/release/wordpress-6.7.2.zip\";s:10:\"no_content\";s:70:\"https://downloads.wordpress.org/release/wordpress-6.7.2-no-content.zip\";s:11:\"new_bundled\";s:71:\"https://downloads.wordpress.org/release/wordpress-6.7.2-new-bundled.zip\";s:7:\"partial\";s:0:\"\";s:8:\"rollback\";s:0:\"\";}s:7:\"current\";s:5:\"6.7.2\";s:7:\"version\";s:5:\"6.7.2\";s:11:\"php_version\";s:6:\"7.2.24\";s:13:\"mysql_version\";s:5:\"5.5.5\";s:11:\"new_bundled\";s:3:\"6.7\";s:15:\"partial_version\";s:0:\"\";}}s:12:\"last_checked\";i:1743501802;s:15:\"version_checked\";s:5:\"6.7.2\";s:12:\"translations\";a:0:{}}'),(30,1,'_site_transient_update_themes','O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1743501803;s:7:\"checked\";a:15:{s:12:\"twentyeleven\";s:3:\"4.8\";s:13:\"twentyfifteen\";s:3:\"3.9\";s:14:\"twentyfourteen\";s:3:\"4.1\";s:14:\"twentynineteen\";s:3:\"3.0\";s:15:\"twentyseventeen\";s:3:\"3.8\";s:13:\"twentysixteen\";s:3:\"3.4\";s:9:\"twentyten\";s:3:\"4.3\";s:14:\"twentythirteen\";s:3:\"4.3\";s:12:\"twentytwelve\";s:3:\"4.4\";s:12:\"twentytwenty\";s:3:\"2.8\";s:16:\"twentytwentyfive\";s:3:\"1.0\";s:16:\"twentytwentyfour\";s:3:\"1.3\";s:15:\"twentytwentyone\";s:3:\"2.4\";s:17:\"twentytwentythree\";s:3:\"1.6\";s:15:\"twentytwentytwo\";s:3:\"1.9\";}s:8:\"response\";a:1:{s:16:\"twentytwentyfive\";a:6:{s:5:\"theme\";s:16:\"twentytwentyfive\";s:11:\"new_version\";s:3:\"1.1\";s:3:\"url\";s:46:\"https://wordpress.org/themes/twentytwentyfive/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/theme/twentytwentyfive.1.1.zip\";s:8:\"requires\";s:3:\"6.7\";s:12:\"requires_php\";s:3:\"7.2\";}}s:9:\"no_update\";a:14:{s:12:\"twentyeleven\";a:6:{s:5:\"theme\";s:12:\"twentyeleven\";s:11:\"new_version\";s:3:\"4.8\";s:3:\"url\";s:42:\"https://wordpress.org/themes/twentyeleven/\";s:7:\"package\";s:58:\"https://downloads.wordpress.org/theme/twentyeleven.4.8.zip\";s:8:\"requires\";s:3:\"3.2\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:13:\"twentyfifteen\";a:6:{s:5:\"theme\";s:13:\"twentyfifteen\";s:11:\"new_version\";s:3:\"3.9\";s:3:\"url\";s:43:\"https://wordpress.org/themes/twentyfifteen/\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/theme/twentyfifteen.3.9.zip\";s:8:\"requires\";s:3:\"4.1\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:14:\"twentyfourteen\";a:6:{s:5:\"theme\";s:14:\"twentyfourteen\";s:11:\"new_version\";s:3:\"4.1\";s:3:\"url\";s:44:\"https://wordpress.org/themes/twentyfourteen/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/theme/twentyfourteen.4.1.zip\";s:8:\"requires\";s:3:\"3.6\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:14:\"twentynineteen\";a:6:{s:5:\"theme\";s:14:\"twentynineteen\";s:11:\"new_version\";s:3:\"3.0\";s:3:\"url\";s:44:\"https://wordpress.org/themes/twentynineteen/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/theme/twentynineteen.3.0.zip\";s:8:\"requires\";s:3:\"4.7\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:15:\"twentyseventeen\";a:6:{s:5:\"theme\";s:15:\"twentyseventeen\";s:11:\"new_version\";s:3:\"3.8\";s:3:\"url\";s:45:\"https://wordpress.org/themes/twentyseventeen/\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/theme/twentyseventeen.3.8.zip\";s:8:\"requires\";s:3:\"4.7\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:13:\"twentysixteen\";a:6:{s:5:\"theme\";s:13:\"twentysixteen\";s:11:\"new_version\";s:3:\"3.4\";s:3:\"url\";s:43:\"https://wordpress.org/themes/twentysixteen/\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/theme/twentysixteen.3.4.zip\";s:8:\"requires\";s:3:\"4.4\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:9:\"twentyten\";a:6:{s:5:\"theme\";s:9:\"twentyten\";s:11:\"new_version\";s:3:\"4.3\";s:3:\"url\";s:39:\"https://wordpress.org/themes/twentyten/\";s:7:\"package\";s:55:\"https://downloads.wordpress.org/theme/twentyten.4.3.zip\";s:8:\"requires\";s:3:\"3.0\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:14:\"twentythirteen\";a:6:{s:5:\"theme\";s:14:\"twentythirteen\";s:11:\"new_version\";s:3:\"4.3\";s:3:\"url\";s:44:\"https://wordpress.org/themes/twentythirteen/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/theme/twentythirteen.4.3.zip\";s:8:\"requires\";s:3:\"3.6\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:12:\"twentytwelve\";a:6:{s:5:\"theme\";s:12:\"twentytwelve\";s:11:\"new_version\";s:3:\"4.4\";s:3:\"url\";s:42:\"https://wordpress.org/themes/twentytwelve/\";s:7:\"package\";s:58:\"https://downloads.wordpress.org/theme/twentytwelve.4.4.zip\";s:8:\"requires\";s:3:\"3.5\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:12:\"twentytwenty\";a:6:{s:5:\"theme\";s:12:\"twentytwenty\";s:11:\"new_version\";s:3:\"2.8\";s:3:\"url\";s:42:\"https://wordpress.org/themes/twentytwenty/\";s:7:\"package\";s:58:\"https://downloads.wordpress.org/theme/twentytwenty.2.8.zip\";s:8:\"requires\";s:3:\"4.7\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:16:\"twentytwentyfour\";a:6:{s:5:\"theme\";s:16:\"twentytwentyfour\";s:11:\"new_version\";s:3:\"1.3\";s:3:\"url\";s:46:\"https://wordpress.org/themes/twentytwentyfour/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/theme/twentytwentyfour.1.3.zip\";s:8:\"requires\";s:3:\"6.4\";s:12:\"requires_php\";s:3:\"7.0\";}s:15:\"twentytwentyone\";a:6:{s:5:\"theme\";s:15:\"twentytwentyone\";s:11:\"new_version\";s:3:\"2.4\";s:3:\"url\";s:45:\"https://wordpress.org/themes/twentytwentyone/\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/theme/twentytwentyone.2.4.zip\";s:8:\"requires\";s:3:\"5.3\";s:12:\"requires_php\";s:3:\"5.6\";}s:17:\"twentytwentythree\";a:6:{s:5:\"theme\";s:17:\"twentytwentythree\";s:11:\"new_version\";s:3:\"1.6\";s:3:\"url\";s:47:\"https://wordpress.org/themes/twentytwentythree/\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/theme/twentytwentythree.1.6.zip\";s:8:\"requires\";s:3:\"6.1\";s:12:\"requires_php\";s:3:\"5.6\";}s:15:\"twentytwentytwo\";a:6:{s:5:\"theme\";s:15:\"twentytwentytwo\";s:11:\"new_version\";s:3:\"1.9\";s:3:\"url\";s:45:\"https://wordpress.org/themes/twentytwentytwo/\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/theme/twentytwentytwo.1.9.zip\";s:8:\"requires\";s:3:\"5.9\";s:12:\"requires_php\";s:3:\"5.6\";}}s:12:\"translations\";a:0:{}}'),(31,1,'_site_transient_timeout_browser_b977e10d1cb26107909e97d51a688323','1743531562'),(32,1,'_site_transient_browser_b977e10d1cb26107909e97d51a688323','a:10:{s:4:\"name\";s:6:\"Chrome\";s:7:\"version\";s:9:\"134.0.0.0\";s:8:\"platform\";s:9:\"Macintosh\";s:10:\"update_url\";s:29:\"https://www.google.com/chrome\";s:7:\"img_src\";s:43:\"http://s.w.org/images/browsers/chrome.png?1\";s:11:\"img_src_ssl\";s:44:\"https://s.w.org/images/browsers/chrome.png?1\";s:15:\"current_version\";s:2:\"18\";s:7:\"upgrade\";b:0;s:8:\"insecure\";b:0;s:6:\"mobile\";b:0;}'),(33,1,'_site_transient_timeout_php_check_990bfacb848fa087bcfc06850f5e4447','1743531562'),(34,1,'_site_transient_php_check_990bfacb848fa087bcfc06850f5e4447','a:5:{s:19:\"recommended_version\";s:3:\"7.4\";s:15:\"minimum_version\";s:6:\"7.2.24\";s:12:\"is_supported\";b:1;s:9:\"is_secure\";b:1;s:13:\"is_acceptable\";b:1;}'),(35,1,'wp_force_deactivated_plugins','a:0:{}'),(36,1,'can_compress_scripts','0'),(39,1,'_site_transient_timeout_acf_network_upgrade_needed_5.5.0','1750702995'),(40,1,'_site_transient_acf_network_upgrade_needed_5.5.0','no'),(41,1,'site_meta_supported','1'),(44,1,'registrationnotification','yes'),(45,1,'welcome_user_email','Howdy USERNAME,\r\n\r\nYour new account is set up.\r\n\r\nYou can log in with the following information:\r\nUsername: USERNAME\r\nPassword: PASSWORD\r\nLOGINLINK\r\n\r\nThanks!\r\n\r\n--The Team @ SITE_NAME'),(46,1,'blog_count','2'),(53,1,'_site_transient_wp_plugin_dependencies_plugin_data','a:1:{s:10:\"wp-graphql\";a:35:{s:4:\"name\";s:9:\"WPGraphQL\";s:4:\"slug\";s:10:\"wp-graphql\";s:7:\"version\";s:5:\"2.1.1\";s:6:\"author\";s:66:\"Jason Bahl\";s:14:\"author_profile\";s:41:\"https://profiles.wordpress.org/jasonbahl/\";s:12:\"contributors\";a:6:{s:9:\"jasonbahl\";a:3:{s:7:\"profile\";s:41:\"https://profiles.wordpress.org/jasonbahl/\";s:6:\"avatar\";s:120:\"https://secure.gravatar.com/avatar/798f7b954678b4efaafa269e29194e435a61bbd02accfbf2a93ebc37888f9ce5?s=96&d=monsterid&r=g\";s:12:\"display_name\";s:10:\"Jason Bahl\";}s:12:\"tylerbarnes1\";a:3:{s:7:\"profile\";s:44:\"https://profiles.wordpress.org/tylerbarnes1/\";s:6:\"avatar\";s:120:\"https://secure.gravatar.com/avatar/0168aae06b1406c39d3ba9ea8138d8de975df7cd08382e9960976e7fe3701c2a?s=96&d=monsterid&r=g\";s:12:\"display_name\";s:5:\"Tyler\";}s:10:\"ryankanner\";a:3:{s:7:\"profile\";s:42:\"https://profiles.wordpress.org/ryankanner/\";s:6:\"avatar\";s:120:\"https://secure.gravatar.com/avatar/0b51cdade8f3b0ac34c620396636f857d4189bfdb7f3df4249a5e9b9d114a022?s=96&d=monsterid&r=g\";s:12:\"display_name\";s:11:\"Ryan Kanner\";}s:10:\"chopinbach\";a:3:{s:7:\"profile\";s:42:\"https://profiles.wordpress.org/chopinbach/\";s:6:\"avatar\";s:120:\"https://secure.gravatar.com/avatar/e9ef79a809e178334a16c65dc6d46a66aeb6226486fd316e285d0957b222c127?s=96&d=monsterid&r=g\";s:12:\"display_name\";s:13:\"Edwin Cromley\";}s:9:\"kidunot89\";a:3:{s:7:\"profile\";s:41:\"https://profiles.wordpress.org/kidunot89/\";s:6:\"avatar\";s:120:\"https://secure.gravatar.com/avatar/b88ae0ad9a6c04e5ee6050d959957f7662fd56d036e13f8d5d195e0ea1016036?s=96&d=monsterid&r=g\";s:12:\"display_name\";s:12:\"Geoff Taylor\";}s:10:\"justlevine\";a:3:{s:7:\"profile\";s:42:\"https://profiles.wordpress.org/justlevine/\";s:6:\"avatar\";s:120:\"https://secure.gravatar.com/avatar/33212bff2915bd72792772a2d3203abe0402352b6be6ba65081036f10560c6e6?s=96&d=monsterid&r=g\";s:12:\"display_name\";s:12:\"David Levine\";}}s:8:\"requires\";s:3:\"6.0\";s:6:\"tested\";s:5:\"6.7.2\";s:12:\"requires_php\";s:3:\"7.4\";s:16:\"requires_plugins\";a:0:{}s:6:\"rating\";i:98;s:7:\"ratings\";a:5:{i:5;i:45;i:4;i:1;i:3;i:1;i:2;i:0;i:1;i:0;}s:11:\"num_ratings\";i:47;s:11:\"support_url\";s:48:\"https://wordpress.org/support/plugin/wp-graphql/\";s:15:\"support_threads\";i:0;s:24:\"support_threads_resolved\";i:0;s:15:\"active_installs\";i:30000;s:12:\"last_updated\";s:22:\"2025-03-19 10:14pm GMT\";s:5:\"added\";s:10:\"2020-11-14\";s:8:\"homepage\";s:40:\"https://github.com/wp-graphql/wp-graphql\";s:8:\"sections\";a:5:{s:11:\"description\";s:3275:\"

    WPGraphQL is a free, open-source WordPress plugin that provides an extendable GraphQL schema and API for any WordPress site.

    \n

    Get Started

    \n
      \n
    1. Install WPGraphQL: wp plugin install wp-graphql --activate
    2. \n
    3. Try it out: Live Demo
    4. \n
    5. Read the Quick Start Guide.
    6. \n
    7. Join the Community on Discord and Star the Repo!
    8. \n
    \n

    Key Features

    \n
      \n
    • Flexible API: Query posts, pages, custom post types, taxonomies, users, and more.
    • \n
    • Extendable Schema: Easily add functionality with WPGraphQL’s API, enabling custom integrations.
    • \n
    • Compatible with Modern Frameworks: Works seamlessly with Next.js, Astro, SvelteKit, and more.
    • \n
    • Optimized Performance: Fetch exactly the data you need in a single query. Boost performance with WPGraphQL Smart Cache.
    • \n
    \n

    WPGraphQL is becoming a Canonical Plugin on WordPress.org, ensuring long-term support and a growing community of users and contributors.

    \n

    Upgrading

    \n

    It is recommended that anytime you want to update WPGraphQL that you get familiar with what’s changed in the release.

    \n

    WPGraphQL publishes release notes on Github.

    \n

    WPGraphQL has been following Semver practices for a few years. We will continue to follow Semver and let version numbers communicate meaning. The summary of Semver versioning is as follows:

    \n
      \n
    • MAJOR version when you make incompatible API changes,
    • \n
    • MINOR version when you add functionality in a backwards compatible manner, and
    • \n
    • PATCH version when you make backwards compatible bug fixes.
    • \n
    \n

    You can read more about the details of Semver at semver.org

    \n

    Privacy Policy

    \n

    WPGraphQL uses Appsero SDK to collect some telemetry data upon user’s confirmation. This helps us to troubleshoot problems faster and make product improvements.

    \n

    Appsero SDK does not gather any data by default. The SDK starts gathering basic telemetry data only when a user allows it via the admin notice.

    \n

    Learn more about how Appsero collects and uses this data.

    \n

    Learn more about how Appsero collects and uses this data.

    \n\";s:3:\"faq\";s:1570:\"\n
    \nHow is WPGraphQL funded?\n\n

    \n

    WPGraphQL is free and open-source. It is supported by contributors, backers, and sponsors, including Automattic, which provides significant support as WPGraphQL becomes a Canonical Plugin.

    \n

    Learn more about supporting WPGraphQL on Open Collective.

    \n

    \n
    \nCan I use WPGraphQL with xx JavaScript framework?\n\n

    \n

    Yes! WPGraphQL works with any client that can make HTTP requests to the GraphQL endpoint. It integrates seamlessly with frameworks like Next.js, Gatsby, Astro, and more.

    \n

    \n
    \nWhere can I get support?\n\n

    \n

    You can join the WPGraphQL Discord community for support, discussions, and announcements.

    \n

    \n
    \nHow does WPGraphQL handle privacy and telemetry?\n\n

    \n

    WPGraphQL uses the Appsero SDK to collect telemetry data only after user consent. This helps improve the plugin while respecting user privacy.

    \n

    \n\n\";s:9:\"changelog\";s:25405:\"

    2.1.1

    \n

    Bug Fixes

    \n
      \n
    • fix: Avoid the deprecation warning when sending null header values (https://github.com/jasonbahl/automation-tests/pull/3338)
    • \n
    \n

    Other Changes

    \n
      \n
    • chore: update README’s for github workflows (https://github.com/jasonbahl/automation-tests/pull/3343)
    • \n
    • chore: update cursor rules to use .cursor/rules instead of .cursorrules (https://github.com/jasonbahl/automation-tests/pull/3333)
    • \n
    • chore: add WPGraphQL IDE to the extensions page (https://github.com/jasonbahl/automation-tests/pull/3332)
    • \n
    \n

    2.1.0

    \n

    New Features

    \n
      \n
    • \n

      #3320: feat: add filter to Request::is_valid_http_content_type to allow for custom content types with POST method requests
      \nChores / Bugfixes

      \n
    • \n
    • \n

      #3314: fix: use version_compare to simplify incompatible dependent check

      \n
    • \n
    • #3316: docs: update changelog and upgrade notice
    • \n
    • #3325: docs: update quick-start.md
    • \n
    • #3190: docs: add developer docs for AbstractConnectionResolver
    • \n
    \n

    2.0.0

    \n

    BREAKING CHANGE UPDATE

    \n

    This is a major update that drops support for PHP versions below 7.4 and WordPress versions below 6.0.

    \n

    We’ve written more about the update here:

    \n
      \n
    • https://www.wpgraphql.com/2024/12/16/wpgraphql-v2-0-is-coming-heres-what-you-need-to-know
    • \n
    • https://www.wpgraphql.com/2024/12/16/wpgraphql-v2-0-technical-update-breaking-changes
    • \n
    \n

    1.32.1

    \n

    Chores / Bugfixes

    \n
      \n
    • #3308: fix: update term mutation was preventing terms from removing the parentId
    • \n
    \n

    1.32.0

    \n

    New Features

    \n
      \n
    • #3294: feat: introduce new fields for getting mediaItem files and filePaths
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • update stable tag
    • \n
    \n

    1.31.0

    \n

    New Features

    \n
      \n
    • #3278: feat: add option to provide custom file path for static schemas when using the wp graphql generate-static-schema command
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3284: fix: fix: Updated docs link for example of hierarchical data
    • \n
    • #3283: fix: Error in update checker when WPGraphQL is active as an mu-plugin
    • \n
    • #3293: fix: correct the resolver for the MediaDetails.file field to return the file name
    • \n
    • #3299: chore: restore excluded PHPCS rules
    • \n
    • #3301: fix: React backwards-compatibility with WP < 6.6
    • \n
    • #3302: chore: update NPM dependencies
    • \n
    • #3297: fix: typo in Extensions\\Registry\\get_extensions() method name
    • \n
    • #3303: chore: cleanup git cache
    • \n
    • #3298: chore: submit GF, Rank Math, and Headless Login plugins
    • \n
    • #3287: chore: fixes the syntax of the readme.txt so that the short description is shown on WordPress.org
    • \n
    • #3284: fix: Updated docs link for example of hierarchical data
    • \n
    \n

    1.30.0

    \n

    Chores / Bugfixes

    \n
      \n
    • #3250: fix: receiving post for Incorrect uri
    • \n
    • #3268: ci: trigger PR workflows on release/* branches
    • \n
    • #3267: chore: fix bleeding edge/deprecated PHPStan smells [first pass]
    • \n
    • #3270: build(deps): bump the npm_and_yarn group across 1 directory with 3 updates
    • \n
    • #3271: fix: default cat should not be added when other categories are added
    • \n
    \n

    New Features

    \n
      \n
    • #3251: feat: implement SemVer-compliant update checker
    • \n
    • #3196: feat: expose EnqueuedAsset.group and EnqueuedScript.location to schema
    • \n
    • #3188: feat: Add WPGraphQL Extensions page to the WordPress admin
    • \n
    \n

    1.29.3

    \n

    Chores / Bugfixes

    \n
      \n
    • #3245: fix: update appsero/client to v2.0.4 to prevent conflicts with WP6.7
    • \n
    • #3243: chore: fix Composer autoloader for WPGraphQL.php
    • \n
    • #3242: chore: update Composer dev deps
    • \n
    • #3235: chore: general updates to README.md and readme.txt
    • \n
    • #3234: chore: update quick-start.md to provide more clarity around using wpackagist
    • \n
    \n

    1.29.2

    \n

    Chores / Bugfixes

    \n
      \n
    • fix: move assets/blueprint.json under .wordpress-org directory
    • \n
    \n

    1.29.1

    \n

    Chores / Bugfixes

    \n
      \n
    • #3226: chore: add blueprint.json so WPGraphQL can be demo’d with a live preview on WordPress.org
    • \n
    • #3218: docs: update upgrading.md to highlight how breaking change releases will be handled
    • \n
    • #3214: fix: lazy-resolve Post.sourceUrl and deprecate Post.sourceUrlsBySize
    • \n
    • #3224: chore(deps-dev): bump symfony/process from 5.4.40 to 5.4.46 in the composer group
    • \n
    • #3219: test: add tests for querying different sizes of media items
    • \n
    • #3229: fix: Deprecated null value warning in titleRendered callback
    • \n
    \n

    1.29.0

    \n

    New Features

    \n
      \n
    • #3208: feat: expose commenter edge fields
    • \n
    • #3207: feat: introduce get_graphql_admin_notices and convert AdminNotices class to a singleton
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3213: chore(deps): bump the npm_and_yarn group across 1 directory with 4 updates
    • \n
    • #3212: chore(deps): bump dset from 3.1.3 to 3.1.4 in the npm_and_yarn group across 1 directory
    • \n
    • #3211: chore: add LABELS.md
    • \n
    • #3201: fix: ensure connectedTerms returns terms for the specified taxonomy only
    • \n
    • #3199: chore(deps-dev): bump the npm_and_yarn group across 1 directory with 2 updates
    • \n
    \n

    1.28.1

    \n

    Chores / Bugfixes

    \n
      \n
    • #3189: fix: [regression] missing placeholder in $wpdb->prepare() call
    • \n
    \n

    1.28.0

    \n

    Upgrade Notice

    \n

    This release contains an internal refactor for how the Type Registry is generated which should lead to significant performance improvements for most users. While there is no known breaking changes, because this change impacts every user we highly recommend testing this release thoroughly on staging servers to ensure the changes don’t negatively impact your projects.

    \n

    New Features

    \n
      \n
    • #3172: feat: only eagerlyLoadType on introspection requests.
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3181: ci: replace docker-compose commands with docker compose
    • \n
    • #3182: ci: test against WP 6.6
    • \n
    • #3183: fix: improve performance of SQL query in the user loader
    • \n
    \n

    1.27.2

    \n

    Chores / Bugfixes

    \n
      \n
    • #3167: fix: missing .svg causing admin_menu not to be registered
    • \n
    \n

    1.27.1

    \n

    Chores / Bugfixes

    \n
      \n
    • #3066: fix: merge query arg arrays instead of overriding.
    • \n
    • #3151: fix: update dev-deps and fix WPGraphQL::get_static_schema()
    • \n
    • #3152: fix: handle regression when implementing interface with identical args.
    • \n
    • #3153: chore(deps-dev): bump composer/composer from 2.7.6 to 2.7.7 in the composer group across 1 directory
    • \n
    • #3155: chore(deps-dev): bump the npm_and_yarn group across 1 directory with 2 updates
    • \n
    • #3160: chore: Update branding assets
    • \n
    • #3162: fix: set_query_arg should not merge args
    • \n
    \n

    1.27.0

    \n

    New Features

    \n
      \n
    • #3143: feat: Enhance tab state management with query arguments and localStorage fallback
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3139: fix: $settings_fields param on “graphql_get_setting_section_field_value” filter not passing the correct type
    • \n
    • #3137: fix: WPGraphQL Settings page fails to load when “graphiql_enabled” setting is “off”
    • \n
    • #3133: build: clean up dist
    • \n
    • #3146: test: add e2e test coverage for tabs in the settings page
    • \n
    \n

    1.26.0

    \n

    New Features

    \n
      \n
    • #3125: refactor: improve query handling in AbstractConnectionResolver\n
        \n
      • new: graphql_connection_pre_get_query filter
      • \n
      • new: AbstractConnectionResolver::is_valid_query_class()
      • \n
      • new: AbstractConnectionResolver::get_query()
      • \n
      • new: AbstractConnectionResolver::get_query_class()
      • \n
      • new: AsbtractConnectionResolver::query_class()
      • \n
      • new: AbstractConnectionResolver::$query_class
      • \n
      \n
    • \n
    • #3124: refactor: split AbstractConnectionResolver::get_args() and ::get_query_args() into ::prepare_*() methods
    • \n
    • #3123: refactor: split AbstractConnectionResolver::get_ids() into ::prepare_ids()
    • \n
    • #3121: refactor: split AbstractConnectionResolver::get_nodes() and get_edges() into prepare_*() methods
    • \n
    • #3120: refactor: wrap AbstractConnectionResolver::is_valid_model() in ::get_is_valid_model()
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3125: refactor: improve query handling in AbstractConnectionResolver\n
        \n
      • Implement PHPStan Generic Type
      • \n
      • Update generic Exceptions to InvariantViolation
      • \n
      \n
    • \n
    • #3127: chore: update references to the WPGraphQL Slack Community to point to the new WPGraphQL Discord community instead.
    • \n
    • #3122: chore: relocate AbstractConnectionResolver::is_valid_offset() with other abstract methods.
    • \n
    \n

    1.25.0

    \n

    New Features

    \n
      \n
    • #3104: feat: add AbsractConnectionResolver::pre_should_execute(). Thanks @justlevine!
    • \n
    \n

    Chores / Bugfixes
    \n– #3104: refactor: AbstractConnectionResolver::should_execute() Thanks @justlevine!
    \n– #3112: fix: fixes a regression from v1.24.0 relating to field arguments defined on Interfaces not being properly merged onto Object Types that implement the interface. Thanks @kidunot89!
    \n– #3114: fix: node IDs not showing in the Query Analyzer / X-GraphQL-Keys when using DataLoader->load_many()
    \n– #3116: chore: Update WPGraphQLTestCase to v3. Thanks @kidunot89!

    \n

    1.24.0

    \n

    New Features

    \n
      \n
    • #3084: perf: refactor PluginConnectionResolver to only fetch plugins once. Thanks @justlevine!
    • \n
    • #3088: refactor: improve loader handling in AbstractConnectionResolver. Thanks @justlevine!
    • \n
    • #3087: feat: improve query amount handling in AbstractConnectionResolver. Thanks @justlevine!
    • \n
    • #3086: refactor: add AbstractConnectionResolver::get_unfiltered_args() public getter. Thanks @justlevine!
    • \n
    • #3085: refactor: add AbstractConnectionResolver::prepare_page_info()and only instantiate once. Thanks @justlevine!
    • \n
    • #3083: refactor: deprecate camelCase methods in AbstractConnectionResolver for snake_case equivalents. Thanks @justlevine!
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3095: chore: lint for superfluous whitespace. Thanks @justlevine!
    • \n
    • #3100: fix: recursion issues with interfaces
    • \n
    • #3082: chore: prepare ConnectionResolver classes for v2 backport
    • \n
    \n

    1.23.0

    \n

    New Features

    \n
      \n
    • #3073: feat: expose hasPassword and password fields on Post objects. Thanks @justlevine!
    • \n
    • #3091: feat: introduce actions and filters for GraphQL Admin Notices
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3079: fix: GraphiQL IDE test failures
    • \n
    • #3084: perf: refactor PluginConnectionResolver to only fetch plugins once. Thanks @justlevine!
    • \n
    • #3092: ci: test against wp 6.5
    • \n
    • #3093: ci: Update actions in GitHub workflows and cleanup. Thanks @justlevine!
    • \n
    • #3093: chore: update Composer dev-deps and lint. Thanks @justlevine!
    • \n
    \n

    1.22.1

    \n

    Chores / Bugfixes

    \n
      \n
    • #3067: fix: respect show avatar setting
    • \n
    • #3063: fix: fixes a bug in cursor stability filters that could lead to empty order
    • \n
    • #3070: test(3063): Adds test for #3063
    • \n
    \n

    1.22.0

    \n

    New Features

    \n
      \n
    • #3044: feat: add graphql_pre_resolve_menu_item_connected_node filter
    • \n
    • #3039: feat: add UniformResourceIdentifiable interface to Comment type
    • \n
    • #3020: feat: introduce graphql_query_analyzer_get_headers filter
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3062: ci: pin wp-browser to “<3.5” to allow automated tests to run properly
    • \n
    • #3057: fix: admin_enqueue_scripts callback should expect a possible null value passed to it
    • \n
    • #3048: fix: isPostsPage on content type
    • \n
    • #3043: fix: return empty when filtering menuItems by a location with no assigned items
    • \n
    • #3045: fix: UsersConnectionSearchColumnEnum values should be prefixed with user_
    • \n
    \n

    1.21.0

    \n

    \n

    New Features

    \n
      \n
    • #3035: feat: provide better error when field references a type that does not exist
    • \n
    • #3027: feat: Add register_graphql_admin_notice API and intial use to inform users of the new WPGraphQL for ACF plugin
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3038: chore(deps-dev): bump the composer group across 1 directories with 1 update. Thanks @dependabot!
    • \n
    • #3033: fix: php deprecation error for dynamic properties on AppContext class
    • \n
    • #3031: fix(graphiql): Allow GraphiQL to run even if a valid schema cannot be returned. Thanks @linucks!
    • \n
    \n

    1.20.0

    \n

    New Features

    \n
      \n
    • #3013: feat: output GRAPHQL_DEBUG message if requested amount is larger than connection limit. Thanks @justlevine!
    • \n
    • #3008: perf: Expose graphql_should_analyze_queries as setting. Thanks @justlevine!
    • \n
    \n

    Chores / Bugfixes

    \n
      \n
    • #3022: chore: add @justlevine to list of contributors! ? ?
    • \n
    • #3011: chore: update composer dev-dependencies and use php-compatibility:develop branch to 8.0+ lints. Thanks @justlevine!
    • \n
    • #3010: chore: implement stricter PHPDoc types. Thanks @justlevine!
    • \n
    • #3009: chore: implement stricter PHPStan config and clean up unnecessary type-guards. Thanks @justlevine!
    • \n
    • #3007: fix: call html_entity_decode() with explicit flags and decode single-quotes. Thanks @justlevine!
    • \n
    • #3006: fix: replace deprecated AbstractConnectionResolver::setQueryArg() call with ::set_query_arg(). Thanks @justlevine!
    • \n
    • #3004: docs: Update using-data-from-custom-database-tables.md
    • \n
    • #2998: docs: Update build-your-first-wpgraphql-extension.md. Thanks @Jacob-Daniel!
    • \n
    • #2997: docs: update wpgraphql-concepts.md. Thanks @Jacob-Daniel!
    • \n
    • #2996: fix: Field id duplicates uri field description. Thanks @marcinkrzeminski!
    • \n
    \n

    View Full Changelog: https://github.com/wp-graphql/wp-graphql/blob/develop/CHANGELOG.md

    \n\";s:11:\"screenshots\";s:347:\"
    1. \"\"
    2. \"\"
    \";s:7:\"reviews\";s:16197:\"
    \n
    \n
    \n
    \n

    Performance performance performance

    \n
    \n
    \n
    \n

    \n By \'\'psychosispicks on September 7, 2023

    \n
    \n
    \n
    \n

    I\'m so glad I decided to transition to a headless WP, and WPGraphQL made this possible, convenient and super fast.

    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Unreliable

    \n
    \n
    \n
    \n

    \n By \'\'benknight on May 29, 2023

    \n
    \n
    \n
    \n

    I operate a large blog that uses WordPress as a headless CMS with a Next.JS frontend, which is largely enabled by this plugin. Let me just say first that creating an entire alternative third-party data API is an ambitious undertaking and I appreciate all the work the authors have put into it.

    \n\n\n\n

    But as a developer I have to throw out a word of caution that this plugin often has major bugs that can have critical impact on your production website. For example after a recent minor update we discovered a bug where any URL with a special character in it started returning a 404, causing several of our pages to suddenly become unavailable to users and delisted from Google, and this went on for many months before we realized it.

    \n\n\n\n

    There have been many similar instances. My general approach is to lean more on WordPress\'s REST API over time which is more reliable since it\'s maintained by the WordPress team, and only use WPGraphQL when it\'s necessary.

    \n\n\n\n

    Also recommend turning off auto-updates and test your website extremely thoroughly after any upgrade.

    \n
    \n
    \n
    \n
    \n
    \n
    \n

    Great! 10 stars if possible

    \n
    \n
    \n
    \n

    \n By \'\'chisnghiax on September 7, 2022

    \n
    \n
    \n
    Great!
    \n
    \n
    \n
    \n
    \n
    \n

    Great Plugin!

    \n
    \n
    \n
    \n

    \n By \'\'2cubed on August 26, 2022

    \n
    \n
    \n
    One of the best plugins for WordPress. It\'s right up there with ACF!
    \n
    \n
    \n
    \n
    \n
    \n

    Awesome, everybody should use it

    \n
    \n
    \n
    \n

    \n By \'\'mauretto1978 on May 31, 2022

    \n
    \n
    \n
    Great plugin,\n\neveryone should use it. \n\nThe IDE is a valuable plus, and it can be used to learn GraphQL from scratch.\n\nFrom the developer\'s point of view, the plugin is super easy to extend, thanks to the great documentation.\n\nDon\'t forget to check the official YouTube channel.\n\nIf you need extra support for custom post types and metas, I just released v1.0.70 of my plugin ACPT with full support to WPGraphQL.\n\nThank you so much John!
    \n
    \n
    \n
    \n
    \n
    \n

    Excellent tool and support

    \n
    \n
    \n
    \n

    \n By \'\'Camilo (runonce) on April 25, 2022

    \n
    \n
    \n
    Great tool for getting data from your WP into your SPA.\n\nI had some trouble with a conflicting plugin (Post Types Order) that caused unexpted results when paginating my posts but the support provided by both Jason Bahl and David Levine was absolutely top notch and I managed to resolve the issue within hours.
    \n
    \n
    \n
    \n
    \n
    \n

    Definitely Recommend

    \n
    \n
    \n
    \n

    \n By \'\'turboloop on March 23, 2022

    \n
    \n
    \n
    Over a year ago I switched from using REST to this plugin. I mainly build Angular Apps using Apollo client. Works perfectly fine and increases development speed.
    \n
    \n
    \n
    \n
    \n
    \n

    The Future

    \n
    \n
    \n
    \n

    \n By \'\'scottyzen on December 3, 2021

    \n
    \n
    \n
    This plugin is a game-changer. Once you start using it you really get a feel of how powerful it is. Why anyone would choose REST API now sounds crazy to me.
    \n
    \n
    \n
    \n
    \n
    \n

    Works great for Headless WordPress site with Gatsby

    \n
    \n
    \n
    \n

    \n By \'\'Chris (ctack) on September 10, 2021

    \n
    \n
    \n
    Loving the ease of implementation for a headless WordPress site with a GatsbyJS front end
    \n
    \n
    \n
    \n
    \n
    \n

    Excellent!

    \n
    \n
    \n
    \n

    \n By \'\'jonofat on April 10, 2021

    \n
    \n
    \n
    Don\'t have much to say other than that this plugin is really amazing and easy to use. Built GraphQL queries for my headless site in a jiffy with this plugin. Keep up the good work!
    \n
    \n\";}s:17:\"short_description\";s:136:\"WPGraphQL adds a flexible and powerful GraphQL API to WordPress, enabling efficient querying and interaction with your site's data.\";s:13:\"download_link\";s:53:\"https://downloads.wordpress.org/plugin/wp-graphql.zip\";s:14:\"upgrade_notice\";a:17:{s:5:\"2.0.0\";s:418:\"

    BREAKING CHANGE UPDATE

    \n\n

    This is a major update that drops support for PHP versions below 7.4 and WordPress versions below 6.0.

    \n\n

    We've written more about the update here:

    \n\n
      \n
    • https://www.wpgraphql.com/2024/12/16/wpgraphql-v2-0-is-coming-heres-what-you-need-to-know
    • \n
    • https://www.wpgraphql.com/2024/12/16/wpgraphql-v2-0-technical-update-breaking-changes
    • \n
    \";s:6:\"1.32.0\";s:399:\"

    In #3293 a bug was fixed in how the MediaDetails.file field resolves. The previous behavior was a bug, but might have been used as a feature. If you need the field to behave the same as it did prior to this bugfix, you can follow the instructions here to override the field's resolver to how it worked before.

    \";s:6:\"1.30.0\";s:546:\"

    This release includes a new feature to implement a SemVer-compliant update checker, which will prevent auto-updates for major releases that include breaking changes.

    \n\n

    It also exposes the EnqueuedAsset.group and EnqueuedScript.location fields to the schema. Additionally, it adds a WPGraphQL Extensions page to the WordPress admin.

    \n\n

    There are no known breaking changes in this release, however, we recommend testing on staging servers to ensure the changes don't negatively impact your projects.

    \";s:6:\"1.28.0\";s:395:\"

    This release contains an internal refactor for how the Type Registry is generated which should lead to significant performance improvements for most users.

    \n\n

    While there are no intentional breaking changes, because this change impacts every user we highly recommend testing this release thoroughly on staging servers to ensure the changes don't negatively impact your projects.

    \";s:6:\"1.26.0\";s:439:\"

    This release refactors some code in the AbstractConnectionResolver with an aim at making it more efficient and easier to extend. While we believe there are no breaking changes and have tested against popular extensions such as WPGraphQL Headless Login, WPGraphQL Gravity Forms, WPGraphQL Rank Math and others, we recommend running your own tests on a staging site to confirm that there are no regresssions caused by the refactoring.

    \";s:6:\"1.25.0\";s:205:\"

    This release includes a fix to a regression in the v1.24.0. Users impacted by the regression in 1.24.0 included, but are not necessarily limited to, users of the WPGraphQL for WooCommerce extension.

    \";s:6:\"1.24.0\";s:750:\"

    The AbstractConnectionResolver has undergone some refactoring. Some methods using snakeCase have been deprecated in favor of their camel_case equivalent. While we've preserved the deprecated methods to prevent breaking changes, you might begin seeing PHP notices about the deprecations. Any plugin that extends the AbstractConnectionResolver should update the following methods:

    \n\n
      \n
    • getSource -> get_source
    • \n
    • getContext -> get_context
    • \n
    • getInfo -> get_info
    • \n
    • getShouldExecute -> get_should_execute
    • \n
    • getLoader -> getLoader
    • \n
    \";s:6:\"1.16.0\";s:619:\"

    WPGraphQL Smart Cache\nFor WPGraphQL Smart Cache users, you should update WPGraphQL Smart Cache to v1.2.0 when updating\nWPGraphQL to v1.16.0 to ensure caches continue to purge as expected.

    \n\n

    Cursor Pagination Updates\nThis version fixes some behaviors of Cursor Pagination which may lead to behavior changes in your application.

    \n\n

    As with any release, we recommend you test in staging environments. For this release, specifically any\nqueries you have using pagination arguments (first, last, after, before).

    \";s:6:\"1.14.6\";s:328:\"

    This release includes a security patch. It's recommended to update as soon as possible.

    \n\n

    If you're unable to update to the latest version, we have a snippet you can add to your site.

    \n\n

    You can read more about it here: https://github.com/wp-graphql/wp-graphql/security/advisories/GHSA-cfh4-7wq9-6pgg

    \";s:6:\"1.13.0\";s:1273:\"

    The ContentRevisionUnion Union has been removed, and the RootQuery.revisions and User.revisions connections that used to resolve to this Type now resolve to the ContentNode Interface type.

    \n\n

    This is technically a Schema Breaking change, however the behavior for most users querying these fields should remain the same.

    \n\n

    For example, this query worked before, and still works now:

    \n\n
    `graphql\n
    \n\n

    {\n viewer {\n revisions {\n nodes {\n __typename\n ... on Post {\n id\n uri\n isRevision\n }\n ... on Page {\n id\n uri\n isRevision\n }\n }\n }\n }\n revisions {\n nodes {\n __typename\n ... on Post {\n id\n uri\n isRevision\n }\n ... on Page {\n id\n uri\n isRevision\n }\n }\n }\n}\n `

    \n\n

    If you were using a fragment to reference: ...on UserToContentRevisionUnionConnection or ...on RootQueryToContentRevisionUnionConnection you would need to update those references to ...on UserToRevisionsConnection and ...on RootQueryToRevisionsConnection respectively.

    \";s:6:\"1.12.0\";s:860:\"

    This release removes the ContentNode and DatabaseIdentifier interfaces from the NodeWithFeaturedImage Interface.

    \n\n

    This is considered a breaking change for client applications using a ...on NodeWithFeaturedImage fragment that reference fields applied by those interfaces. If you have client applications doing this (or are unsure if you do) you can use the following filter to bring back the previous behavior:

    \n\n
    `php\n
    \n\n

    add_filter( 'graphql_wp_interface_type_config', function( $config ) {\n if ( $config['name'] === 'NodeWithFeaturedImage' ) {\n $config['interfaces'][] = 'ContentNode';\n $config['interfaces'][] = 'DatabaseIdentifier';\n }\n return $config;\n}, 10, 1 );\n `

    \";s:6:\"1.10.0\";s:556:\"

    PR (#2490) fixes a bug that some users were\nusing as a feature.

    \n\n

    When a page is marked as the "Posts Page" WordPress does not resolve that page by URI, and this\nbugfix no longer will resolve that page by URI.

    \n\n

    You can read more\nabout why this change was made and find a snippet of code that will bring the old functionality back\nif you've built features around it.

    \";s:5:\"1.9.0\";s:1273:\"

    There are 2 changes that might require action when updating to 1.9.0.

    \n\n
      \n
    1. (#2464)
    2. \n
    \n\n

    When querying for a nodeByUri, if your site has the "page_for_posts" setting configured, the behavior of the nodeByUri query for that uri might be different for you.

    \n\n

    Previously a bug caused this query to return a "Page" type, when it should have returned a "ContentType" Type.

    \n\n

    The bug fix might change your application if you were using the bug as a feature.

    \n\n
      \n
    1. (#2457)
    2. \n
    \n\n

    There were a lot of bug fixes related to connections to ensure they behave as intended. If you were querying lists of data, in some cases the data might be returned in a different order than it was before.

    \n\n

    For example, using the "last" input on a Comment or User query should still return the same nodes, but in a different order than before.

    \n\n

    This might cause behavior you don't want in your application because you had coded around the bug. This change was needed to support proper backward pagination.

    \";s:5:\"1.6.7\";s:2028:\"

    There's been a bugfix in the Post Model layer which might break existing behaviors.

    \n\n

    WordPress Post Type registry allows for a post_type to be registered as public (true or false)\nand publicly_queryable (true or false).

    \n\n

    WPGraphQL's Model Layer was allowing published content of any post_type to be exposed publicly. This\nchange better respects the public and publicly_queryable properties of post types better.

    \n\n

    Now, if a post_type is public=&gt;true, published content of that post_type can be queried by public\nWPGraphQL requests.

    \n\n

    If a post_type is set to public=&gt;false, then we fallback to the publicly_queryable property.\nIf a post_type is set to publicly_queryable =&gt; true, then published content of the Post Type can\nbe queried in WPGraphQL by public users.

    \n\n

    If both public=&gt;false and publicly_queryable is false or not defined, then the content of the\npost_type will only be accessible via authenticated queries by users with proper capabilities to\naccess the post_type.

    \n\n

    Possible Action: You might need to adjust your post_type registration to better reflect your intent.

    \n\n
      \n
    • public=&gt;true: The entries in the post_type will be public in WPGraphQL and will have a public\nURI in WordPress.
    • \n
    • public=&gt;false, publicly_queryable=&gt;true: The entries in the post_type will be public in WPGraphQL,\nbut will not have individually respected URI from WordPress, and can not be queried by URI in WPGraphQL.
    • \n
    • public=&gt;false,publicly_queryable=&gt;false: The entries in the post_type will only be accessible in\nWPGraphQL by authenticated requests for users with proper capabilities to interact with the post_type.
    • \n
    \";s:5:\"1.5.0\";s:157:\"

    The MenuItem.path field was changed from non-null to nullable and some clients may need to make adjustments to support this.

    \";s:5:\"1.4.0\";s:211:\"

    The uri field was non-null on some Types in the Schema but has been changed to be nullable on all types that have it. This might require clients to update code to expect possible null values.

    \";s:5:\"1.2.0\";s:179:\"

    Composer dependencies are no longer versioned in Github. Recommended install source is WordPress.org or using Composer to get the code from Packagist.org or WPackagist.org.

    \";}s:11:\"screenshots\";a:2:{i:1;a:2:{s:3:\"src\";s:63:\"https://ps.w.org/wp-graphql/assets/screenshot-1.jpg?rev=2482884\";s:7:\"caption\";s:0:\"\";}i:2;a:2:{s:3:\"src\";s:63:\"https://ps.w.org/wp-graphql/assets/screenshot-2.jpg?rev=2482884\";s:7:\"caption\";s:0:\"\";}}s:4:\"tags\";a:5:{s:9:\"decoupled\";s:9:\"decoupled\";s:7:\"graphql\";s:7:\"GraphQL\";s:8:\"headless\";s:8:\"headless\";s:5:\"react\";s:5:\"react\";s:8:\"rest-api\";s:8:\"rest-api\";}s:8:\"versions\";a:140:{s:8:\"0.1.14.1\";s:62:\"https://downloads.wordpress.org/plugin/wp-graphql.0.1.14.1.zip\";s:6:\"0.15.4\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.0.15.4.zip\";s:6:\"0.15.5\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.0.15.5.zip\";s:6:\"0.15.6\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.0.15.6.zip\";s:3:\"1.0\";s:57:\"https://downloads.wordpress.org/plugin/wp-graphql.1.0.zip\";s:5:\"1.0.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.0.1.zip\";s:5:\"1.0.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.0.2.zip\";s:5:\"1.0.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.0.3.zip\";s:5:\"1.0.4\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.0.4.zip\";s:5:\"1.0.5\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.0.5.zip\";s:5:\"1.1.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.0.zip\";s:5:\"1.1.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.1.zip\";s:5:\"1.1.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.2.zip\";s:5:\"1.1.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.3.zip\";s:5:\"1.1.4\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.4.zip\";s:5:\"1.1.5\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.5.zip\";s:5:\"1.1.6\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.6.zip\";s:5:\"1.1.7\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.7.zip\";s:5:\"1.1.8\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.8.zip\";s:7:\"1.1.8.0\";s:61:\"https://downloads.wordpress.org/plugin/wp-graphql.1.1.8.0.zip\";s:6:\"1.10.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.10.0.zip\";s:6:\"1.11.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.11.0.zip\";s:6:\"1.11.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.11.1.zip\";s:6:\"1.11.2\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.11.2.zip\";s:6:\"1.11.3\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.11.3.zip\";s:6:\"1.12.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.12.0.zip\";s:6:\"1.12.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.12.1.zip\";s:6:\"1.12.2\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.12.2.zip\";s:6:\"1.12.3\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.12.3.zip\";s:6:\"1.13.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.0.zip\";s:6:\"1.13.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.1.zip\";s:7:\"1.13.10\";s:61:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.10.zip\";s:6:\"1.13.2\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.2.zip\";s:6:\"1.13.4\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.4.zip\";s:6:\"1.13.5\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.5.zip\";s:6:\"1.13.6\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.6.zip\";s:6:\"1.13.7\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.7.zip\";s:6:\"1.13.8\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.8.zip\";s:6:\"1.13.9\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.13.9.zip\";s:6:\"1.14.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.0.zip\";s:7:\"1.14.10\";s:61:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.10.zip\";s:6:\"1.14.2\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.2.zip\";s:6:\"1.14.3\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.3.zip\";s:6:\"1.14.4\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.4.zip\";s:6:\"1.14.5\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.5.zip\";s:6:\"1.14.6\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.6.zip\";s:6:\"1.14.7\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.7.zip\";s:6:\"1.14.8\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.8.zip\";s:6:\"1.14.9\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.14.9.zip\";s:6:\"1.15.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.15.0.zip\";s:6:\"1.16.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.16.0.zip\";s:6:\"1.17.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.17.0.zip\";s:6:\"1.18.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.18.1.zip\";s:6:\"1.18.2\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.18.2.zip\";s:6:\"1.19.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.19.0.zip\";s:5:\"1.2.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.2.0.zip\";s:5:\"1.2.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.2.1.zip\";s:5:\"1.2.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.2.2.zip\";s:5:\"1.2.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.2.3.zip\";s:5:\"1.2.4\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.2.4.zip\";s:5:\"1.2.5\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.2.5.zip\";s:5:\"1.2.6\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.2.6.zip\";s:6:\"1.20.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.20.0.zip\";s:6:\"1.21.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.21.0.zip\";s:6:\"1.22.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.22.0.zip\";s:6:\"1.22.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.22.1.zip\";s:6:\"1.23.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.23.0.zip\";s:6:\"1.24.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.24.0.zip\";s:6:\"1.25.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.25.0.zip\";s:6:\"1.26.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.26.0.zip\";s:6:\"1.27.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.27.0.zip\";s:6:\"1.27.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.27.1.zip\";s:6:\"1.27.2\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.27.2.zip\";s:6:\"1.28.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.28.0.zip\";s:6:\"1.28.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.28.1.zip\";s:6:\"1.29.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.29.0.zip\";s:6:\"1.29.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.29.1.zip\";s:6:\"1.29.2\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.29.2.zip\";s:6:\"1.29.3\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.29.3.zip\";s:5:\"1.3.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.0.zip\";s:5:\"1.3.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.1.zip\";s:6:\"1.3.10\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.10.zip\";s:5:\"1.3.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.2.zip\";s:5:\"1.3.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.3.zip\";s:5:\"1.3.4\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.4.zip\";s:5:\"1.3.5\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.5.zip\";s:5:\"1.3.6\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.6.zip\";s:5:\"1.3.7\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.7.zip\";s:5:\"1.3.8\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.8.zip\";s:5:\"1.3.9\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.3.9.zip\";s:6:\"1.30.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.30.0.zip\";s:6:\"1.31.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.31.0.zip\";s:6:\"1.31.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.31.1.zip\";s:6:\"1.32.0\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.32.0.zip\";s:6:\"1.32.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.32.1.zip\";s:5:\"1.4.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.4.0.zip\";s:5:\"1.4.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.4.1.zip\";s:5:\"1.4.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.4.2.zip\";s:5:\"1.4.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.4.3.zip\";s:5:\"1.5.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.0.zip\";s:5:\"1.5.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.1.zip\";s:5:\"1.5.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.2.zip\";s:5:\"1.5.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.3.zip\";s:5:\"1.5.4\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.4.zip\";s:5:\"1.5.5\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.5.zip\";s:5:\"1.5.6\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.6.zip\";s:5:\"1.5.7\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.7.zip\";s:5:\"1.5.8\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.8.zip\";s:5:\"1.5.9\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.5.9.zip\";s:5:\"1.6.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.0.zip\";s:5:\"1.6.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.1.zip\";s:6:\"1.6.10\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.10.zip\";s:6:\"1.6.11\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.11.zip\";s:6:\"1.6.12\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.12.zip\";s:5:\"1.6.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.2.zip\";s:5:\"1.6.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.3.zip\";s:5:\"1.6.4\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.4.zip\";s:5:\"1.6.5\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.5.zip\";s:5:\"1.6.6\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.6.zip\";s:5:\"1.6.7\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.7.zip\";s:5:\"1.6.8\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.8.zip\";s:5:\"1.6.9\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.6.9.zip\";s:5:\"1.7.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.7.0.zip\";s:5:\"1.7.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.7.1.zip\";s:5:\"1.7.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.7.2.zip\";s:5:\"1.8.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.0.zip\";s:5:\"1.8.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.1.zip\";s:5:\"1.8.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.2.zip\";s:5:\"1.8.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.3.zip\";s:5:\"1.8.4\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.4.zip\";s:5:\"1.8.5\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.5.zip\";s:5:\"1.8.6\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.6.zip\";s:5:\"1.8.7\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.8.7.zip\";s:5:\"1.9.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.9.0.zip\";s:5:\"1.9.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.1.9.1.zip\";s:5:\"2.0.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.0.0.zip\";s:12:\"2.0.0-beta.2\";s:66:\"https://downloads.wordpress.org/plugin/wp-graphql.2.0.0-beta.2.zip\";s:5:\"2.1.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.1.0.zip\";s:5:\"trunk\";s:53:\"https://downloads.wordpress.org/plugin/wp-graphql.zip\";s:6:\"v2.1.1\";s:60:\"https://downloads.wordpress.org/plugin/wp-graphql.v2.1.1.zip\";}s:14:\"business_model\";s:9:\"community\";s:14:\"repository_url\";s:40:\"https://github.com/wp-graphql/wp-graphql\";s:22:\"commercial_support_url\";s:0:\"\";s:11:\"donate_link\";s:0:\"\";s:7:\"banners\";a:2:{s:3:\"low\";s:65:\"https://ps.w.org/wp-graphql/assets/banner-772x250.png?rev=3111985\";s:4:\"high\";s:66:\"https://ps.w.org/wp-graphql/assets/banner-1544x500.png?rev=3111985\";}s:5:\"icons\";a:2:{s:2:\"1x\";s:63:\"https://ps.w.org/wp-graphql/assets/icon-128x128.png?rev=3111985\";s:2:\"2x\";s:63:\"https://ps.w.org/wp-graphql/assets/icon-256x256.png?rev=3111985\";}s:12:\"preview_link\";s:51:\"https://wordpress.org/plugins/wp-graphql/?preview=1\";s:4:\"Name\";s:9:\"WPGraphQL\";}}'),(54,1,'_site_transient_timeout_popular_importers_968d0fadeded9636c5b63190aaec278f','1743103649'),(55,1,'_site_transient_popular_importers_968d0fadeded9636c5b63190aaec278f','a:2:{s:9:\"importers\";a:7:{s:7:\"blogger\";a:4:{s:4:\"name\";s:7:\"Blogger\";s:11:\"description\";s:54:\"Import posts, comments, and users from a Blogger blog.\";s:11:\"plugin-slug\";s:16:\"blogger-importer\";s:11:\"importer-id\";s:7:\"blogger\";}s:9:\"wpcat2tag\";a:4:{s:4:\"name\";s:29:\"Categories and Tags Converter\";s:11:\"description\";s:71:\"Convert existing categories to tags or tags to categories, selectively.\";s:11:\"plugin-slug\";s:18:\"wpcat2tag-importer\";s:11:\"importer-id\";s:10:\"wp-cat2tag\";}s:11:\"livejournal\";a:4:{s:4:\"name\";s:11:\"LiveJournal\";s:11:\"description\";s:46:\"Import posts from LiveJournal using their API.\";s:11:\"plugin-slug\";s:20:\"livejournal-importer\";s:11:\"importer-id\";s:11:\"livejournal\";}s:11:\"movabletype\";a:4:{s:4:\"name\";s:24:\"Movable Type and TypePad\";s:11:\"description\";s:62:\"Import posts and comments from a Movable Type or TypePad blog.\";s:11:\"plugin-slug\";s:20:\"movabletype-importer\";s:11:\"importer-id\";s:2:\"mt\";}s:3:\"rss\";a:4:{s:4:\"name\";s:3:\"RSS\";s:11:\"description\";s:30:\"Import posts from an RSS feed.\";s:11:\"plugin-slug\";s:12:\"rss-importer\";s:11:\"importer-id\";s:3:\"rss\";}s:6:\"tumblr\";a:4:{s:4:\"name\";s:6:\"Tumblr\";s:11:\"description\";s:53:\"Import posts & media from Tumblr using their API.\";s:11:\"plugin-slug\";s:15:\"tumblr-importer\";s:11:\"importer-id\";s:6:\"tumblr\";}s:9:\"wordpress\";a:4:{s:4:\"name\";s:9:\"WordPress\";s:11:\"description\";s:96:\"Import posts, pages, comments, custom fields, categories, and tags from a WordPress export file.\";s:11:\"plugin-slug\";s:18:\"wordpress-importer\";s:11:\"importer-id\";s:9:\"wordpress\";}}s:10:\"translated\";b:0;}'),(59,1,'_site_transient_update_plugins','O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1743501820;s:8:\"response\";a:0:{}s:12:\"translations\";a:0:{}s:9:\"no_update\";a:5:{s:9:\"hello.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:25:\"w.org/plugins/hello-dolly\";s:4:\"slug\";s:11:\"hello-dolly\";s:6:\"plugin\";s:9:\"hello.php\";s:11:\"new_version\";s:5:\"1.7.2\";s:3:\"url\";s:42:\"https://wordpress.org/plugins/hello-dolly/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/plugin/hello-dolly.1.7.3.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:64:\"https://ps.w.org/hello-dolly/assets/icon-256x256.jpg?rev=2052855\";s:2:\"1x\";s:64:\"https://ps.w.org/hello-dolly/assets/icon-128x128.jpg?rev=2052855\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:67:\"https://ps.w.org/hello-dolly/assets/banner-1544x500.jpg?rev=2645582\";s:2:\"1x\";s:66:\"https://ps.w.org/hello-dolly/assets/banner-772x250.jpg?rev=2052855\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"4.6\";}s:25:\"wp-graphql/wp-graphql.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:24:\"w.org/plugins/wp-graphql\";s:4:\"slug\";s:10:\"wp-graphql\";s:6:\"plugin\";s:25:\"wp-graphql/wp-graphql.php\";s:11:\"new_version\";s:5:\"2.1.1\";s:3:\"url\";s:41:\"https://wordpress.org/plugins/wp-graphql/\";s:7:\"package\";s:53:\"https://downloads.wordpress.org/plugin/wp-graphql.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:63:\"https://ps.w.org/wp-graphql/assets/icon-256x256.png?rev=3111985\";s:2:\"1x\";s:63:\"https://ps.w.org/wp-graphql/assets/icon-128x128.png?rev=3111985\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:66:\"https://ps.w.org/wp-graphql/assets/banner-1544x500.png?rev=3111985\";s:2:\"1x\";s:65:\"https://ps.w.org/wp-graphql/assets/banner-772x250.png?rev=3111985\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"6.0\";}s:31:\"wpgraphql-acf/wpgraphql-acf.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:27:\"w.org/plugins/wpgraphql-acf\";s:4:\"slug\";s:13:\"wpgraphql-acf\";s:6:\"plugin\";s:31:\"wpgraphql-acf/wpgraphql-acf.php\";s:11:\"new_version\";s:5:\"2.4.1\";s:3:\"url\";s:44:\"https://wordpress.org/plugins/wpgraphql-acf/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/plugin/wpgraphql-acf.2.4.1.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:66:\"https://ps.w.org/wpgraphql-acf/assets/icon-256x256.png?rev=3125402\";s:2:\"1x\";s:66:\"https://ps.w.org/wpgraphql-acf/assets/icon-128x128.png?rev=3125402\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:69:\"https://ps.w.org/wpgraphql-acf/assets/banner-1544x500.png?rev=3125402\";s:2:\"1x\";s:68:\"https://ps.w.org/wpgraphql-acf/assets/banner-772x250.png?rev=3125402\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"5.9\";}s:31:\"wpgraphql-ide/wpgraphql-ide.php\";O:8:\"stdClass\":10:{s:2:\"id\";s:27:\"w.org/plugins/wpgraphql-ide\";s:4:\"slug\";s:13:\"wpgraphql-ide\";s:6:\"plugin\";s:31:\"wpgraphql-ide/wpgraphql-ide.php\";s:11:\"new_version\";s:5:\"4.0.3\";s:3:\"url\";s:44:\"https://wordpress.org/plugins/wpgraphql-ide/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/plugin/wpgraphql-ide.4.0.3.zip\";s:5:\"icons\";a:2:{s:2:\"2x\";s:66:\"https://ps.w.org/wpgraphql-ide/assets/icon-256x256.png?rev=3248045\";s:2:\"1x\";s:66:\"https://ps.w.org/wpgraphql-ide/assets/icon-128x128.png?rev=3248045\";}s:7:\"banners\";a:2:{s:2:\"2x\";s:69:\"https://ps.w.org/wpgraphql-ide/assets/banner-1544x500.png?rev=3248045\";s:2:\"1x\";s:68:\"https://ps.w.org/wpgraphql-ide/assets/banner-772x250.png?rev=3248045\";}s:11:\"banners_rtl\";a:0:{}s:8:\"requires\";s:3:\"5.7\";}s:37:\"advanced-custom-fields-6.3.12/acf.php\";O:8:\"stdClass\":12:{s:4:\"slug\";s:22:\"advanced-custom-fields\";s:6:\"plugin\";s:37:\"advanced-custom-fields-6.3.12/acf.php\";s:11:\"new_version\";s:6:\"6.3.12\";s:3:\"url\";s:36:\"https://www.advancedcustomfields.com\";s:6:\"tested\";s:5:\"6.7.2\";s:7:\"package\";s:0:\"\";s:5:\"icons\";a:1:{s:7:\"default\";s:64:\"https://connect.advancedcustomfields.com/assets/icon-256x256.png\";}s:7:\"banners\";a:2:{s:3:\"low\";s:66:\"https://connect.advancedcustomfields.com/assets/banner-772x250.jpg\";s:4:\"high\";s:67:\"https://connect.advancedcustomfields.com/assets/banner-1544x500.jpg\";}s:8:\"requires\";s:3:\"6.0\";s:12:\"requires_php\";s:3:\"7.4\";s:12:\"release_date\";s:8:\"20250121\";s:6:\"reason\";s:10:\"up_to_date\";}}s:7:\"checked\";a:6:{s:37:\"advanced-custom-fields-6.3.12/acf.php\";s:6:\"6.3.12\";s:9:\"hello.php\";s:5:\"1.7.2\";s:25:\"wp-graphql/wp-graphql.php\";s:5:\"2.1.1\";s:55:\"wp-graphql-content-blocks/wp-graphql-content-blocks.php\";s:5:\"4.8.2\";s:31:\"wpgraphql-acf/wpgraphql-acf.php\";s:5:\"2.4.1\";s:31:\"wpgraphql-ide/wpgraphql-ide.php\";s:5:\"4.0.4\";}}'),(70,1,'_site_transient_timeout_wp_plugin_dependencies_plugin_timeout_wp-graphql','1743038920'),(71,1,'_site_transient_wp_plugin_dependencies_plugin_timeout_wp-graphql','1'),(74,1,'menu_items','a:0:{}'),(75,1,'first_page',''),(76,1,'first_comment',''),(77,1,'first_comment_url',''),(78,1,'first_comment_author',''),(79,1,'limited_email_domains',''),(80,1,'banned_email_domains',''),(81,1,'new_admin_email','wordpress@example.com'),(82,1,'first_comment_email',''),(175,1,'_site_transient_timeout_wp_remote_block_patterns_da85ad53ed0dfe6b80a221538486d49d','1743442995'),(176,1,'_site_transient_wp_remote_block_patterns_da85ad53ed0dfe6b80a221538486d49d','a:44:{i:0;O:8:\"stdClass\":7:{s:2:\"id\";i:514958;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:33:\"Intro area with heading and image\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1699:\"\n
    \n
    \n\n\n\n
    \n
    \n
    \n

    Uncover a realm of opportunities.

    \n
    \n\n\n\n
    \n

    Exploring life’s complex tapestry, options reveal routes to the exceptional, requiring innovation, inquisitiveness, and bravery for a deeply satisfying voyage.

    \n\n\n\n\n
    \n
    \n\n\n\n
    \n\n\n\n
    \"\"
    \n
    \n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:4:\"hero\";s:16:\"wpop_description\";s:93:\"Two columns of text, left with a heading and right with a paragraph, with a wide image below.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.5\";s:25:\"wpop_contains_block_types\";s:111:\"core/button,core/buttons,core/column,core/columns,core/group,core/heading,core/image,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:5:\"about\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:2422:\"\n
    \n
    \n\n\n\n
    \n
    \n
    \n

    Uncover a realm of opportunities.

    \n
    \n\n\n\n
    \n

    Exploring life\'s complex tapestry, options reveal routes to the exceptional, requiring innovation, inquisitiveness, and bravery for a deeply satisfying voyage.

    \n\n\n\n\n
    \n
    \n\n\n\n
    \n\n\n\n
    \"\"
    \n
    \n\n\n\n
    \n
    \n\";}i:1;O:8:\"stdClass\":7:{s:2:\"id\";i:309935;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:45:\"Centered image with two-tone background color\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1349:\"\n
    \n
    \n
    \n\n\n\n
    \"\"
    \n\n\n\n
    \n\n\n\n

    Etcetera

    \n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:18:\"Gradient, Two-Tone\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:57:\"core/cover,core/group,core/heading,core/image,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:3:{i:0;s:6:\"banner\";i:1;s:6:\"images\";i:2;s:4:\"text\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:2134:\"\n
    \n
    \n
    \n\n\n\n
    \"\"
    \n\n\n\n
    \n\n\n\n

    Etcetera

    \n\n\n\n
    \n
    \n
    \n\";}i:2;O:8:\"stdClass\":7:{s:2:\"id\";i:309925;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:43:\"Fullwidth Dark Banner with Heading Top Left\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1103:\"\n
    \"\"
    \n
    \n

    bud!

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:16:\"Jazz, Fulllwidth\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:36:\"core/cover,core/group,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:1697:\"\n
    \"\"
    \n
    \n

    bud!

    \n
    \n
    \n\";}i:3;O:8:\"stdClass\":7:{s:2:\"id\";i:309230;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:44:\"Fullwidth cover with repeating gradient text\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1750:\"\n
    \"\"
    \n
    \n\n\n\n
    \n

    DJANGO

    \n\n\n\n

    DJANGO

    \n\n\n\n

    DJANGO

    \n\n\n\n

    DJANGO

    \n
    \n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:48:\"Fullwidth, Background Image, Gradient, Uppercase\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:48:\"core/cover,core/group,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"banner\";i:1;s:4:\"text\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:3135:\"\n
    \"\"
    \n
    \n\n\n\n
    \n

    DJANGO

    \n\n\n\n

    DJANGO

    \n\n\n\n

    DJANGO

    \n\n\n\n

    DJANGO

    \n
    \n\n\n\n
    \n
    \n\";}i:4;O:8:\"stdClass\":7:{s:2:\"id\";i:309224;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:72:\"Fullwidth, vertically aligned headline on right with description on left\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:2229:\"\n
    \n
    \n
    \n

    Let ’em Roll is an album by American organist Big John Patton recorded in 1965 and released on the Blue Note label.

    \n\n\n\n\n
    \n\n\n\n
    \n

    Let
    ‘EM
    Roll

    \n\n\n\n

    Big
    John
    Patton

    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:60:\"vertically, bold, jazz, shop, store, headline, hero, product\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:61:\"core/button,core/buttons,core/cover,core/group,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"banner\";i:1;s:14:\"call-to-action\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:3726:\"\n
    \n
    \n
    \n

    Let \'em Roll is an album by American organist Big John Patton recorded in 1965 and released on the Blue Note label.

    \n\n\n\n\n
    \n\n\n\n
    \n

    Let
    \'EM
    Roll

    \n\n\n\n

    Big
    John
    Patton

    \n
    \n
    \n
    \n\";}i:5;O:8:\"stdClass\":7:{s:2:\"id\";i:309236;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:60:\"Fullwidth headline with links and gradient offset background\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:2070:\"\n
    \n
    \n\n\n\n
    \n
    \n

    MONK.

    \n
    \n\n\n\n
    \n
    \n

    A new collection

    \n\n\n\n

    Learn More

    \n
    \n
    \n
    \n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:41:\"Offset, Gradient, Jazz, Headline, Feature\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:48:\"core/cover,core/group,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:3195:\"\n
    \n
    \n\n\n\n
    \n
    \n

    MONK.

    \n
    \n\n\n\n
    \n
    \n

    A new collection

    \n\n\n\n

    Learn More →

    \n
    \n
    \n
    \n\n\n\n
    \n
    \n\";}i:6;O:8:\"stdClass\":7:{s:2:\"id\";i:308937;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:42:\"Heading, Paragraph, Button with Two Images\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:2682:\"\n
    \n
    \n
    \n

    Time for an adventure

    \n\n\n\n
    \n\n\n\n

    Explore our network of trails that lead through a variety of woodland habitats and observe the diverse flora that call this area home.

    \n\n\n\n
    \n\n\n\n\n
    \n\n\n\n
    \n
    \n
    \n\n\n\n
    \"\"
    \n
    \n\n\n\n
    \"\"
    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:97:\"core/button,core/buttons,core/cover,core/group,core/heading,core/image,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"banner\";i:1;s:14:\"call-to-action\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:4102:\"\n
    \n
    \n
    \n

    Time for an adventure

    \n\n\n\n
    \n\n\n\n

    Explore our network of trails that lead through a variety of woodland habitats and observe the diverse flora that call this area home.

    \n\n\n\n
    \n\n\n\n\n
    \n\n\n\n
    \n
    \n
    \n\n\n\n
    \"\"
    \n
    \n\n\n\n
    \"\"
    \n
    \n
    \n
    \n\";}i:7;O:8:\"stdClass\":7:{s:2:\"id\";i:308949;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:42:\"Bold sale banner with geometric background\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1757:\"\n
    \"\"
    \n
    \n

    Enjoy

    \n\n\n\n

    20% Off

    \n\n\n\n
    \n\n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:43:\"store, shop, coupon, jazz, background image\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:73:\"core/button,core/buttons,core/cover,core/group,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"banner\";i:1;s:14:\"call-to-action\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:2819:\"\n
    \"\"
    \n
    \n

    Enjoy

    \n\n\n\n

    20% Off

    \n\n\n\n
    \n\n\n\n\n
    \n
    \n\";}i:8;O:8:\"stdClass\":7:{s:2:\"id\";i:308924;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:47:\"Offset bold paragraph text with varying opacity\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1658:\"\n
    \n
    \n

    Embark

    \n\n\n\n

    ON A HIKING

    \n\n\n\n

    adventure and explore the beauty of nature’s best…

    \n\n\n\n

    In the

    \n\n\n\n

    WOODS.

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:36:\"core/cover,core/group,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:4:\"text\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:3052:\"\n
    \n
    \n

    Embark

    \n\n\n\n

    ON A HIKING

    \n\n\n\n

    adventure and explore the beauty of nature\'s best…

    \n\n\n\n

    In the

    \n\n\n\n

    WOODS.

    \n
    \n
    \n\";}i:9;O:8:\"stdClass\":7:{s:2:\"id\";i:308916;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:40:\"Offset text with a brutalist design vibe\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1455:\"\n
    \n
    \n

    ✴︎ Walk

    \n\n\n\n

    In the

    \n\n\n\n

    Park

    \n\n\n\n

    —01.03

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:36:\"core/cover,core/group,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"banner\";i:1;s:4:\"text\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:2631:\"\n
    \n
    \n

    ✴︎ Walk

    \n\n\n\n

    In the

    \n\n\n\n

    Park

    \n\n\n\n

    —01.03

    \n
    \n
    \n\";}i:10;O:8:\"stdClass\":7:{s:2:\"id\";i:308901;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:40:\"Fullscreen image with right content area\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:2135:\"\n
    \n
    \n
    \"\"
    \n\n\n\n
    \n

    wAndering through the woods

    \n\n\n\n
    \n\n\n\n

    Explore our network of trails that lead through a variety of woodland habitats and observe the diverse flora that call this area home.

    \n\n\n\n
    \n\n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:97:\"core/button,core/buttons,core/cover,core/group,core/heading,core/image,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:3261:\"\n
    \n
    \n
    \"\"
    \n\n\n\n
    \n

    wAndering through the woods

    \n\n\n\n
    \n\n\n\n

    Explore our network of trails that lead through a variety of woodland habitats and observe the diverse flora that call this area home.

    \n\n\n\n
    \n\n\n\n\n
    \n
    \n
    \n\";}i:11;O:8:\"stdClass\":7:{s:2:\"id\";i:308871;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:46:\"Cover Image with Bold Heading and Button, Left\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1639:\"\n
    \"\"
    \n
    \n

    Take a hike and wAnder through the woods

    \n
    \n\n\n\n
    \n\n\n\n\n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:71:\"core/button,core/buttons,core/cover,core/group,core/heading,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:2443:\"\n
    \"\"
    \n
    \n

    Take a hike and wAnder through the woods

    \n
    \n\n\n\n
    \n\n\n\n\n
    \n\";}i:12;O:8:\"stdClass\":7:{s:2:\"id\";i:308868;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:40:\"Cover Image with Bold Heading and Button\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1647:\"\n
    \"\"
    \n
    \n

    Embark on a hiking adventure and explore the beauty of the woods.

    \n
    \n\n\n\n
    \n\n\n\n\n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:71:\"core/button,core/buttons,core/cover,core/group,core/heading,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:2449:\"\n
    \"\"
    \n
    \n

    Embark on a hiking adventure and explore the beauty of the woods.

    \n
    \n\n\n\n
    \n\n\n\n\n
    \n\";}i:13;O:8:\"stdClass\":7:{s:2:\"id\";i:303828;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:30:\"Fullscreen cover image gallery\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:961:\"\n
    \n
    \n
    \"\"
    \n\n\n\n
    \"\"
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:43:\"gallery, images, columns, background, cover\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:32:\"core/cover,core/group,core/image\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:7:\"gallery\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:1259:\"\n
    \n
    \n
    \"\"
    \n\n\n\n
    \"\"
    \n
    \n
    \n\";}i:14;O:8:\"stdClass\":7:{s:2:\"id\";i:277265;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:37:\"Fullwidth posts with uppercase titles\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:498:\"\n
    \n
    \n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:30:\"star, posts, loop, blog, index\";s:16:\"wpop_description\";s:62:\"A fullwidth posts pattern with large titles and start accents.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:10:\"core/query\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:182:\"core/group,core/paragraph,core/post-date,core/post-template,core/post-terms,core/post-title,core/query,core/query-pagination,core/query-pagination-next,core/query-pagination-previous\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:5:\"query\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:3502:\"\n
    \n
    \n\n
    \n
    \n
    \n

    ✴︎

    \n\n\n
    \n\n\n
    \n
    \n\n\n\n
    \n\n
    \n\n\n\n
    \n\n\n\n
    \n
    \n\";}i:15;O:8:\"stdClass\":7:{s:2:\"id\";i:277127;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:33:\"Fullwidth posts titles with dates\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:637:\"\n
    \n
    \n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:31:\"Posts, Query, Loop, Blog, Index\";s:16:\"wpop_description\";s:62:\"A fullwidth posts pattern with large titles and numeral dates.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:10:\"core/query\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:151:\"core/group,core/post-date,core/post-template,core/post-title,core/query,core/query-pagination,core/query-pagination-next,core/query-pagination-previous\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:5:\"query\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:3583:\"\n
    \n
    \n\n
    \n
    \n\n
    \n\n\n
    \n\n
    \n\n\n\n
    \n\n\n\n
    \n
    \n\";}i:16;O:8:\"stdClass\":7:{s:2:\"id\";i:229092;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:41:\"Header inside full-width background image\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:4792:\"\n
    \n
    \"\"
    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:100:\"Simple header with logo, site title, navigation and a full-width background image with dark overlay.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:80:\"core/cover,core/group,core/navigation,core/site-logo,core/site-title,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"header\";}s:13:\"keyword_slugs\";a:1:{i:0;s:4:\"core\";}s:15:\"pattern_content\";s:2554:\"\n
    \n
    \"\"
    \n
    \n
    \n\n
    \n\n\n
    \n\n\n\n
    \n
    \n
    \n\";}i:17;O:8:\"stdClass\":7:{s:2:\"id\";i:229097;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:34:\"Simple header with dark background\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3949:\"\n
    \n
    \n\n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:76:\"Simple header with logo, site title, navigation links and a dark background.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:57:\"core/group,core/navigation,core/site-logo,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"header\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1497:\"\n
    \n
    \n
    \n\n
    \n\n\n\n
    \n
    \n
    \n\";}i:18;O:8:\"stdClass\":7:{s:2:\"id\";i:229101;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:29:\"Text-only header with tagline\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3628:\"\n
    \n
    \n

    Patterns

    \n\n

    Beautifully designed patterns ready to go with a simple copy/paste

    \n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:53:\"Header with site title, tagline and navigation links.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:60:\"core/group,core/navigation,core/site-tagline,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"header\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:966:\"\n
    \n
    \n
    \n\n
    \n\n\n
    \n
    \n\";}i:19;O:8:\"stdClass\":7:{s:2:\"id\";i:229105;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:26:\"Simple header with tagline\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:4229:\"\n
    \n
    \n
    \"Site
    \n\n\n

    Patterns

    \n\n

    Beautifully designed patterns ready to go with a simple copy/paste

    \n
    \n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:92:\"Header with site logo, title and tagline on the left and with navigation links on the right.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:75:\"core/group,core/navigation,core/site-logo,core/site-tagline,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"header\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1389:\"\n
    \n
    \n
    \n\n\n
    \n\n
    \n
    \n\n\n
    \n
    \n\";}i:20;O:8:\"stdClass\":7:{s:2:\"id\";i:229111;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:36:\"Fullwidth site title and menu button\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3359:\"\n

    Patterns

    \n\n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:51:\"Header with site title and a hamburger menu button.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:42:\"core/group,core/navigation,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"header\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:794:\"\n
    \n\n
    \n\";}i:21;O:8:\"stdClass\":7:{s:2:\"id\";i:229116;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:32:\"Fullwidth header with hero image\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:4776:\"\n
    \n
    \n
    \"Site
    \n\n\n\n
    \n\n\n
    \n\n\n\n
    \"\"
    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:65:\"Header on a white background followed by a full-width hero image.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:80:\"core/cover,core/group,core/navigation,core/site-logo,core/site-title,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"header\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:2566:\"\n
    \n
    \n
    \n\n\n
    \n
    \n\n\n
    \n\n\n\n
    \"\"
    \n
    \n
    \n
    \n\";}i:22;O:8:\"stdClass\":7:{s:2:\"id\";i:229080;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:25:\"Centered header with logo\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3695:\"\n
    \n
    \"Site
    \n\n

    Patterns

    \n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:65:\"Center aligned header with logo, site title and navigation links.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:57:\"core/group,core/navigation,core/site-logo,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"header\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:926:\"\n
    \n
    \n\n\n\n
    \n
    \n\";}i:23;O:8:\"stdClass\":7:{s:2:\"id\";i:229084;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:37:\"Fullwidth header with large font size\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3465:\"\n

    Patterns

    \n\n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:80:\"Header with a large site title and navigation links in the same large font size.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:42:\"core/group,core/navigation,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"header\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:811:\"\n
    \n\n
    \n\";}i:24;O:8:\"stdClass\":7:{s:2:\"id\";i:229088;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:13:\"Simple header\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3757:\"\n
    \n
    \n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:51:\"Simple header with logo, site title and navigation.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/header\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:57:\"core/group,core/navigation,core/site-logo,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"header\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1021:\"\n
    \n
    \n
    \n\n
    \n\n\n
    \n
    \n\";}i:25;O:8:\"stdClass\":7:{s:2:\"id\";i:229123;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:33:\"Centered footer with social links\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:4249:\"\n
    \n
    \n

    Proudly powered by WordPress

    \n\n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:82:\"Centered footer with the sentence \"Proudly powered by WordPress\" and social links.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:25:\"core/group,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1495:\"\n
    \n
    \n

    Proudly powered by WordPress

    \n\n\n\n\n
    \n
    \n\";}i:26;O:8:\"stdClass\":7:{s:2:\"id\";i:229127;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:47:\"Footer with search, site title, and credit line\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3153:\"\n
    \n
    \n
    \n

    Search

    \n\n\n
    \n\n\n\n
    \n
    \n

    Social

    \n\n\n\n
    \n

    Facebook

    \n\n\n\n

    Instagram

    \n\n\n\n

    Twitter

    \n
    \n
    \n
    \n
    \n\n\n\n
    \n\n\n\n
    \n\n\n\n\n

    Proudly powered by WordPress

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:88:\"Footer with search field and site title on the left, and small credit line on the right.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:65:\"core/group,core/paragraph,core/search,core/site-title,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:3254:\"\n
    \n
    \n
    \n

    Search

    \n\n\n
    \n\n\n\n
    \n
    \n

    Social

    \n\n\n\n
    \n

    Facebook

    \n\n\n\n

    Instagram

    \n\n\n\n

    Twitter

    \n
    \n
    \n
    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n\n\n\n

    Proudly powered by WordPress

    \n
    \n
    \n\";}i:27;O:8:\"stdClass\":7:{s:2:\"id\";i:229131;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:38:\"Footer with site title and credit line\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:894:\"\n
    \n
    \n\n\n\n\n

    Proudly powered by WordPress

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:64:\"Footer with site title on the left and credit line on the right.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:41:\"core/group,core/paragraph,core/site-title\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1095:\"\n
    \n
    \n
    \n\n\n\n

    Proudly powered by WordPress

    \n
    \n
    \n\";}i:28;O:8:\"stdClass\":7:{s:2:\"id\";i:229135;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:38:\"Footer with navigation and credit line\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3629:\"\n
    \n
    \n
    \n\n\n\n

    Proudly powered by WordPress

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:64:\"Footer with navigation on the left and credit line on the right.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:41:\"core/group,core/navigation,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1174:\"\n
    \n
    \n
    \n\n\n\n

    Proudly powered by WordPress

    \n
    \n
    \n\";}i:29;O:8:\"stdClass\":7:{s:2:\"id\";i:229139;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:56:\"Fullwidth footer with background color and three columns\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3042:\"\n
    \n
    \n
    \n

    Location

    \n\n\n\n

    2020 Lomita Blvd, 
    Torrance, CA 90101
    United States

    \n\n\n\n
    \n
    \n\n\n\n
    \n

    Pages

    \n\n\n\n\n\n
    \n
    \n\n\n\n
    \n

    Follow us

    \n\n\n\n
    \n

    Facebook

    \n\n\n\n

    Instagram

    \n\n\n\n

    Twitter

    \n
    \n\n\n\n
    \n
    \n
    \n\n\n\n
    \n

    Proudly powered by WordPress

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:57:\"Text-only footer with background color and three columns.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:78:\"core/column,core/columns,core/group,core/navigation,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:3225:\"\n
    \n
    \n
    \n

    Location

    \n\n\n\n

    2020 Lomita Blvd, 
    Torrance, CA 90101
    United States

    \n\n\n\n
    \n
    \n\n\n\n
    \n

    Pages

    \n\n\n\n\n\n
    \n
    \n\n\n\n
    \n

    Follow us

    \n\n\n\n
    \n

    Facebook

    \n\n\n\n

    Instagram

    \n\n\n\n

    Twitter

    \n
    \n\n\n\n
    \n
    \n
    \n\n\n\n
    \n

    Proudly powered by WordPress

    \n
    \n
    \n\";}i:30;O:8:\"stdClass\":7:{s:2:\"id\";i:229143;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:33:\"Centered footer with social links\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:4155:\"\n
    \"Site
    \n\n\n

    Proudly powered by WordPress

    \n\n\n\n\n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:71:\"Footer with centered site title, tagline, social links and credit line.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.2\";s:25:\"wpop_contains_block_types\";s:75:\"core/group,core/paragraph,core/site-logo,core/social-link,core/social-links\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1532:\"\n
    \n\n\n

    Proudly powered by WordPress

    \n\n\n\n\n
    \n\";}i:31;O:8:\"stdClass\":7:{s:2:\"id\";i:229147;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:52:\"Fullwidth footer with navigation, credit, and social\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:4666:\"\n
    \n

    Patterns

    \n\n\n
    \n

    Proudly powered by WordPress

    \n
    \n\n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:87:\"Footer with site title on the left, credit in the middle and social links on the right.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:76:\"core/group,core/paragraph,core/site-title,core/social-link,core/social-links\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1869:\"\n
    \n
    \n\n\n
    \n

    Proudly powered by WordPress

    \n
    \n\n\n\n\n
    \n
    \n\";}i:32;O:8:\"stdClass\":7:{s:2:\"id\";i:229151;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:19:\"Left-aligned footer\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:2954:\"\n
    \n

    Patterns

    \n\n\n

    2020 Lomita Blvd, 
    Torrance, CA 90101
    United States

    \n\n\n\n

    Proudly powered by WordPress

    \n\n\n\n
    \n
    \n\n\n\n
    \n
    \n

    Pages

    \n\n\n\n\n\n
    \n
    \n\n\n\n
    \n

    Social

    \n\n\n\n
    \n

    Facebook

    \n\n\n\n

    Instagram

    \n\n\n\n

    Twitter

    \n
    \n\n\n\n
    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:44:\"Left-aligned footer with just a credit line.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:1:{i:0;s:25:\"core/template-part/footer\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:69:\"core/group,core/navigation,core/paragraph,core/site-title,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"footer\";i:1;s:9:\"wireframe\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:2939:\"\n
    \n
    \n\n\n

    2020 Lomita Blvd, 
    Torrance, CA 90101
    United States

    \n\n\n\n

    Proudly powered by WordPress

    \n\n\n\n
    \n
    \n\n\n\n
    \n
    \n

    Pages

    \n\n\n\n\n\n
    \n
    \n\n\n\n
    \n

    Social

    \n\n\n\n
    \n

    Facebook

    \n\n\n\n

    Instagram

    \n\n\n\n

    Twitter

    \n
    \n\n\n\n
    \n
    \n
    \n
    \n\";}i:33;O:8:\"stdClass\":7:{s:2:\"id\";i:201;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:32:\"Three columns with offset images\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1358:\"\n
    \n
    \n
    \"Close-up,
    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \n\n\n\n
    \"Close-up,
    \n
    \n\n\n\n
    \n
    \"Close-up
    \n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:33:\"Three columns with offset images.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:47:\"core/column,core/columns,core/image,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:7:\"gallery\";i:1;s:6:\"images\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1753:\"\n
    \n
    \n
    \"Close-up,
    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \n\n\n\n
    \"Close-up,
    \n
    \n\n\n\n
    \n
    \"Close-up
    \n\n\n\n
    \n
    \n
    \n\";}i:34;O:8:\"stdClass\":7:{s:2:\"id\";i:199;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:34:\"Three columns with images and text\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3604:\"\n
    \n
    \n
    ECOSYSTEM
    \n\n\n\n

    Positive growth.

    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n
    \n

    Nature, in the common sense, refers to essences unchanged by man; space, the air, the river, the leaf. Art is applied to the mixture of his will with the same things, as in a house, a canal, a statue, a picture.

    \n\n\n\n

    But his operations taken together are so insignificant, a little chipping, baking, patching, and washing, that in an impression so grand as that of the world on the human mind, they do not vary the result.

    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \"The
    \n
    \n\n\n\n
    \n
    \"Wind
    \n
    \n
    \n\n\n\n
    \n
    \n
    \"The
    \n
    \n\n\n\n
    \n
    \n\n\n\n

    Undoubtedly we have no questions to ask which are unanswerable. We must trust the perfection of the creation so far, as to believe that whatever curiosity the order of things has awakened in our minds, the order of things can satisfy. Every man’s condition is a solution in hieroglyphic to those inquiries he would put.

    \n
    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:77:\"Three columns with images and text, with vertical spacing for an offset look.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:86:\"core/column,core/columns,core/group,core/heading,core/image,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:4:{i:0;s:7:\"columns\";i:1;s:7:\"gallery\";i:2;s:6:\"images\";i:3;s:4:\"text\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:5124:\"\n
    \n
    \n
    ECOSYSTEM
    \n\n\n\n

    Positive growth.

    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n
    \n

    Nature, in the common sense, refers to essences unchanged by man; space, the air, the river, the leaf. Art is applied to the mixture of his will with the same things, as in a house, a canal, a statue, a picture.

    \n\n\n\n

    But his operations taken together are so insignificant, a little chipping, baking, patching, and washing, that in an impression so grand as that of the world on the human mind, they do not vary the result.

    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \"The
    \n
    \n\n\n\n
    \n
    \"Wind
    \n
    \n
    \n\n\n\n
    \n
    \n
    \"The
    \n
    \n\n\n\n
    \n
    \n\n\n\n

    Undoubtedly we have no questions to ask which are unanswerable. We must trust the perfection of the creation so far, as to believe that whatever curiosity the order of things has awakened in our minds, the order of things can satisfy. Every man\'s condition is a solution in hieroglyphic to those inquiries he would put.

    \n
    \n
    \n
    \n
    \n\";}i:35;O:8:\"stdClass\":7:{s:2:\"id\";i:197;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:39:\"Two columns of text with offset heading\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:2296:\"\n
    \n
    \n\n\n\n
    \n
    \n

    Oceanic Inspiration

    \n
    \n\n\n\n
    \n
    \n
    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \n

    Winding veils round their heads, the women walked on deck. They were now moving steadily down the river, passing the dark shapes of ships at anchor, and London was a swarm of lights with a pale yellow canopy drooping above it. There were the lights of the great theatres, the lights of the long streets, lights that indicated huge squares of domestic comfort, lights that hung high in air.

    \n
    \n\n\n\n
    \n

    No darkness would ever settle upon those lamps, as no darkness had settled upon them for hundreds of years. It seemed dreadful that the town should blaze for ever in the same spot; dreadful at least to people going away to adventure upon the sea, and beholding it as a circumscribed mound, eternally burnt, eternally scarred. From the deck of the ship the great city appeared a crouched and cowardly figure, a sedentary miser.

    \n
    \n
    \n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:43:\"Two columns of text with an offset heading.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:77:\"core/column,core/columns,core/group,core/paragraph,core/separator,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:7:\"columns\";i:1;s:4:\"text\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:2837:\"\n
    \n
    \n\n\n\n
    \n
    \n

    Oceanic Inspiration

    \n
    \n\n\n\n
    \n
    \n
    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \n

    Winding veils round their heads, the women walked on deck. They were now moving steadily down the river, passing the dark shapes of ships at anchor, and London was a swarm of lights with a pale yellow canopy drooping above it. There were the lights of the great theatres, the lights of the long streets, lights that indicated huge squares of domestic comfort, lights that hung high in air.

    \n
    \n\n\n\n
    \n

    No darkness would ever settle upon those lamps, as no darkness had settled upon them for hundreds of years. It seemed dreadful that the town should blaze for ever in the same spot; dreadful at least to people going away to adventure upon the sea, and beholding it as a circumscribed mound, eternally burnt, eternally scarred. From the deck of the ship the great city appeared a crouched and cowardly figure, a sedentary miser.

    \n
    \n
    \n\n\n\n
    \n
    \n\";}i:36;O:8:\"stdClass\":7:{s:2:\"id\";i:196;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:41:\"Media and text in a full height container\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1484:\"\n
    \n
    \"Close-up
    \n

    What’s the problem?

    \n\n\n\n

    Trees are more important today than ever before. More than 10,000 products are reportedly made from trees. Through chemistry, the humble woodpile is yielding chemicals, plastics and fabrics that were beyond comprehension when an axe first felled a Texas tree.

    \n\n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:77:\"Media and text block with image to the left and text and button to the right.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:79:\"core/button,core/buttons,core/cover,core/heading,core/media-text,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:2015:\"\n
    \n
    \"Close-up
    \n

    What\'s the problem?

    \n\n\n\n

    Trees are more important today than ever before. More than 10,000 products are reportedly made from trees. Through chemistry, the humble woodpile is yielding chemicals, plastics and fabrics that were beyond comprehension when an axe first felled a Texas tree.

    \n\n\n\n\n
    \n
    \n\";}i:37;O:8:\"stdClass\":7:{s:2:\"id\";i:195;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:38:\"Media and text with image on the right\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:719:\"\n
    \n

    Shore with Blue Sea

    \n\n\n\n

    Eleanor Harris (American, 1901-1942)

    \n
    \"A
    \n\n\n\n

    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:66:\"Media and text block with image to the right and text to the left.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:43:\"core/heading,core/media-text,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1155:\"\n
    \n

    Shore with Blue Sea

    \n\n\n\n

    Eleanor Harris (American, 1901-1942)

    \n
    \"A
    \n\n\n\n

    \n\";}i:38;O:8:\"stdClass\":7:{s:2:\"id\";i:192;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:37:\"Media and text with image on the left\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:611:\"\n
    \"Close-up,
    \n

    Open Spaces

    \n\n\n\n

    See case study

    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:66:\"Media and text block with image to the left and text to the right.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:43:\"core/heading,core/media-text,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:844:\"\n
    \"Close-up,
    \n

    Open Spaces

    \n\n\n\n

    See case study ↗

    \n
    \n\";}i:39;O:8:\"stdClass\":7:{s:2:\"id\";i:186;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:35:\"Large header with text and a button\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1596:\"\n
    \n

    Overseas:
    1500 — 1960

    \n\n\n\n
    \n
    \n

    An exhibition about the different representations of the ocean throughout time, between the sixteenth and the twentieth century. Taking place in our Open Room in Floor 2.

    \n\n\n\n
    \n\n
    \n
    \n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:62:\"Large header with background image and text and button on top.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:88:\"core/button,core/buttons,core/column,core/columns,core/cover,core/heading,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:2053:\"\n
    \n

    Overseas:
    1500 — 1960

    \n\n\n\n
    \n
    \n

    An exhibition about the different representations of the ocean throughout time, between the sixteenth and the twentieth century. Taking place in our Open Room in Floor 2.

    \n\n\n\n
    \n\n
    \n
    \n\n\n\n
    \n
    \n
    \n\";}i:40;O:8:\"stdClass\":7:{s:2:\"id\";i:185;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:35:\"Large header with left-aligned text\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1388:\"\n
    \"\"
    \n

    Forest.

    \n\n\n\n
    \n
    \n
    \n\n\n\n

    Even a child knows how valuable the forest is. The fresh, breathtaking smell of trees. Echoing birds flying above that dense magnitude. A stable climate, a sustainable diverse life and a source of culture. Yet, forests and other ecosystems hang in the balance, threatened to become croplands, pasture, and plantations.

    \n
    \n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:29:\"Cover image with quote on top\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:75:\"core/column,core/columns,core/cover,core/heading,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1698:\"\n
    \"\"
    \n

    Forest.

    \n\n\n\n
    \n
    \n
    \n\n\n\n

    Even a child knows how valuable the forest is. The fresh, breathtaking smell of trees. Echoing birds flying above that dense magnitude. A stable climate, a sustainable diverse life and a source of culture. Yet, forests and other ecosystems hang in the balance, threatened to become croplands, pasture, and plantations.

    \n
    \n\n\n\n
    \n
    \n
    \n\";}i:41;O:8:\"stdClass\":7:{s:2:\"id\";i:184;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:7:\"Heading\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:526:\"\n

    We’re a studio in Berlin with an international practice in architecture, urban planning and interior design. We believe in sharing knowledge and promoting dialogue to increase the creative potential of collaboration.

    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:17:\"large text, title\";s:16:\"wpop_description\";s:12:\"Heading text\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:1:{i:0;s:12:\"core/heading\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:12:\"core/heading\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:4:\"text\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:621:\"\n

    We\'re a studio in Berlin with an international practice in architecture, urban planning and interior design. We believe in sharing knowledge and promoting dialogue to increase the creative potential of collaboration.

    \n\";}i:42;O:8:\"stdClass\":7:{s:2:\"id\";i:29;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:29:\"Two columns of text and title\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1546:\"\n

    The voyage had begun, and had begun happily with a soft blue sky, and a calm sea.

    \n\n\n\n
    \n
    \n

    They followed her on to the deck. All the smoke and the houses had disappeared, and the ship was out in a wide space of sea very fresh and clear though pale in the early light. They had left London sitting on its mud. A very thin line of shadow tapered on the horizon, scarcely thick enough to stand the burden of Paris, which nevertheless rested upon it. They were free of roads, free of mankind, and the same exhilaration at their freedom ran through them all.

    \n
    \n\n\n\n
    \n

    The ship was making her way steadily through small waves which slapped her and then fizzled like effervescing water, leaving a little border of bubbles and foam on either side. The colourless October sky above was thinly clouded as if by the trail of wood-fire smoke, and the air was wonderfully salt and brisk. Indeed it was too cold to stand still. Mrs. Ambrose drew her arm within her husband’s, and as they moved off it could be seen from the way in which her sloping cheek turned up to his that she had something private to communicate.

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:47:\"Two columns of text preceded by a long heading.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:52:\"core/column,core/columns,core/heading,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:7:\"columns\";i:1;s:4:\"text\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1711:\"\n

    The voyage had begun, and had begun happily with a soft blue sky, and a calm sea.

    \n\n\n\n
    \n
    \n

    They followed her on to the deck. All the smoke and the houses had disappeared, and the ship was out in a wide space of sea very fresh and clear though pale in the early light. They had left London sitting on its mud. A very thin line of shadow tapered on the horizon, scarcely thick enough to stand the burden of Paris, which nevertheless rested upon it. They were free of roads, free of mankind, and the same exhilaration at their freedom ran through them all.

    \n
    \n\n\n\n
    \n

    The ship was making her way steadily through small waves which slapped her and then fizzled like effervescing water, leaving a little border of bubbles and foam on either side. The colourless October sky above was thinly clouded as if by the trail of wood-fire smoke, and the air was wonderfully salt and brisk. Indeed it was too cold to stand still. Mrs. Ambrose drew her arm within her husband\'s, and as they moved off it could be seen from the way in which her sloping cheek turned up to his that she had something private to communicate.

    \n
    \n
    \n\";}i:43;O:8:\"stdClass\":7:{s:2:\"id\";i:19;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:23:\"Two images side by side\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:571:\"\n\n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:41:\"An image gallery with two example images.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:23:\"core/gallery,core/image\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:7:\"gallery\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:704:\"\n\n\";}}'),(177,1,'_site_transient_timeout_wp_remote_block_patterns_9777e31ff1d7d0002ae5684e797428b4','1743442996'),(178,1,'_site_transient_wp_remote_block_patterns_9777e31ff1d7d0002ae5684e797428b4','a:13:{i:0;O:8:\"stdClass\":7:{s:2:\"id\";i:207567;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:11:\"Link in Bio\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:6680:\"\n

    Patterns

    \n\n

    Beautifully designed patterns ready to go with a simple copy/paste

    \n\n\n
    \n\n\n\n\n\n\n\n\n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:3:\"6.1\";s:25:\"wpop_contains_block_types\";s:116:\"core/button,core/buttons,core/group,core/site-tagline,core/site-title,core/social-link,core/social-links,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:14:\"call-to-action\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:2665:\"\n
    \n\n\n\n\n
    \n\n\n\n\n\n\n\n\n
    \n\";}i:1;O:8:\"stdClass\":7:{s:2:\"id\";i:732;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:21:\"Simple call to action\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:991:\"\n
    \n
    \n\n\n\n

    GET IN TOUCH

    \n\n\n\n

    Schedule a Visit

    \n\n\n\n\n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:89:\"A container with a white background. Inside is a centered paragraph, heading, and button.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:75:\"core/button,core/buttons,core/group,core/heading,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:7:\"buttons\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:1506:\"\n
    \n
    \n\n\n\n

    GET IN TOUCH

    \n\n\n\n

    Schedule a Visit

    \n\n\n\n\n\n\n\n
    \n
    \n\";}i:2;O:8:\"stdClass\":7:{s:2:\"id\";i:678;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:26:\"Three column pricing table\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3877:\"\n
    \n
    \n

    Single

    \n\n\n\n

    Enrich our growing community.

    \n\n\n\n
    \n\n\n\n
      \n
    • General admission and member discounts for one adult
    • \n\n\n\n
    • One free ticket per special exhibition
    • \n\n\n\n
    • Two single-use guest passes per year
    • \n
    \n\n\n\n\n
    \n\n\n\n
    \n

    Family

    \n\n\n\n

    Support special exhibitions.

    \n\n\n\n
    \n\n\n\n
      \n
    • General admission and member discounts for two adults
    • \n\n\n\n
    • Four free tickets per special exhibition
    • \n\n\n\n
    • Four single-use guest passes per year
    • \n
    \n\n\n\n\n
    \n\n\n\n
    \n

    Patron

    \n\n\n\n

    Take support to the next level.

    \n\n\n\n
    \n\n\n\n
      \n
    • General admission and member discounts for two adults
    • \n\n\n\n
    • Five free tickets per special exhibition
    • \n\n\n\n
    • Six single-use guest passes per year
    • \n
    \n\n\n\n\n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:272:\"Three equal-width columns set up as a pricing table. The left column has a yellow background, the middle column has a light purple background, and the right column has a light blue background. Each column contains a heading, subheading, separator, list, and then a button.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:117:\"core/button,core/buttons,core/column,core/columns,core/heading,core/list,core/list-item,core/paragraph,core/separator\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:14:\"call-to-action\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:6125:\"\n
    \n
    \n

    Single

    \n\n\n\n

    Enrich our growing community.

    \n\n\n\n
    \n\n\n\n
      \n
    • General admission and member discounts for one adult
    • \n\n\n\n
    • One free ticket per special exhibition
    • \n\n\n\n
    • Two single-use guest passes per year
    • \n
    \n\n\n\n\n
    \n\n\n\n
    \n

    Family

    \n\n\n\n

    Support special exhibitions.

    \n\n\n\n
    \n\n\n\n
      \n
    • General admission and member discounts for two adults
    • \n\n\n\n
    • Four free tickets per special exhibition
    • \n\n\n\n
    • Four single-use guest passes per year
    • \n
    \n\n\n\n\n
    \n\n\n\n
    \n

    Patron

    \n\n\n\n

    Take support to the next level.

    \n\n\n\n
    \n\n\n\n
      \n
    • General admission and member discounts for two adults
    • \n\n\n\n
    • Five free tickets per special exhibition
    • \n\n\n\n
    • Six single-use guest passes per year
    • \n
    \n\n\n\n\n
    \n
    \n\";}i:3;O:8:\"stdClass\":7:{s:2:\"id\";i:669;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:31:\"Image and quote on a background\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:2293:\"\n
    \"\"
    \n
    \n

    Even the bitterest fruit has sugar in it.

    \n\n\n\n

    – Terry a O’Neal

    \n
    \n
    \n\n\n\n
    \"\"
    \n
    \n

    The trees that are slow to grow bear the best fruit.

    \n\n\n\n

    – Molière

    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:221:\"Two media and text blocks. The top one has a pale green background. The text is on the left and contains a quote, and the image is on the right. The next block underneath has the image on the left, and quote on the right.\";s:19:\"wpop_viewport_width\";i:800;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:41:\"core/group,core/media-text,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"images\";i:1;s:4:\"text\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:2404:\"\n
    \"\"
    \n
    \n

    Even the bitterest fruit has sugar in it.

    \n\n\n\n

    – Terry a O\'Neal

    \n
    \n
    \n\n\n\n
    \"\"
    \n
    \n

    The trees that are slow to grow bear the best fruit.

    \n\n\n\n

    – Molière

    \n
    \n
    \n\";}i:4;O:8:\"stdClass\":7:{s:2:\"id\";i:591;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:5:\"Event\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1750:\"\n
    \n
    \n

    Opening
    Party

    \n\n\n\n

    RSVP

    \n
    \n
    \"\"
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:0:\"\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:54:\"core/group,core/heading,core/media-text,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"banner\";i:1;s:6:\"images\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:1617:\"\n
    \n
    \n

    Opening
    Party

    \n\n\n\n

    RSVP →

    \n
    \n
    \"\"
    \n\";}i:5;O:8:\"stdClass\":7:{s:2:\"id\";i:573;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:37:\"Image on solid color with description\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1933:\"\n
    \n
    \n
    \n
    \"\"
    \n
    \n
    \n\n\n\n
    \n
    \n
    \n

    Airplane

    \n\n\n\n

    Copper wire, wood base. I created this piece in late 2008. For this work, I aimed to convey both the industrial heaviness of an airplane, but also the cloudlike floating quality you feel when you’re in one.

    \n
    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:38:\"Image on solid color with description.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:61:\"core/column,core/columns,core/cover,core/image,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:6:\"images\";i:1;s:4:\"text\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:1826:\"\n
    \n
    \n
    \n
    \"\"
    \n
    \n
    \n\n\n\n
    \n
    \n
    \n

    Airplane

    \n\n\n\n

    Copper wire, wood base. I created this piece in late 2008. For this work, I aimed to convey both the industrial heaviness of an airplane, but also the cloudlike floating quality you feel when you’re in one.

    \n
    \n
    \n
    \n
    \n\";}i:6;O:8:\"stdClass\":7:{s:2:\"id\";i:526;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:31:\"Offset images with descriptions\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3074:\"\n
    \n
    \n
    \n
    \"Beautiful
    \n\n\n\n
    \n

    White Irises

    \n\n\n\n

    Ogawa Kazumasa

    \n
    \n
    \n
    \n\n\n\n
    \n
    \n
    \n
    \n\n\n\n

    Cherry Blossom

    \n\n\n\n

    Ogawa Kazumasa

    \n
    \n\n\n\n
    \"Beautiful
    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:58:\"Two offset columns with images and titles within each one.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:73:\"core/column,core/columns,core/group,core/image,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:2:{i:0;s:7:\"gallery\";i:1;s:6:\"images\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:2930:\"\n
    \n
    \n
    \n
    \"Beautiful
    \n\n\n\n
    \n

    White Irises

    \n\n\n\n

    Ogawa Kazumasa

    \n
    \n
    \n
    \n\n\n\n
    \n
    \n
    \n
    \n\n\n\n

    Cherry Blossom

    \n\n\n\n

    Ogawa Kazumasa

    \n
    \n\n\n\n
    \"Beautiful
    \n
    \n
    \n
    \n\";}i:7;O:8:\"stdClass\":7:{s:2:\"id\";i:521;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:45:\"Image with description below and to the right\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1729:\"\n
    \n
    \n\n\n\n
    \n
    \"Vintage
    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \n

    Cupid in Flight
    48” x 48” Giclee print on archival paper.

    \n
    \n
    \n\n\n\n

    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:46:\"Image with description below and to the right.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:50:\"core/column,core/columns,core/image,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"images\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:1241:\"\n
    \n
    \n\n\n\n
    \n
    \"Vintage
    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \n

    Cupid in Flight
    48” x 48” Giclee print on archival paper.

    \n
    \n
    \n\n\n\n

    \n\";}i:8;O:8:\"stdClass\":7:{s:2:\"id\";i:502;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:13:\"Event details\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1719:\"\n
    \"Image
    \n\n\n\n
    \n
    \n

    Location:
    82 Main St. Brooklyn, NY

    \n
    \n\n\n\n
    \n

    Date:
    October 24, 2021

    \n
    \n\n\n\n\n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:14:\"Event details.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:75:\"core/button,core/buttons,core/column,core/columns,core/image,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:14:\"call-to-action\";}s:13:\"keyword_slugs\";a:1:{i:0;s:8:\"featured\";}s:15:\"pattern_content\";s:1642:\"\n
    \"Image
    \n\n\n\n
    \n
    \n

    Location:
    82 Main St. Brooklyn, NY

    \n
    \n\n\n\n
    \n

    Date:
    October 24, 2021

    \n
    \n\n\n\n\n
    \n\";}i:9;O:8:\"stdClass\":7:{s:2:\"id\";i:199;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:34:\"Three columns with images and text\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:3604:\"\n
    \n
    \n
    ECOSYSTEM
    \n\n\n\n

    Positive growth.

    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n
    \n

    Nature, in the common sense, refers to essences unchanged by man; space, the air, the river, the leaf. Art is applied to the mixture of his will with the same things, as in a house, a canal, a statue, a picture.

    \n\n\n\n

    But his operations taken together are so insignificant, a little chipping, baking, patching, and washing, that in an impression so grand as that of the world on the human mind, they do not vary the result.

    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \"The
    \n
    \n\n\n\n
    \n
    \"Wind
    \n
    \n
    \n\n\n\n
    \n
    \n
    \"The
    \n
    \n\n\n\n
    \n
    \n\n\n\n

    Undoubtedly we have no questions to ask which are unanswerable. We must trust the perfection of the creation so far, as to believe that whatever curiosity the order of things has awakened in our minds, the order of things can satisfy. Every man’s condition is a solution in hieroglyphic to those inquiries he would put.

    \n
    \n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:77:\"Three columns with images and text, with vertical spacing for an offset look.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:86:\"core/column,core/columns,core/group,core/heading,core/image,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:4:{i:0;s:7:\"columns\";i:1;s:7:\"gallery\";i:2;s:6:\"images\";i:3;s:4:\"text\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:5124:\"\n
    \n
    \n
    ECOSYSTEM
    \n\n\n\n

    Positive growth.

    \n
    \n\n\n\n
    \n\n\n\n
    \n
    \n
    \n

    Nature, in the common sense, refers to essences unchanged by man; space, the air, the river, the leaf. Art is applied to the mixture of his will with the same things, as in a house, a canal, a statue, a picture.

    \n\n\n\n

    But his operations taken together are so insignificant, a little chipping, baking, patching, and washing, that in an impression so grand as that of the world on the human mind, they do not vary the result.

    \n
    \n\n\n\n
    \n
    \n\n\n\n
    \"The
    \n
    \n\n\n\n
    \n
    \"Wind
    \n
    \n
    \n\n\n\n
    \n
    \n
    \"The
    \n
    \n\n\n\n
    \n
    \n\n\n\n

    Undoubtedly we have no questions to ask which are unanswerable. We must trust the perfection of the creation so far, as to believe that whatever curiosity the order of things has awakened in our minds, the order of things can satisfy. Every man\'s condition is a solution in hieroglyphic to those inquiries he would put.

    \n
    \n
    \n
    \n
    \n\";}i:10;O:8:\"stdClass\":7:{s:2:\"id\";i:192;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:37:\"Media and text with image on the left\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:611:\"\n
    \"Close-up,
    \n

    Open Spaces

    \n\n\n\n

    See case study

    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:66:\"Media and text block with image to the left and text to the right.\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:43:\"core/heading,core/media-text,core/paragraph\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:844:\"\n
    \"Close-up,
    \n

    Open Spaces

    \n\n\n\n

    See case study ↗

    \n
    \n\";}i:11;O:8:\"stdClass\":7:{s:2:\"id\";i:185;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:35:\"Large header with left-aligned text\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:1388:\"\n
    \"\"
    \n

    Forest.

    \n\n\n\n
    \n
    \n
    \n\n\n\n

    Even a child knows how valuable the forest is. The fresh, breathtaking smell of trees. Echoing birds flying above that dense magnitude. A stable climate, a sustainable diverse life and a source of culture. Yet, forests and other ecosystems hang in the balance, threatened to become croplands, pasture, and plantations.

    \n
    \n\n\n\n
    \n
    \n
    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:0:\"\";s:16:\"wpop_description\";s:29:\"Cover image with quote on top\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:0:{}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:75:\"core/column,core/columns,core/cover,core/heading,core/paragraph,core/spacer\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:6:\"banner\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:1698:\"\n
    \"\"
    \n

    Forest.

    \n\n\n\n
    \n
    \n
    \n\n\n\n

    Even a child knows how valuable the forest is. The fresh, breathtaking smell of trees. Echoing birds flying above that dense magnitude. A stable climate, a sustainable diverse life and a source of culture. Yet, forests and other ecosystems hang in the balance, threatened to become croplands, pasture, and plantations.

    \n
    \n\n\n\n
    \n
    \n
    \n\";}i:12;O:8:\"stdClass\":7:{s:2:\"id\";i:184;s:5:\"title\";O:8:\"stdClass\":1:{s:8:\"rendered\";s:7:\"Heading\";}s:7:\"content\";O:8:\"stdClass\":2:{s:8:\"rendered\";s:526:\"\n

    We’re a studio in Berlin with an international practice in architecture, urban planning and interior design. We believe in sharing knowledge and promoting dialogue to increase the creative potential of collaboration.

    \n\";s:9:\"protected\";b:0;}s:4:\"meta\";O:8:\"stdClass\":8:{s:13:\"wpop_keywords\";s:17:\"large text, title\";s:16:\"wpop_description\";s:12:\"Heading text\";s:19:\"wpop_viewport_width\";i:1200;s:16:\"wpop_block_types\";a:1:{i:0;s:12:\"core/heading\";}s:11:\"wpop_locale\";s:5:\"en_US\";s:15:\"wpop_wp_version\";s:0:\"\";s:25:\"wpop_contains_block_types\";s:12:\"core/heading\";s:9:\"footnotes\";s:0:\"\";}s:14:\"category_slugs\";a:1:{i:0;s:4:\"text\";}s:13:\"keyword_slugs\";a:2:{i:0;s:4:\"core\";i:1;s:8:\"featured\";}s:15:\"pattern_content\";s:621:\"\n

    We\'re a studio in Berlin with an international practice in architecture, urban planning and interior design. We believe in sharing knowledge and promoting dialogue to increase the creative potential of collaboration.

    \n\";}}'),(189,1,'_site_transient_timeout_available_translations','1743454523'),(190,1,'_site_transient_available_translations','a:131:{s:2:\"af\";a:8:{s:8:\"language\";s:2:\"af\";s:7:\"version\";s:8:\"5.8-beta\";s:7:\"updated\";s:19:\"2021-05-13 15:59:22\";s:12:\"english_name\";s:9:\"Afrikaans\";s:11:\"native_name\";s:9:\"Afrikaans\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/5.8-beta/af.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"af\";i:2;s:3:\"afr\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:10:\"Gaan voort\";}}s:2:\"am\";a:8:{s:8:\"language\";s:2:\"am\";s:7:\"version\";s:5:\"6.0.9\";s:7:\"updated\";s:19:\"2022-09-29 20:43:49\";s:12:\"english_name\";s:7:\"Amharic\";s:11:\"native_name\";s:12:\"አማርኛ\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.0.9/am.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"am\";i:2;s:3:\"amh\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"ቀጥል\";}}s:3:\"arg\";a:8:{s:8:\"language\";s:3:\"arg\";s:7:\"version\";s:8:\"6.2-beta\";s:7:\"updated\";s:19:\"2022-09-22 16:46:56\";s:12:\"english_name\";s:9:\"Aragonese\";s:11:\"native_name\";s:9:\"Aragonés\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/6.2-beta/arg.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"an\";i:2;s:3:\"arg\";i:3;s:3:\"arg\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continar\";}}s:2:\"ar\";a:8:{s:8:\"language\";s:2:\"ar\";s:7:\"version\";s:5:\"6.4.5\";s:7:\"updated\";s:19:\"2024-02-13 12:49:38\";s:12:\"english_name\";s:6:\"Arabic\";s:11:\"native_name\";s:14:\"العربية\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.4.5/ar.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ar\";i:2;s:3:\"ara\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:12:\"متابعة\";}}s:3:\"ary\";a:8:{s:8:\"language\";s:3:\"ary\";s:7:\"version\";s:6:\"4.8.25\";s:7:\"updated\";s:19:\"2017-01-26 15:42:35\";s:12:\"english_name\";s:15:\"Moroccan Arabic\";s:11:\"native_name\";s:31:\"العربية المغربية\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/translation/core/4.8.25/ary.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ar\";i:3;s:3:\"ary\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:16:\"المتابعة\";}}s:2:\"as\";a:8:{s:8:\"language\";s:2:\"as\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-11-01 09:05:28\";s:12:\"english_name\";s:8:\"Assamese\";s:11:\"native_name\";s:21:\"অসমীয়া\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/as.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"as\";i:2;s:3:\"asm\";i:3;s:3:\"asm\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:3:\"azb\";a:8:{s:8:\"language\";s:3:\"azb\";s:7:\"version\";s:5:\"6.4.5\";s:7:\"updated\";s:19:\"2024-01-19 08:58:31\";s:12:\"english_name\";s:17:\"South Azerbaijani\";s:11:\"native_name\";s:29:\"گؤنئی آذربایجان\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.4.5/azb.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"az\";i:3;s:3:\"azb\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:2:\"az\";a:8:{s:8:\"language\";s:2:\"az\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-11-06 00:09:27\";s:12:\"english_name\";s:11:\"Azerbaijani\";s:11:\"native_name\";s:16:\"Azərbaycan dili\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/4.7.2/az.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"az\";i:2;s:3:\"aze\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:5:\"Davam\";}}s:3:\"bel\";a:8:{s:8:\"language\";s:3:\"bel\";s:7:\"version\";s:6:\"4.9.26\";s:7:\"updated\";s:19:\"2024-12-26 00:37:42\";s:12:\"english_name\";s:10:\"Belarusian\";s:11:\"native_name\";s:29:\"Беларуская мова\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/translation/core/4.9.26/bel.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"be\";i:2;s:3:\"bel\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:20:\"Працягнуць\";}}s:5:\"bg_BG\";a:8:{s:8:\"language\";s:5:\"bg_BG\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-01-12 07:32:34\";s:12:\"english_name\";s:9:\"Bulgarian\";s:11:\"native_name\";s:18:\"Български\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/bg_BG.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"bg\";i:2;s:3:\"bul\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:12:\"Напред\";}}s:5:\"bn_BD\";a:8:{s:8:\"language\";s:5:\"bn_BD\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-20 08:42:35\";s:12:\"english_name\";s:20:\"Bengali (Bangladesh)\";s:11:\"native_name\";s:15:\"বাংলা\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/bn_BD.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"bn\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:28:\"চালিয়ে যান\";}}s:2:\"bo\";a:8:{s:8:\"language\";s:2:\"bo\";s:7:\"version\";s:8:\"5.8-beta\";s:7:\"updated\";s:19:\"2020-10-30 03:24:38\";s:12:\"english_name\";s:7:\"Tibetan\";s:11:\"native_name\";s:21:\"བོད་ཡིག\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/5.8-beta/bo.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"bo\";i:2;s:3:\"tib\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:33:\"མུ་མཐུད་དུ།\";}}s:5:\"bs_BA\";a:8:{s:8:\"language\";s:5:\"bs_BA\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2023-02-22 20:45:53\";s:12:\"english_name\";s:7:\"Bosnian\";s:11:\"native_name\";s:8:\"Bosanski\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.2.6/bs_BA.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"bs\";i:2;s:3:\"bos\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:7:\"Nastavi\";}}s:2:\"ca\";a:8:{s:8:\"language\";s:2:\"ca\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-29 14:26:16\";s:12:\"english_name\";s:7:\"Catalan\";s:11:\"native_name\";s:7:\"Català\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/ca.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ca\";i:2;s:3:\"cat\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continua\";}}s:3:\"ceb\";a:8:{s:8:\"language\";s:3:\"ceb\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-03-02 17:25:51\";s:12:\"english_name\";s:7:\"Cebuano\";s:11:\"native_name\";s:7:\"Cebuano\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.7.2/ceb.zip\";s:3:\"iso\";a:2:{i:2;s:3:\"ceb\";i:3;s:3:\"ceb\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:7:\"Padayun\";}}s:5:\"cs_CZ\";a:8:{s:8:\"language\";s:5:\"cs_CZ\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-11 08:34:45\";s:12:\"english_name\";s:5:\"Czech\";s:11:\"native_name\";s:9:\"Čeština\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/cs_CZ.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"cs\";i:2;s:3:\"ces\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:11:\"Pokračovat\";}}s:2:\"cy\";a:8:{s:8:\"language\";s:2:\"cy\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-04 15:09:31\";s:12:\"english_name\";s:5:\"Welsh\";s:11:\"native_name\";s:7:\"Cymraeg\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/cy.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"cy\";i:2;s:3:\"cym\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Parhau\";}}s:5:\"da_DK\";a:8:{s:8:\"language\";s:5:\"da_DK\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-28 14:09:21\";s:12:\"english_name\";s:6:\"Danish\";s:11:\"native_name\";s:5:\"Dansk\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/da_DK.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"da\";i:2;s:3:\"dan\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Fortsæt\";}}s:5:\"de_CH\";a:8:{s:8:\"language\";s:5:\"de_CH\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-11-05 18:11:40\";s:12:\"english_name\";s:20:\"German (Switzerland)\";s:11:\"native_name\";s:17:\"Deutsch (Schweiz)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/de_CH.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"de\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Weiter\";}}s:5:\"de_DE\";a:8:{s:8:\"language\";s:5:\"de_DE\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-30 17:06:59\";s:12:\"english_name\";s:6:\"German\";s:11:\"native_name\";s:7:\"Deutsch\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/de_DE.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"de\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Weiter\";}}s:12:\"de_DE_formal\";a:8:{s:8:\"language\";s:12:\"de_DE_formal\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-30 17:06:47\";s:12:\"english_name\";s:15:\"German (Formal)\";s:11:\"native_name\";s:13:\"Deutsch (Sie)\";s:7:\"package\";s:71:\"https://downloads.wordpress.org/translation/core/6.7.2/de_DE_formal.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"de\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Weiter\";}}s:14:\"de_CH_informal\";a:8:{s:8:\"language\";s:14:\"de_CH_informal\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-11-05 18:08:14\";s:12:\"english_name\";s:30:\"German (Switzerland, Informal)\";s:11:\"native_name\";s:21:\"Deutsch (Schweiz, Du)\";s:7:\"package\";s:73:\"https://downloads.wordpress.org/translation/core/6.7.2/de_CH_informal.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"de\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Weiter\";}}s:5:\"de_AT\";a:8:{s:8:\"language\";s:5:\"de_AT\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-03 07:45:57\";s:12:\"english_name\";s:16:\"German (Austria)\";s:11:\"native_name\";s:21:\"Deutsch (Österreich)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/de_AT.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"de\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Weiter\";}}s:3:\"dsb\";a:8:{s:8:\"language\";s:3:\"dsb\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2022-07-16 12:13:09\";s:12:\"english_name\";s:13:\"Lower Sorbian\";s:11:\"native_name\";s:16:\"Dolnoserbšćina\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.2.6/dsb.zip\";s:3:\"iso\";a:2:{i:2;s:3:\"dsb\";i:3;s:3:\"dsb\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:5:\"Dalej\";}}s:3:\"dzo\";a:8:{s:8:\"language\";s:3:\"dzo\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-06-29 08:59:03\";s:12:\"english_name\";s:8:\"Dzongkha\";s:11:\"native_name\";s:18:\"རྫོང་ཁ\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.7.2/dzo.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"dz\";i:2;s:3:\"dzo\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:2:\"el\";a:8:{s:8:\"language\";s:2:\"el\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-22 11:02:17\";s:12:\"english_name\";s:5:\"Greek\";s:11:\"native_name\";s:16:\"Ελληνικά\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/el.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"el\";i:2;s:3:\"ell\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:16:\"Συνέχεια\";}}s:5:\"en_ZA\";a:8:{s:8:\"language\";s:5:\"en_ZA\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-11-08 19:43:34\";s:12:\"english_name\";s:22:\"English (South Africa)\";s:11:\"native_name\";s:22:\"English (South Africa)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/en_ZA.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"en\";i:2;s:3:\"eng\";i:3;s:3:\"eng\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:5:\"en_GB\";a:8:{s:8:\"language\";s:5:\"en_GB\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-11-14 20:17:10\";s:12:\"english_name\";s:12:\"English (UK)\";s:11:\"native_name\";s:12:\"English (UK)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/en_GB.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"en\";i:2;s:3:\"eng\";i:3;s:3:\"eng\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:5:\"en_CA\";a:8:{s:8:\"language\";s:5:\"en_CA\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-25 15:37:15\";s:12:\"english_name\";s:16:\"English (Canada)\";s:11:\"native_name\";s:16:\"English (Canada)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/en_CA.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"en\";i:2;s:3:\"eng\";i:3;s:3:\"eng\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:5:\"en_AU\";a:8:{s:8:\"language\";s:5:\"en_AU\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-12-15 22:47:35\";s:12:\"english_name\";s:19:\"English (Australia)\";s:11:\"native_name\";s:19:\"English (Australia)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/en_AU.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"en\";i:2;s:3:\"eng\";i:3;s:3:\"eng\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:5:\"en_NZ\";a:8:{s:8:\"language\";s:5:\"en_NZ\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-11-12 00:03:39\";s:12:\"english_name\";s:21:\"English (New Zealand)\";s:11:\"native_name\";s:21:\"English (New Zealand)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/en_NZ.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"en\";i:2;s:3:\"eng\";i:3;s:3:\"eng\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:2:\"eo\";a:8:{s:8:\"language\";s:2:\"eo\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-18 15:16:11\";s:12:\"english_name\";s:9:\"Esperanto\";s:11:\"native_name\";s:9:\"Esperanto\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/eo.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"eo\";i:2;s:3:\"epo\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Daŭrigi\";}}s:5:\"es_CR\";a:8:{s:8:\"language\";s:5:\"es_CR\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-12-09 22:28:42\";s:12:\"english_name\";s:20:\"Spanish (Costa Rica)\";s:11:\"native_name\";s:22:\"Español de Costa Rica\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/es_CR.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_PE\";a:8:{s:8:\"language\";s:5:\"es_PE\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-10-16 21:04:12\";s:12:\"english_name\";s:14:\"Spanish (Peru)\";s:11:\"native_name\";s:17:\"Español de Perú\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/es_PE.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_MX\";a:8:{s:8:\"language\";s:5:\"es_MX\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-04 14:46:26\";s:12:\"english_name\";s:16:\"Spanish (Mexico)\";s:11:\"native_name\";s:19:\"Español de México\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/es_MX.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_ES\";a:8:{s:8:\"language\";s:5:\"es_ES\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-22 16:30:18\";s:12:\"english_name\";s:15:\"Spanish (Spain)\";s:11:\"native_name\";s:8:\"Español\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/es_ES.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_VE\";a:8:{s:8:\"language\";s:5:\"es_VE\";s:7:\"version\";s:5:\"6.4.5\";s:7:\"updated\";s:19:\"2023-10-16 16:00:04\";s:12:\"english_name\";s:19:\"Spanish (Venezuela)\";s:11:\"native_name\";s:21:\"Español de Venezuela\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.4.5/es_VE.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_EC\";a:8:{s:8:\"language\";s:5:\"es_EC\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2023-04-21 13:32:10\";s:12:\"english_name\";s:17:\"Spanish (Ecuador)\";s:11:\"native_name\";s:19:\"Español de Ecuador\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.2.6/es_EC.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_DO\";a:8:{s:8:\"language\";s:5:\"es_DO\";s:7:\"version\";s:6:\"5.8.10\";s:7:\"updated\";s:19:\"2021-10-08 14:32:50\";s:12:\"english_name\";s:28:\"Spanish (Dominican Republic)\";s:11:\"native_name\";s:33:\"Español de República Dominicana\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/5.8.10/es_DO.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_UY\";a:8:{s:8:\"language\";s:5:\"es_UY\";s:7:\"version\";s:8:\"5.8-beta\";s:7:\"updated\";s:19:\"2021-03-31 18:33:26\";s:12:\"english_name\";s:17:\"Spanish (Uruguay)\";s:11:\"native_name\";s:19:\"Español de Uruguay\";s:7:\"package\";s:67:\"https://downloads.wordpress.org/translation/core/5.8-beta/es_UY.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_PR\";a:8:{s:8:\"language\";s:5:\"es_PR\";s:7:\"version\";s:6:\"5.4.16\";s:7:\"updated\";s:19:\"2020-04-29 15:36:59\";s:12:\"english_name\";s:21:\"Spanish (Puerto Rico)\";s:11:\"native_name\";s:23:\"Español de Puerto Rico\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/5.4.16/es_PR.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_GT\";a:8:{s:8:\"language\";s:5:\"es_GT\";s:7:\"version\";s:6:\"5.2.21\";s:7:\"updated\";s:19:\"2019-03-02 06:35:01\";s:12:\"english_name\";s:19:\"Spanish (Guatemala)\";s:11:\"native_name\";s:21:\"Español de Guatemala\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/5.2.21/es_GT.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_AR\";a:8:{s:8:\"language\";s:5:\"es_AR\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-05 15:56:22\";s:12:\"english_name\";s:19:\"Spanish (Argentina)\";s:11:\"native_name\";s:21:\"Español de Argentina\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/es_AR.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_CL\";a:8:{s:8:\"language\";s:5:\"es_CL\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-02 23:11:20\";s:12:\"english_name\";s:15:\"Spanish (Chile)\";s:11:\"native_name\";s:17:\"Español de Chile\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/es_CL.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"es_CO\";a:8:{s:8:\"language\";s:5:\"es_CO\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-01 20:26:01\";s:12:\"english_name\";s:18:\"Spanish (Colombia)\";s:11:\"native_name\";s:20:\"Español de Colombia\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/es_CO.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"es\";i:2;s:3:\"spa\";i:3;s:3:\"spa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:2:\"et\";a:8:{s:8:\"language\";s:2:\"et\";s:7:\"version\";s:5:\"6.5.5\";s:7:\"updated\";s:19:\"2024-06-06 09:50:37\";s:12:\"english_name\";s:8:\"Estonian\";s:11:\"native_name\";s:5:\"Eesti\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.5.5/et.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"et\";i:2;s:3:\"est\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Jätka\";}}s:2:\"eu\";a:8:{s:8:\"language\";s:2:\"eu\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-26 16:06:47\";s:12:\"english_name\";s:6:\"Basque\";s:11:\"native_name\";s:7:\"Euskara\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/eu.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"eu\";i:2;s:3:\"eus\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Jarraitu\";}}s:5:\"fa_IR\";a:8:{s:8:\"language\";s:5:\"fa_IR\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-01-30 10:07:14\";s:12:\"english_name\";s:7:\"Persian\";s:11:\"native_name\";s:10:\"فارسی\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/fa_IR.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"fa\";i:2;s:3:\"fas\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:10:\"ادامه\";}}s:5:\"fa_AF\";a:8:{s:8:\"language\";s:5:\"fa_AF\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-14 17:29:08\";s:12:\"english_name\";s:21:\"Persian (Afghanistan)\";s:11:\"native_name\";s:31:\"(فارسی (افغانستان\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/fa_AF.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"fa\";i:2;s:3:\"fas\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:10:\"ادامه\";}}s:2:\"fi\";a:8:{s:8:\"language\";s:2:\"fi\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-21 11:24:25\";s:12:\"english_name\";s:7:\"Finnish\";s:11:\"native_name\";s:5:\"Suomi\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/fi.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"fi\";i:2;s:3:\"fin\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:5:\"Jatka\";}}s:5:\"fr_CA\";a:8:{s:8:\"language\";s:5:\"fr_CA\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-12-12 22:29:22\";s:12:\"english_name\";s:15:\"French (Canada)\";s:11:\"native_name\";s:19:\"Français du Canada\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/fr_CA.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"fr\";i:2;s:3:\"fra\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuer\";}}s:5:\"fr_FR\";a:8:{s:8:\"language\";s:5:\"fr_FR\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-25 21:16:32\";s:12:\"english_name\";s:15:\"French (France)\";s:11:\"native_name\";s:9:\"Français\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/fr_FR.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"fr\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuer\";}}s:5:\"fr_BE\";a:8:{s:8:\"language\";s:5:\"fr_BE\";s:7:\"version\";s:5:\"6.5.5\";s:7:\"updated\";s:19:\"2024-02-01 23:56:53\";s:12:\"english_name\";s:16:\"French (Belgium)\";s:11:\"native_name\";s:21:\"Français de Belgique\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.5.5/fr_BE.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"fr\";i:2;s:3:\"fra\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuer\";}}s:3:\"fur\";a:8:{s:8:\"language\";s:3:\"fur\";s:7:\"version\";s:6:\"4.8.25\";s:7:\"updated\";s:19:\"2023-04-30 13:56:46\";s:12:\"english_name\";s:8:\"Friulian\";s:11:\"native_name\";s:8:\"Friulian\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/translation/core/4.8.25/fur.zip\";s:3:\"iso\";a:2:{i:2;s:3:\"fur\";i:3;s:3:\"fur\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:2:\"fy\";a:8:{s:8:\"language\";s:2:\"fy\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2022-12-25 12:53:23\";s:12:\"english_name\";s:7:\"Frisian\";s:11:\"native_name\";s:5:\"Frysk\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.2.6/fy.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"fy\";i:2;s:3:\"fry\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Trochgean\";}}s:2:\"gd\";a:8:{s:8:\"language\";s:2:\"gd\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-08-23 17:41:37\";s:12:\"english_name\";s:15:\"Scottish Gaelic\";s:11:\"native_name\";s:9:\"Gàidhlig\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/4.7.2/gd.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"gd\";i:2;s:3:\"gla\";i:3;s:3:\"gla\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:15:\"Lean air adhart\";}}s:5:\"gl_ES\";a:8:{s:8:\"language\";s:5:\"gl_ES\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-01-29 23:44:41\";s:12:\"english_name\";s:8:\"Galician\";s:11:\"native_name\";s:6:\"Galego\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/gl_ES.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"gl\";i:2;s:3:\"glg\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:2:\"gu\";a:8:{s:8:\"language\";s:2:\"gu\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-27 06:35:56\";s:12:\"english_name\";s:8:\"Gujarati\";s:11:\"native_name\";s:21:\"ગુજરાતી\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/gu.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"gu\";i:2;s:3:\"guj\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:25:\"ચાલુ રાખો\";}}s:3:\"haz\";a:8:{s:8:\"language\";s:3:\"haz\";s:7:\"version\";s:6:\"4.4.33\";s:7:\"updated\";s:19:\"2015-12-05 00:59:09\";s:12:\"english_name\";s:8:\"Hazaragi\";s:11:\"native_name\";s:15:\"هزاره گی\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/translation/core/4.4.33/haz.zip\";s:3:\"iso\";a:1:{i:3;s:3:\"haz\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:10:\"ادامه\";}}s:5:\"he_IL\";a:8:{s:8:\"language\";s:5:\"he_IL\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2024-05-04 18:39:24\";s:12:\"english_name\";s:6:\"Hebrew\";s:11:\"native_name\";s:16:\"עִבְרִית\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.2.6/he_IL.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"he\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"המשך\";}}s:5:\"hi_IN\";a:8:{s:8:\"language\";s:5:\"hi_IN\";s:7:\"version\";s:5:\"6.4.5\";s:7:\"updated\";s:19:\"2025-02-06 05:17:11\";s:12:\"english_name\";s:5:\"Hindi\";s:11:\"native_name\";s:18:\"हिन्दी\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.4.5/hi_IN.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"hi\";i:2;s:3:\"hin\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:25:\"जारी रखें\";}}s:2:\"hr\";a:8:{s:8:\"language\";s:2:\"hr\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-01 09:14:16\";s:12:\"english_name\";s:8:\"Croatian\";s:11:\"native_name\";s:8:\"Hrvatski\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/hr.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"hr\";i:2;s:3:\"hrv\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:7:\"Nastavi\";}}s:3:\"hsb\";a:8:{s:8:\"language\";s:3:\"hsb\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2023-02-22 17:37:32\";s:12:\"english_name\";s:13:\"Upper Sorbian\";s:11:\"native_name\";s:17:\"Hornjoserbšćina\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.2.6/hsb.zip\";s:3:\"iso\";a:2:{i:2;s:3:\"hsb\";i:3;s:3:\"hsb\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:4:\"Dale\";}}s:5:\"hu_HU\";a:8:{s:8:\"language\";s:5:\"hu_HU\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-13 12:24:50\";s:12:\"english_name\";s:9:\"Hungarian\";s:11:\"native_name\";s:6:\"Magyar\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/hu_HU.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"hu\";i:2;s:3:\"hun\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:10:\"Folytatás\";}}s:2:\"hy\";a:8:{s:8:\"language\";s:2:\"hy\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-12-03 16:21:10\";s:12:\"english_name\";s:8:\"Armenian\";s:11:\"native_name\";s:14:\"Հայերեն\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/4.7.2/hy.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"hy\";i:2;s:3:\"hye\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:20:\"Շարունակել\";}}s:5:\"id_ID\";a:8:{s:8:\"language\";s:5:\"id_ID\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-01-31 11:29:26\";s:12:\"english_name\";s:10:\"Indonesian\";s:11:\"native_name\";s:16:\"Bahasa Indonesia\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/id_ID.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"id\";i:2;s:3:\"ind\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Lanjutkan\";}}s:5:\"is_IS\";a:8:{s:8:\"language\";s:5:\"is_IS\";s:7:\"version\";s:6:\"4.9.26\";s:7:\"updated\";s:19:\"2018-12-11 10:40:02\";s:12:\"english_name\";s:9:\"Icelandic\";s:11:\"native_name\";s:9:\"Íslenska\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/4.9.26/is_IS.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"is\";i:2;s:3:\"isl\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Áfram\";}}s:5:\"it_IT\";a:8:{s:8:\"language\";s:5:\"it_IT\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-20 11:01:52\";s:12:\"english_name\";s:7:\"Italian\";s:11:\"native_name\";s:8:\"Italiano\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/it_IT.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"it\";i:2;s:3:\"ita\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continua\";}}s:2:\"ja\";a:8:{s:8:\"language\";s:2:\"ja\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-07 13:30:47\";s:12:\"english_name\";s:8:\"Japanese\";s:11:\"native_name\";s:9:\"日本語\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/ja.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"ja\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"次へ\";}}s:5:\"jv_ID\";a:8:{s:8:\"language\";s:5:\"jv_ID\";s:7:\"version\";s:6:\"4.9.26\";s:7:\"updated\";s:19:\"2019-02-16 23:58:56\";s:12:\"english_name\";s:8:\"Javanese\";s:11:\"native_name\";s:9:\"Basa Jawa\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/4.9.26/jv_ID.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"jv\";i:2;s:3:\"jav\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Nerusaké\";}}s:5:\"ka_GE\";a:8:{s:8:\"language\";s:5:\"ka_GE\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-01 06:53:56\";s:12:\"english_name\";s:8:\"Georgian\";s:11:\"native_name\";s:21:\"ქართული\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/ka_GE.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ka\";i:2;s:3:\"kat\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:30:\"გაგრძელება\";}}s:3:\"kab\";a:8:{s:8:\"language\";s:3:\"kab\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2023-07-05 11:40:39\";s:12:\"english_name\";s:6:\"Kabyle\";s:11:\"native_name\";s:9:\"Taqbaylit\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.2.6/kab.zip\";s:3:\"iso\";a:2:{i:2;s:3:\"kab\";i:3;s:3:\"kab\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Kemmel\";}}s:2:\"kk\";a:8:{s:8:\"language\";s:2:\"kk\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-07-18 02:49:24\";s:12:\"english_name\";s:6:\"Kazakh\";s:11:\"native_name\";s:19:\"Қазақ тілі\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/kk.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"kk\";i:2;s:3:\"kaz\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:20:\"Жалғастыру\";}}s:2:\"km\";a:8:{s:8:\"language\";s:2:\"km\";s:7:\"version\";s:6:\"5.2.21\";s:7:\"updated\";s:19:\"2019-06-10 16:18:28\";s:12:\"english_name\";s:5:\"Khmer\";s:11:\"native_name\";s:27:\"ភាសាខ្មែរ\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/5.2.21/km.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"km\";i:2;s:3:\"khm\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:12:\"បន្ត\";}}s:2:\"kn\";a:8:{s:8:\"language\";s:2:\"kn\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-11 19:32:39\";s:12:\"english_name\";s:7:\"Kannada\";s:11:\"native_name\";s:15:\"ಕನ್ನಡ\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/kn.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"kn\";i:2;s:3:\"kan\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:30:\"ಮುಂದುವರಿಸು\";}}s:5:\"ko_KR\";a:8:{s:8:\"language\";s:5:\"ko_KR\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-27 00:11:53\";s:12:\"english_name\";s:6:\"Korean\";s:11:\"native_name\";s:9:\"한국어\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/ko_KR.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ko\";i:2;s:3:\"kor\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"계속\";}}s:3:\"ckb\";a:8:{s:8:\"language\";s:3:\"ckb\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-22 19:22:33\";s:12:\"english_name\";s:16:\"Kurdish (Sorani)\";s:11:\"native_name\";s:13:\"كوردی‎\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.7.2/ckb.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ku\";i:3;s:3:\"ckb\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:30:\"به‌رده‌وام به‌\";}}s:3:\"kir\";a:8:{s:8:\"language\";s:3:\"kir\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-25 04:09:28\";s:12:\"english_name\";s:6:\"Kyrgyz\";s:11:\"native_name\";s:16:\"Кыргызча\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.7.2/kir.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"ky\";i:2;s:3:\"kir\";i:3;s:3:\"kir\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:14:\"Улантуу\";}}s:2:\"lo\";a:8:{s:8:\"language\";s:2:\"lo\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-11-12 09:59:23\";s:12:\"english_name\";s:3:\"Lao\";s:11:\"native_name\";s:21:\"ພາສາລາວ\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/4.7.2/lo.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"lo\";i:2;s:3:\"lao\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:18:\"ຕໍ່​ໄປ\";}}s:5:\"lt_LT\";a:8:{s:8:\"language\";s:5:\"lt_LT\";s:7:\"version\";s:5:\"6.5.5\";s:7:\"updated\";s:19:\"2024-06-13 13:11:03\";s:12:\"english_name\";s:10:\"Lithuanian\";s:11:\"native_name\";s:15:\"Lietuvių kalba\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.5.5/lt_LT.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"lt\";i:2;s:3:\"lit\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Tęsti\";}}s:2:\"lv\";a:8:{s:8:\"language\";s:2:\"lv\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-13 10:34:12\";s:12:\"english_name\";s:7:\"Latvian\";s:11:\"native_name\";s:16:\"Latviešu valoda\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/lv.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"lv\";i:2;s:3:\"lav\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Turpināt\";}}s:5:\"mk_MK\";a:8:{s:8:\"language\";s:5:\"mk_MK\";s:7:\"version\";s:5:\"6.0.9\";s:7:\"updated\";s:19:\"2022-10-01 09:23:52\";s:12:\"english_name\";s:10:\"Macedonian\";s:11:\"native_name\";s:31:\"Македонски јазик\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.0.9/mk_MK.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"mk\";i:2;s:3:\"mkd\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:16:\"Продолжи\";}}s:5:\"ml_IN\";a:8:{s:8:\"language\";s:5:\"ml_IN\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-20 16:41:38\";s:12:\"english_name\";s:9:\"Malayalam\";s:11:\"native_name\";s:18:\"മലയാളം\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/ml_IN.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ml\";i:2;s:3:\"mal\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:18:\"തുടരുക\";}}s:2:\"mn\";a:8:{s:8:\"language\";s:2:\"mn\";s:7:\"version\";s:5:\"6.5.5\";s:7:\"updated\";s:19:\"2024-06-20 17:22:06\";s:12:\"english_name\";s:9:\"Mongolian\";s:11:\"native_name\";s:12:\"Монгол\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.5.5/mn.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"mn\";i:2;s:3:\"mon\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:2:\"mr\";a:8:{s:8:\"language\";s:2:\"mr\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-15 06:59:18\";s:12:\"english_name\";s:7:\"Marathi\";s:11:\"native_name\";s:15:\"मराठी\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/mr.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"mr\";i:2;s:3:\"mar\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:25:\"सुरु ठेवा\";}}s:5:\"ms_MY\";a:8:{s:8:\"language\";s:5:\"ms_MY\";s:7:\"version\";s:6:\"5.5.15\";s:7:\"updated\";s:19:\"2022-03-11 13:52:22\";s:12:\"english_name\";s:5:\"Malay\";s:11:\"native_name\";s:13:\"Bahasa Melayu\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/5.5.15/ms_MY.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ms\";i:2;s:3:\"msa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Teruskan\";}}s:5:\"my_MM\";a:8:{s:8:\"language\";s:5:\"my_MM\";s:7:\"version\";s:6:\"4.2.38\";s:7:\"updated\";s:19:\"2017-12-26 11:57:10\";s:12:\"english_name\";s:17:\"Myanmar (Burmese)\";s:11:\"native_name\";s:15:\"ဗမာစာ\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/4.2.38/my_MM.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"my\";i:2;s:3:\"mya\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:54:\"ဆက်လက်လုပ်ဆောင်ပါ။\";}}s:5:\"nb_NO\";a:8:{s:8:\"language\";s:5:\"nb_NO\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-01 17:56:33\";s:12:\"english_name\";s:19:\"Norwegian (Bokmål)\";s:11:\"native_name\";s:13:\"Norsk bokmål\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/nb_NO.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"nb\";i:2;s:3:\"nob\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Fortsett\";}}s:5:\"ne_NP\";a:8:{s:8:\"language\";s:5:\"ne_NP\";s:7:\"version\";s:5:\"6.6.2\";s:7:\"updated\";s:19:\"2024-08-30 11:32:23\";s:12:\"english_name\";s:6:\"Nepali\";s:11:\"native_name\";s:18:\"नेपाली\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.6.2/ne_NP.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ne\";i:2;s:3:\"nep\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:43:\"जारी राख्नुहोस्\";}}s:5:\"nl_BE\";a:8:{s:8:\"language\";s:5:\"nl_BE\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-20 09:36:13\";s:12:\"english_name\";s:15:\"Dutch (Belgium)\";s:11:\"native_name\";s:20:\"Nederlands (België)\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/nl_BE.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"nl\";i:2;s:3:\"nld\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Doorgaan\";}}s:12:\"nl_NL_formal\";a:8:{s:8:\"language\";s:12:\"nl_NL_formal\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-25 20:59:35\";s:12:\"english_name\";s:14:\"Dutch (Formal)\";s:11:\"native_name\";s:20:\"Nederlands (Formeel)\";s:7:\"package\";s:71:\"https://downloads.wordpress.org/translation/core/6.7.2/nl_NL_formal.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"nl\";i:2;s:3:\"nld\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Doorgaan\";}}s:5:\"nl_NL\";a:8:{s:8:\"language\";s:5:\"nl_NL\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-30 20:03:24\";s:12:\"english_name\";s:5:\"Dutch\";s:11:\"native_name\";s:10:\"Nederlands\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/nl_NL.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"nl\";i:2;s:3:\"nld\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Doorgaan\";}}s:5:\"nn_NO\";a:8:{s:8:\"language\";s:5:\"nn_NO\";s:7:\"version\";s:8:\"5.8-beta\";s:7:\"updated\";s:19:\"2021-03-18 10:59:16\";s:12:\"english_name\";s:19:\"Norwegian (Nynorsk)\";s:11:\"native_name\";s:13:\"Norsk nynorsk\";s:7:\"package\";s:67:\"https://downloads.wordpress.org/translation/core/5.8-beta/nn_NO.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"nn\";i:2;s:3:\"nno\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Hald fram\";}}s:3:\"oci\";a:8:{s:8:\"language\";s:3:\"oci\";s:7:\"version\";s:6:\"4.8.25\";s:7:\"updated\";s:19:\"2017-08-25 10:03:08\";s:12:\"english_name\";s:7:\"Occitan\";s:11:\"native_name\";s:7:\"Occitan\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/translation/core/4.8.25/oci.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"oc\";i:2;s:3:\"oci\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Contunhar\";}}s:5:\"pa_IN\";a:8:{s:8:\"language\";s:5:\"pa_IN\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2017-01-16 05:19:43\";s:12:\"english_name\";s:15:\"Panjabi (India)\";s:11:\"native_name\";s:18:\"ਪੰਜਾਬੀ\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/4.7.2/pa_IN.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"pa\";i:2;s:3:\"pan\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:25:\"ਜਾਰੀ ਰੱਖੋ\";}}s:5:\"pl_PL\";a:8:{s:8:\"language\";s:5:\"pl_PL\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-15 16:20:12\";s:12:\"english_name\";s:6:\"Polish\";s:11:\"native_name\";s:6:\"Polski\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/pl_PL.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"pl\";i:2;s:3:\"pol\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Kontynuuj\";}}s:2:\"ps\";a:8:{s:8:\"language\";s:2:\"ps\";s:7:\"version\";s:6:\"4.3.34\";s:7:\"updated\";s:19:\"2015-12-02 21:41:29\";s:12:\"english_name\";s:6:\"Pashto\";s:11:\"native_name\";s:8:\"پښتو\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.3.34/ps.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ps\";i:2;s:3:\"pus\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:19:\"دوام ورکړه\";}}s:10:\"pt_PT_ao90\";a:8:{s:8:\"language\";s:10:\"pt_PT_ao90\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-11-22 09:42:36\";s:12:\"english_name\";s:27:\"Portuguese (Portugal, AO90)\";s:11:\"native_name\";s:17:\"Português (AO90)\";s:7:\"package\";s:69:\"https://downloads.wordpress.org/translation/core/6.7.2/pt_PT_ao90.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"pt\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"pt_BR\";a:8:{s:8:\"language\";s:5:\"pt_BR\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-25 12:07:35\";s:12:\"english_name\";s:19:\"Portuguese (Brazil)\";s:11:\"native_name\";s:20:\"Português do Brasil\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/pt_BR.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"pt\";i:2;s:3:\"por\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"pt_PT\";a:8:{s:8:\"language\";s:5:\"pt_PT\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-06 01:20:04\";s:12:\"english_name\";s:21:\"Portuguese (Portugal)\";s:11:\"native_name\";s:10:\"Português\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/pt_PT.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"pt\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:5:\"pt_AO\";a:8:{s:8:\"language\";s:5:\"pt_AO\";s:7:\"version\";s:5:\"6.4.5\";s:7:\"updated\";s:19:\"2023-08-21 12:15:00\";s:12:\"english_name\";s:19:\"Portuguese (Angola)\";s:11:\"native_name\";s:20:\"Português de Angola\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.4.5/pt_AO.zip\";s:3:\"iso\";a:1:{i:1;s:2:\"pt\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuar\";}}s:3:\"rhg\";a:8:{s:8:\"language\";s:3:\"rhg\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-03-16 13:03:18\";s:12:\"english_name\";s:8:\"Rohingya\";s:11:\"native_name\";s:8:\"Ruáinga\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.7.2/rhg.zip\";s:3:\"iso\";a:1:{i:3;s:3:\"rhg\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:5:\"ro_RO\";a:8:{s:8:\"language\";s:5:\"ro_RO\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-31 10:58:26\";s:12:\"english_name\";s:8:\"Romanian\";s:11:\"native_name\";s:8:\"Română\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/ro_RO.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ro\";i:2;s:3:\"ron\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Continuă\";}}s:5:\"ru_RU\";a:8:{s:8:\"language\";s:5:\"ru_RU\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-24 17:37:53\";s:12:\"english_name\";s:7:\"Russian\";s:11:\"native_name\";s:14:\"Русский\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/ru_RU.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ru\";i:2;s:3:\"rus\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:20:\"Продолжить\";}}s:3:\"sah\";a:8:{s:8:\"language\";s:3:\"sah\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2017-01-21 02:06:41\";s:12:\"english_name\";s:5:\"Sakha\";s:11:\"native_name\";s:14:\"Сахалыы\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.7.2/sah.zip\";s:3:\"iso\";a:2:{i:2;s:3:\"sah\";i:3;s:3:\"sah\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:12:\"Салҕаа\";}}s:3:\"snd\";a:8:{s:8:\"language\";s:3:\"snd\";s:7:\"version\";s:6:\"5.4.16\";s:7:\"updated\";s:19:\"2020-07-07 01:53:37\";s:12:\"english_name\";s:6:\"Sindhi\";s:11:\"native_name\";s:8:\"سنڌي\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/translation/core/5.4.16/snd.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"sd\";i:2;s:3:\"snd\";i:3;s:3:\"snd\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:15:\"اڳتي هلو\";}}s:5:\"si_LK\";a:8:{s:8:\"language\";s:5:\"si_LK\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-11-12 06:00:52\";s:12:\"english_name\";s:7:\"Sinhala\";s:11:\"native_name\";s:15:\"සිංහල\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/4.7.2/si_LK.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"si\";i:2;s:3:\"sin\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:44:\"දිගටම කරගෙන යන්න\";}}s:5:\"sk_SK\";a:8:{s:8:\"language\";s:5:\"sk_SK\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-10 11:39:57\";s:12:\"english_name\";s:6:\"Slovak\";s:11:\"native_name\";s:11:\"Slovenčina\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/sk_SK.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"sk\";i:2;s:3:\"slk\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:12:\"Pokračovať\";}}s:3:\"skr\";a:8:{s:8:\"language\";s:3:\"skr\";s:7:\"version\";s:5:\"6.6.2\";s:7:\"updated\";s:19:\"2024-09-21 09:44:08\";s:12:\"english_name\";s:7:\"Saraiki\";s:11:\"native_name\";s:14:\"سرائیکی\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.6.2/skr.zip\";s:3:\"iso\";a:1:{i:3;s:3:\"skr\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:17:\"جاری رکھو\";}}s:5:\"sl_SI\";a:8:{s:8:\"language\";s:5:\"sl_SI\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-08-30 07:14:35\";s:12:\"english_name\";s:9:\"Slovenian\";s:11:\"native_name\";s:13:\"Slovenščina\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/sl_SI.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"sl\";i:2;s:3:\"slv\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Nadaljuj\";}}s:2:\"sq\";a:8:{s:8:\"language\";s:2:\"sq\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-01-30 10:26:38\";s:12:\"english_name\";s:8:\"Albanian\";s:11:\"native_name\";s:5:\"Shqip\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/sq.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"sq\";i:2;s:3:\"sqi\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"Vazhdo\";}}s:5:\"sr_RS\";a:8:{s:8:\"language\";s:5:\"sr_RS\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2024-09-20 22:15:56\";s:12:\"english_name\";s:7:\"Serbian\";s:11:\"native_name\";s:23:\"Српски језик\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/sr_RS.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"sr\";i:2;s:3:\"srp\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:14:\"Настави\";}}s:5:\"sv_SE\";a:8:{s:8:\"language\";s:5:\"sv_SE\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-03 17:00:50\";s:12:\"english_name\";s:7:\"Swedish\";s:11:\"native_name\";s:7:\"Svenska\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/sv_SE.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"sv\";i:2;s:3:\"swe\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:9:\"Fortsätt\";}}s:2:\"sw\";a:8:{s:8:\"language\";s:2:\"sw\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-02 07:29:05\";s:12:\"english_name\";s:7:\"Swahili\";s:11:\"native_name\";s:9:\"Kiswahili\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/sw.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"sw\";i:2;s:3:\"swa\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:7:\"Endelea\";}}s:3:\"szl\";a:8:{s:8:\"language\";s:3:\"szl\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-09-24 19:58:14\";s:12:\"english_name\";s:8:\"Silesian\";s:11:\"native_name\";s:17:\"Ślōnskŏ gŏdka\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.7.2/szl.zip\";s:3:\"iso\";a:1:{i:3;s:3:\"szl\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:13:\"Kōntynuować\";}}s:5:\"ta_IN\";a:8:{s:8:\"language\";s:5:\"ta_IN\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2017-01-27 03:22:47\";s:12:\"english_name\";s:5:\"Tamil\";s:11:\"native_name\";s:15:\"தமிழ்\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/4.7.2/ta_IN.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ta\";i:2;s:3:\"tam\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:24:\"தொடரவும்\";}}s:5:\"ta_LK\";a:8:{s:8:\"language\";s:5:\"ta_LK\";s:7:\"version\";s:6:\"4.2.38\";s:7:\"updated\";s:19:\"2015-12-03 01:07:44\";s:12:\"english_name\";s:17:\"Tamil (Sri Lanka)\";s:11:\"native_name\";s:15:\"தமிழ்\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/4.2.38/ta_LK.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ta\";i:2;s:3:\"tam\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:18:\"தொடர்க\";}}s:2:\"te\";a:8:{s:8:\"language\";s:2:\"te\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2017-01-26 15:47:39\";s:12:\"english_name\";s:6:\"Telugu\";s:11:\"native_name\";s:18:\"తెలుగు\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/4.7.2/te.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"te\";i:2;s:3:\"tel\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:30:\"కొనసాగించు\";}}s:2:\"th\";a:8:{s:8:\"language\";s:2:\"th\";s:7:\"version\";s:6:\"5.8.10\";s:7:\"updated\";s:19:\"2022-06-08 04:30:30\";s:12:\"english_name\";s:4:\"Thai\";s:11:\"native_name\";s:9:\"ไทย\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/5.8.10/th.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"th\";i:2;s:3:\"tha\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:15:\"ต่อไป\";}}s:2:\"tl\";a:8:{s:8:\"language\";s:2:\"tl\";s:7:\"version\";s:6:\"4.8.25\";s:7:\"updated\";s:19:\"2017-09-30 09:04:29\";s:12:\"english_name\";s:7:\"Tagalog\";s:11:\"native_name\";s:7:\"Tagalog\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.8.25/tl.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"tl\";i:2;s:3:\"tgl\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:10:\"Magpatuloy\";}}s:5:\"tr_TR\";a:8:{s:8:\"language\";s:5:\"tr_TR\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-14 00:21:51\";s:12:\"english_name\";s:7:\"Turkish\";s:11:\"native_name\";s:8:\"Türkçe\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/tr_TR.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"tr\";i:2;s:3:\"tur\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:5:\"Devam\";}}s:5:\"tt_RU\";a:8:{s:8:\"language\";s:5:\"tt_RU\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-11-20 20:20:50\";s:12:\"english_name\";s:5:\"Tatar\";s:11:\"native_name\";s:19:\"Татар теле\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/4.7.2/tt_RU.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"tt\";i:2;s:3:\"tat\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:17:\"дәвам итү\";}}s:3:\"tah\";a:8:{s:8:\"language\";s:3:\"tah\";s:7:\"version\";s:5:\"4.7.2\";s:7:\"updated\";s:19:\"2016-03-06 18:39:39\";s:12:\"english_name\";s:8:\"Tahitian\";s:11:\"native_name\";s:10:\"Reo Tahiti\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/4.7.2/tah.zip\";s:3:\"iso\";a:3:{i:1;s:2:\"ty\";i:2;s:3:\"tah\";i:3;s:3:\"tah\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:8:\"Continue\";}}s:5:\"ug_CN\";a:8:{s:8:\"language\";s:5:\"ug_CN\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-03 01:12:45\";s:12:\"english_name\";s:6:\"Uighur\";s:11:\"native_name\";s:16:\"ئۇيغۇرچە\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/ug_CN.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ug\";i:2;s:3:\"uig\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:26:\"داۋاملاشتۇرۇش\";}}s:2:\"uk\";a:8:{s:8:\"language\";s:2:\"uk\";s:7:\"version\";s:5:\"6.4.5\";s:7:\"updated\";s:19:\"2024-03-06 18:52:07\";s:12:\"english_name\";s:9:\"Ukrainian\";s:11:\"native_name\";s:20:\"Українська\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.4.5/uk.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"uk\";i:2;s:3:\"ukr\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:20:\"Продовжити\";}}s:2:\"ur\";a:8:{s:8:\"language\";s:2:\"ur\";s:7:\"version\";s:6:\"5.4.16\";s:7:\"updated\";s:19:\"2020-04-09 11:17:33\";s:12:\"english_name\";s:4:\"Urdu\";s:11:\"native_name\";s:8:\"اردو\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/5.4.16/ur.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"ur\";i:2;s:3:\"urd\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:19:\"جاری رکھیں\";}}s:5:\"uz_UZ\";a:8:{s:8:\"language\";s:5:\"uz_UZ\";s:7:\"version\";s:8:\"5.8-beta\";s:7:\"updated\";s:19:\"2021-02-28 12:02:22\";s:12:\"english_name\";s:5:\"Uzbek\";s:11:\"native_name\";s:11:\"O‘zbekcha\";s:7:\"package\";s:67:\"https://downloads.wordpress.org/translation/core/5.8-beta/uz_UZ.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"uz\";i:2;s:3:\"uzb\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:11:\"Davom etish\";}}s:2:\"vi\";a:8:{s:8:\"language\";s:2:\"vi\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-23 02:18:04\";s:12:\"english_name\";s:10:\"Vietnamese\";s:11:\"native_name\";s:14:\"Tiếng Việt\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/translation/core/6.7.2/vi.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"vi\";i:2;s:3:\"vie\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:12:\"Tiếp tục\";}}s:5:\"zh_TW\";a:8:{s:8:\"language\";s:5:\"zh_TW\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-02-12 08:54:01\";s:12:\"english_name\";s:16:\"Chinese (Taiwan)\";s:11:\"native_name\";s:12:\"繁體中文\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/zh_TW.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"zh\";i:2;s:3:\"zho\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"繼續\";}}s:5:\"zh_CN\";a:8:{s:8:\"language\";s:5:\"zh_CN\";s:7:\"version\";s:5:\"6.7.2\";s:7:\"updated\";s:19:\"2025-03-26 06:53:42\";s:12:\"english_name\";s:15:\"Chinese (China)\";s:11:\"native_name\";s:12:\"简体中文\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.7.2/zh_CN.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"zh\";i:2;s:3:\"zho\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"继续\";}}s:5:\"zh_HK\";a:8:{s:8:\"language\";s:5:\"zh_HK\";s:7:\"version\";s:5:\"6.2.6\";s:7:\"updated\";s:19:\"2022-07-15 15:25:03\";s:12:\"english_name\";s:19:\"Chinese (Hong Kong)\";s:11:\"native_name\";s:12:\"香港中文\";s:7:\"package\";s:64:\"https://downloads.wordpress.org/translation/core/6.2.6/zh_HK.zip\";s:3:\"iso\";a:2:{i:1;s:2:\"zh\";i:2;s:3:\"zho\";}s:7:\"strings\";a:1:{s:8:\"continue\";s:6:\"繼續\";}}}'),(195,1,'_site_transient_timeout_theme_roots','1743503602'),(196,1,'_site_transient_theme_roots','a:15:{s:12:\"twentyeleven\";s:7:\"/themes\";s:13:\"twentyfifteen\";s:7:\"/themes\";s:14:\"twentyfourteen\";s:7:\"/themes\";s:14:\"twentynineteen\";s:7:\"/themes\";s:15:\"twentyseventeen\";s:7:\"/themes\";s:13:\"twentysixteen\";s:7:\"/themes\";s:9:\"twentyten\";s:7:\"/themes\";s:14:\"twentythirteen\";s:7:\"/themes\";s:12:\"twentytwelve\";s:7:\"/themes\";s:12:\"twentytwenty\";s:7:\"/themes\";s:16:\"twentytwentyfive\";s:7:\"/themes\";s:16:\"twentytwentyfour\";s:7:\"/themes\";s:15:\"twentytwentyone\";s:7:\"/themes\";s:17:\"twentytwentythree\";s:7:\"/themes\";s:15:\"twentytwentytwo\";s:7:\"/themes\";}'),(197,1,'_site_transient_timeout_community-events-bf177db4cdd8a3d4c99b4463854de2bd','1743545003'),(198,1,'_site_transient_community-events-bf177db4cdd8a3d4c99b4463854de2bd','a:4:{s:9:\"sandboxed\";b:0;s:5:\"error\";N;s:8:\"location\";a:1:{s:2:\"ip\";s:10:\"172.19.0.0\";}s:6:\"events\";a:0:{}}'),(209,1,'_site_transient_wp_theme_files_patterns-b24c4b64a1fe6f9f73313f730ddfc1cf','a:2:{s:7:\"version\";s:3:\"1.0\";s:8:\"patterns\";a:98:{s:21:\"banner-about-book.php\";a:4:{s:5:\"title\";s:28:\"Banner with book description\";s:4:\"slug\";s:34:\"twentytwentyfive/banner-about-book\";s:11:\"description\";s:66:\"Banner with book description and accompanying image for promotion.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:28:\"banner-cover-big-heading.php\";a:4:{s:5:\"title\";s:22:\"Cover with big heading\";s:4:\"slug\";s:41:\"twentytwentyfive/banner-cover-big-heading\";s:11:\"description\";s:82:\"A full-width cover section with a large background image and an oversized heading.\";s:10:\"categories\";a:3:{i:0;s:6:\"banner\";i:1;s:5:\"about\";i:2;s:8:\"featured\";}}s:22:\"banner-intro-image.php\";a:4:{s:5:\"title\";s:49:\"Short heading and paragraph and image on the left\";s:4:\"slug\";s:35:\"twentytwentyfive/banner-intro-image\";s:11:\"description\";s:68:\"A Intro pattern with Short heading, paragraph and image on the left.\";s:10:\"categories\";a:2:{i:0;s:6:\"banner\";i:1;s:8:\"featured\";}}s:16:\"banner-intro.php\";a:4:{s:5:\"title\";s:35:\"Intro with left-aligned description\";s:4:\"slug\";s:29:\"twentytwentyfive/banner-intro\";s:11:\"description\";s:66:\"A large left-aligned heading with a brand name emphasized in bold.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:17:\"banner-poster.php\";a:4:{s:5:\"title\";s:19:\"Poster-like section\";s:4:\"slug\";s:30:\"twentytwentyfive/banner-poster\";s:11:\"description\";s:78:\"A section that can be used as a banner or a landing page to announce an event.\";s:10:\"categories\";a:2:{i:0;s:6:\"banner\";i:1;s:5:\"media\";}}s:43:\"banner-with-description-and-images-grid.php\";a:4:{s:5:\"title\";s:39:\"Banner with description and images grid\";s:4:\"slug\";s:47:\"twentytwentyfive/banner-description-images-grid\";s:11:\"description\";s:75:\"A banner with a short paragraph, and two images displayed in a grid layout.\";s:10:\"categories\";a:2:{i:0;s:6:\"banner\";i:1;s:8:\"featured\";}}s:18:\"binding-format.php\";a:4:{s:5:\"title\";s:16:\"Post format name\";s:4:\"slug\";s:31:\"twentytwentyfive/binding-format\";s:11:\"description\";s:75:\"Prints the name of the post format with the help of the Block Bindings API.\";s:10:\"categories\";a:1:{i:0;s:28:\"twentytwentyfive_post-format\";}}s:12:\"comments.php\";a:5:{s:5:\"title\";s:8:\"Comments\";s:4:\"slug\";s:25:\"twentytwentyfive/comments\";s:11:\"description\";s:63:\"Comments area with comments list, pagination, and comment form.\";s:10:\"categories\";a:1:{i:0;s:4:\"text\";}s:10:\"blockTypes\";a:1:{i:0;s:13:\"core/comments\";}}s:32:\"contact-centered-social-link.php\";a:5:{s:5:\"title\";s:30:\"Centered link and social links\";s:4:\"slug\";s:45:\"twentytwentyfive/contact-centered-social-link\";s:11:\"description\";s:73:\"Centered contact section with a prominent message and social media links.\";s:10:\"categories\";a:1:{i:0;s:7:\"contact\";}s:8:\"keywords\";a:3:{i:0;s:7:\"contact\";i:1;s:3:\"faq\";i:2;s:9:\"questions\";}}s:26:\"contact-info-locations.php\";a:6:{s:5:\"title\";s:27:\"Contact, info and locations\";s:4:\"slug\";s:39:\"twentytwentyfive/contact-info-locations\";s:11:\"description\";s:78:\"Contact section with social media links, email, and multiple location details.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:7:\"contact\";}s:8:\"keywords\";a:2:{i:0;s:7:\"contact\";i:1;s:8:\"location\";}}s:29:\"contact-location-and-link.php\";a:4:{s:5:\"title\";s:25:\"Contact location and link\";s:4:\"slug\";s:42:\"twentytwentyfive/contact-location-and-link\";s:11:\"description\";s:89:\"Contact section with a location address, a directions link, and an image of the location.\";s:10:\"categories\";a:2:{i:0;s:7:\"contact\";i:1;s:8:\"featured\";}}s:18:\"cta-book-links.php\";a:4:{s:5:\"title\";s:30:\"Call to action with book links\";s:4:\"slug\";s:31:\"twentytwentyfive/cta-book-links\";s:11:\"description\";s:74:\"A call to action section with links to get the book in different websites.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:22:\"cta-book-locations.php\";a:4:{s:5:\"title\";s:29:\"Call to action with locations\";s:4:\"slug\";s:35:\"twentytwentyfive/cta-book-locations\";s:11:\"description\";s:82:\"A call to action section with links to get the book in the most popular locations.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:24:\"cta-centered-heading.php\";a:4:{s:5:\"title\";s:16:\"Centered heading\";s:4:\"slug\";s:37:\"twentytwentyfive/cta-centered-heading\";s:11:\"description\";s:53:\"A hero with a centered heading, paragraph and button.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:19:\"cta-events-list.php\";a:4:{s:5:\"title\";s:11:\"Events list\";s:4:\"slug\";s:32:\"twentytwentyfive/cta-events-list\";s:11:\"description\";s:37:\"A list of events with call to action.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:26:\"cta-grid-products-link.php\";a:5:{s:5:\"title\";s:54:\"Call to action with grid layout with products and link\";s:4:\"slug\";s:39:\"twentytwentyfive/cta-grid-products-link\";s:11:\"description\";s:42:\"A call to action featuring product images.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:14:\"call-to-action\";i:1;s:8:\"featured\";}}s:22:\"cta-heading-search.php\";a:4:{s:5:\"title\";s:23:\"Heading and search form\";s:4:\"slug\";s:35:\"twentytwentyfive/cta-heading-search\";s:11:\"description\";s:54:\"Large heading with a search form for quick navigation.\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:18:\"cta-newsletter.php\";a:5:{s:5:\"title\";s:18:\"Newsletter sign-up\";s:4:\"slug\";s:31:\"twentytwentyfive/cta-newsletter\";s:11:\"description\";s:0:\"\";s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}s:8:\"keywords\";a:2:{i:0;s:14:\"call-to-action\";i:1;s:10:\"newsletter\";}}s:15:\"event-3-col.php\";a:5:{s:5:\"title\";s:46:\"Events, 3 columns with event images and titles\";s:4:\"slug\";s:28:\"twentytwentyfive/event-3-col\";s:11:\"description\";s:95:\"A header with title and text and three columns that show 3 events with their images and titles.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}s:8:\"keywords\";a:3:{i:0;s:6:\"events\";i:1;s:7:\"columns\";i:2;s:6:\"images\";}}s:14:\"event-rsvp.php\";a:7:{s:5:\"title\";s:10:\"Event RSVP\";s:4:\"slug\";s:27:\"twentytwentyfive/event-rsvp\";s:11:\"description\";s:64:\"RSVP for an upcoming event with a cover image and event details.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}s:8:\"keywords\";a:3:{i:0;s:14:\"call-to-action\";i:1;s:4:\"rsvp\";i:2;s:5:\"event\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:18:\"event-schedule.php\";a:5:{s:5:\"title\";s:14:\"Event schedule\";s:4:\"slug\";s:31:\"twentytwentyfive/event-schedule\";s:11:\"description\";s:54:\"A section with specified dates and times for an event.\";s:10:\"categories\";a:1:{i:0;s:5:\"about\";}s:8:\"keywords\";a:4:{i:0;s:6:\"events\";i:1;s:6:\"agenda\";i:2;s:8:\"schedule\";i:3;s:8:\"lectures\";}}s:19:\"footer-centered.php\";a:5:{s:5:\"title\";s:15:\"Centered footer\";s:4:\"slug\";s:32:\"twentytwentyfive/footer-centered\";s:11:\"description\";s:44:\"Footer with centered site title and tagline.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:18:\"footer-columns.php\";a:5:{s:5:\"title\";s:19:\"Footer with columns\";s:4:\"slug\";s:31:\"twentytwentyfive/footer-columns\";s:11:\"description\";s:45:\"Footer columns with title, tagline and links.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:21:\"footer-newsletter.php\";a:5:{s:5:\"title\";s:29:\"Footer with newsletter signup\";s:4:\"slug\";s:34:\"twentytwentyfive/footer-newsletter\";s:11:\"description\";s:51:\"Footer with large site title and newsletter signup.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:17:\"footer-social.php\";a:5:{s:5:\"title\";s:33:\"Centered footer with social links\";s:4:\"slug\";s:30:\"twentytwentyfive/footer-social\";s:11:\"description\";s:49:\"Footer with centered site title and social links.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:10:\"footer.php\";a:5:{s:5:\"title\";s:6:\"Footer\";s:4:\"slug\";s:23:\"twentytwentyfive/footer\";s:11:\"description\";s:51:\"Footer columns with logo, title, tagline and links.\";s:10:\"categories\";a:1:{i:0;s:6:\"footer\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/footer\";}}s:16:\"format-audio.php\";a:4:{s:5:\"title\";s:12:\"Audio format\";s:4:\"slug\";s:29:\"twentytwentyfive/format-audio\";s:11:\"description\";s:73:\"An audio post format with an image, title, audio player, and description.\";s:10:\"categories\";a:1:{i:0;s:28:\"twentytwentyfive_post-format\";}}s:15:\"format-link.php\";a:4:{s:5:\"title\";s:11:\"Link format\";s:4:\"slug\";s:28:\"twentytwentyfive/format-link\";s:11:\"description\";s:77:\"A link post format with a description and an emphasized link for key content.\";s:10:\"categories\";a:1:{i:0;s:28:\"twentytwentyfive_post-format\";}}s:15:\"grid-videos.php\";a:4:{s:5:\"title\";s:16:\"Grid with videos\";s:4:\"slug\";s:28:\"twentytwentyfive/grid-videos\";s:11:\"description\";s:19:\"A grid with videos.\";s:10:\"categories\";a:1:{i:0;s:5:\"about\";}}s:24:\"grid-with-categories.php\";a:5:{s:5:\"title\";s:20:\"Grid with categories\";s:4:\"slug\";s:37:\"twentytwentyfive/grid-with-categories\";s:11:\"description\";s:41:\"A grid section with different categories.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:19:\"header-centered.php\";a:5:{s:5:\"title\";s:15:\"Centered header\";s:4:\"slug\";s:32:\"twentytwentyfive/header-centered\";s:11:\"description\";s:47:\"Header with centered site title and navigation.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:18:\"header-columns.php\";a:5:{s:5:\"title\";s:19:\"Header with columns\";s:4:\"slug\";s:31:\"twentytwentyfive/header-columns\";s:11:\"description\";s:49:\"Header with site title and navigation in columns.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:22:\"header-large-title.php\";a:5:{s:5:\"title\";s:23:\"Header with large title\";s:4:\"slug\";s:35:\"twentytwentyfive/header-large-title\";s:11:\"description\";s:58:\"Header with large site title and right-aligned navigation.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:10:\"header.php\";a:5:{s:5:\"title\";s:6:\"Header\";s:4:\"slug\";s:23:\"twentytwentyfive/header\";s:11:\"description\";s:38:\"Header with site title and navigation.\";s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/template-part/header\";}}s:36:\"heading-and-paragraph-with-image.php\";a:4:{s:5:\"title\";s:45:\"Heading and paragraph with image on the right\";s:4:\"slug\";s:49:\"twentytwentyfive/heading-and-paragraph-with-image\";s:11:\"description\";s:89:\"A two-column section with a heading and paragraph on the left, and an image on the right.\";s:10:\"categories\";a:1:{i:0;s:5:\"about\";}}s:13:\"hero-book.php\";a:5:{s:5:\"title\";s:9:\"Hero book\";s:4:\"slug\";s:26:\"twentytwentyfive/hero-book\";s:11:\"description\";s:66:\"A hero section for the book with a description and pre-order link.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}s:8:\"keywords\";a:3:{i:0;s:7:\"podcast\";i:1;s:4:\"hero\";i:2;s:7:\"stories\";}}s:25:\"hero-full-width-image.php\";a:4:{s:5:\"title\";s:22:\"Hero, full width image\";s:4:\"slug\";s:38:\"twentytwentyfive/hero-full-width-image\";s:11:\"description\";s:68:\"A hero with a full width image, heading, short paragraph and button.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:41:\"hero-overlapped-book-cover-with-links.php\";a:4:{s:5:\"title\";s:38:\"Hero, overlapped book cover with links\";s:4:\"slug\";s:54:\"twentytwentyfive/hero-overlapped-book-cover-with-links\";s:11:\"description\";s:47:\"A hero with an overlapped book cover and links.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:16:\"hero-podcast.php\";a:5:{s:5:\"title\";s:12:\"Hero podcast\";s:4:\"slug\";s:29:\"twentytwentyfive/hero-podcast\";s:11:\"description\";s:0:\"\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}s:8:\"keywords\";a:3:{i:0;s:7:\"podcast\";i:1;s:4:\"hero\";i:2;s:7:\"stories\";}}s:14:\"hidden-404.php\";a:4:{s:5:\"title\";s:3:\"404\";s:4:\"slug\";s:27:\"twentytwentyfive/hidden-404\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:23:\"hidden-blog-heading.php\";a:4:{s:5:\"title\";s:19:\"Hidden blog heading\";s:4:\"slug\";s:36:\"twentytwentyfive/hidden-blog-heading\";s:11:\"description\";s:52:\"Hidden heading for the home page and index template.\";s:8:\"inserter\";b:0;}s:17:\"hidden-search.php\";a:4:{s:5:\"title\";s:6:\"Search\";s:4:\"slug\";s:30:\"twentytwentyfive/hidden-search\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:18:\"hidden-sidebar.php\";a:4:{s:5:\"title\";s:7:\"Sidebar\";s:4:\"slug\";s:31:\"twentytwentyfive/hidden-sidebar\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:21:\"hidden-written-by.php\";a:4:{s:5:\"title\";s:10:\"Written by\";s:4:\"slug\";s:34:\"twentytwentyfive/hidden-written-by\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:9:\"logos.php\";a:4:{s:5:\"title\";s:5:\"Logos\";s:4:\"slug\";s:22:\"twentytwentyfive/logos\";s:11:\"description\";s:77:\"Showcasing the podcast\'s clients with a heading and a series of client logos.\";s:10:\"categories\";a:1:{i:0;s:6:\"banner\";}}s:24:\"media-instagram-grid.php\";a:5:{s:5:\"title\";s:14:\"Instagram grid\";s:4:\"slug\";s:37:\"twentytwentyfive/media-instagram-grid\";s:11:\"description\";s:62:\"A grid section with photos and a link to an Instagram profile.\";s:13:\"viewportWidth\";i:1440;s:10:\"categories\";a:3:{i:0;s:5:\"media\";i:1;s:7:\"gallery\";i:2;s:8:\"featured\";}}s:14:\"more-posts.php\";a:5:{s:5:\"title\";s:10:\"More posts\";s:4:\"slug\";s:27:\"twentytwentyfive/more-posts\";s:11:\"description\";s:45:\"Displays a list of posts with title and date.\";s:10:\"categories\";a:1:{i:0;s:5:\"query\";}s:10:\"blockTypes\";a:1:{i:0;s:10:\"core/query\";}}s:21:\"overlapped-images.php\";a:4:{s:5:\"title\";s:41:\"Overlapping images and paragraph on right\";s:4:\"slug\";s:34:\"twentytwentyfive/overlapped-images\";s:11:\"description\";s:53:\"A section with overlapping images, and a description.\";s:10:\"categories\";a:2:{i:0;s:5:\"about\";i:1;s:8:\"featured\";}}s:22:\"page-business-home.php\";a:8:{s:5:\"title\";s:17:\"Business homepage\";s:4:\"slug\";s:35:\"twentytwentyfive/page-business-home\";s:11:\"description\";s:28:\"A business homepage pattern.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:20:\"page-coming-soon.php\";a:8:{s:5:\"title\";s:11:\"Coming soon\";s:4:\"slug\";s:33:\"twentytwentyfive/page-coming-soon\";s:11:\"description\";s:96:\"A full-width cover banner that can be applied to a page or it can work as a single landing page.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:15:\"page-cv-bio.php\";a:7:{s:5:\"title\";s:6:\"CV/bio\";s:4:\"slug\";s:28:\"twentytwentyfive/page-cv-bio\";s:11:\"description\";s:36:\"A pattern for a CV/Bio landing page.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:3:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:5:\"about\";i:2;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:21:\"page-landing-book.php\";a:8:{s:5:\"title\";s:21:\"Landing page for book\";s:4:\"slug\";s:34:\"twentytwentyfive/page-landing-book\";s:11:\"description\";s:104:\"A landing page for the book with a hero section, pre-order links, locations, FAQs and newsletter signup.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:22:\"page-landing-event.php\";a:8:{s:5:\"title\";s:22:\"Landing page for event\";s:4:\"slug\";s:35:\"twentytwentyfive/page-landing-event\";s:11:\"description\";s:87:\"A landing page for the event with a hero section, description, FAQs and call to action.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:24:\"page-landing-podcast.php\";a:8:{s:5:\"title\";s:24:\"Landing page for podcast\";s:4:\"slug\";s:37:\"twentytwentyfive/page-landing-podcast\";s:11:\"description\";s:111:\"A landing page for the podcast with a hero section, description, logos, grid with videos and newsletter signup.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:50:\"page-link-in-bio-heading-paragraph-links-image.php\";a:7:{s:5:\"title\";s:59:\"Link in bio heading, paragraph, links and full-height image\";s:4:\"slug\";s:63:\"twentytwentyfive/page-link-in-bio-heading-paragraph-links-image\";s:11:\"description\";s:84:\"A link in bio landing page with a heading, paragraph, links and a full height image.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:3:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:6:\"banner\";i:2;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:33:\"page-link-in-bio-wide-margins.php\";a:7:{s:5:\"title\";s:48:\"Link in bio with profile, links and wide margins\";s:4:\"slug\";s:46:\"twentytwentyfive/page-link-in-bio-wide-margins\";s:11:\"description\";s:86:\"A link in bio landing page with social links, a profile photo and a brief description.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:3:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:6:\"banner\";i:2;s:8:\"featured\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}}s:39:\"page-link-in-bio-with-tight-margins.php\";a:8:{s:5:\"title\";s:30:\"Link in bio with tight margins\";s:4:\"slug\";s:52:\"twentytwentyfive/page-link-in-bio-with-tight-margins\";s:11:\"description\";s:90:\"A full-width, full-height link in bio section with an image, a paragraph and social links.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:6:\"banner\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:23:\"page-portfolio-home.php\";a:8:{s:5:\"title\";s:18:\"Portfolio homepage\";s:4:\"slug\";s:36:\"twentytwentyfive/page-portfolio-home\";s:11:\"description\";s:29:\"A portfolio homepage pattern.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:21:\"twentytwentyfive_page\";i:1;s:5:\"posts\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:18:\"page-shop-home.php\";a:8:{s:5:\"title\";s:13:\"Shop homepage\";s:4:\"slug\";s:31:\"twentytwentyfive/page-shop-home\";s:11:\"description\";s:24:\"A shop homepage pattern.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:21:\"twentytwentyfive_page\";}s:8:\"keywords\";a:1:{i:0;s:7:\"starter\";}s:10:\"blockTypes\";a:1:{i:0;s:17:\"core/post-content\";}s:9:\"postTypes\";a:2:{i:0;s:4:\"page\";i:1;s:11:\"wp_template\";}}s:19:\"post-navigation.php\";a:5:{s:5:\"title\";s:15:\"Post navigation\";s:4:\"slug\";s:32:\"twentytwentyfive/post-navigation\";s:11:\"description\";s:29:\"Next and previous post links.\";s:10:\"categories\";a:1:{i:0;s:4:\"text\";}s:10:\"blockTypes\";a:1:{i:0;s:25:\"core/post-navigation-link\";}}s:17:\"pricing-2-col.php\";a:5:{s:5:\"title\";s:18:\"Pricing, 2 columns\";s:4:\"slug\";s:30:\"twentytwentyfive/pricing-2-col\";s:11:\"description\";s:88:\"Pricing section with two columns, pricing plan, description, and call-to-action buttons.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:14:\"call-to-action\";}}s:17:\"pricing-3-col.php\";a:4:{s:5:\"title\";s:18:\"Pricing, 3 columns\";s:4:\"slug\";s:30:\"twentytwentyfive/pricing-3-col\";s:11:\"description\";s:100:\"A three-column boxed pricing table designed to showcase services, descriptions, and pricing options.\";s:10:\"categories\";a:3:{i:0;s:14:\"call-to-action\";i:1;s:6:\"banner\";i:2;s:8:\"services\";}}s:18:\"services-3-col.php\";a:4:{s:5:\"title\";s:19:\"Services, 3 columns\";s:4:\"slug\";s:31:\"twentytwentyfive/services-3-col\";s:11:\"description\";s:56:\"Three columns with images and text to showcase services.\";s:10:\"categories\";a:3:{i:0;s:14:\"call-to-action\";i:1;s:6:\"banner\";i:2;s:8:\"services\";}}s:36:\"services-subscriber-only-section.php\";a:4:{s:5:\"title\";s:33:\"Services, subscriber only section\";s:4:\"slug\";s:49:\"twentytwentyfive/services-subscriber-only-section\";s:11:\"description\";s:72:\"A subscriber-only section highlighting exclusive services and offerings.\";s:10:\"categories\";a:2:{i:0;s:14:\"call-to-action\";i:1;s:8:\"services\";}}s:24:\"services-team-photos.php\";a:4:{s:5:\"title\";s:21:\"Services, team photos\";s:4:\"slug\";s:37:\"twentytwentyfive/services-team-photos\";s:11:\"description\";s:59:\"Display team photos in a services section with grid layout.\";s:10:\"categories\";a:3:{i:0;s:6:\"banner\";i:1;s:14:\"call-to-action\";i:2;s:8:\"featured\";}}s:37:\"template-404-vertical-header-blog.php\";a:5:{s:5:\"title\";s:23:\"Right-aligned blog, 404\";s:4:\"slug\";s:50:\"twentytwentyfive/template-404-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:13:\"templateTypes\";a:1:{i:0;s:3:\"404\";}}s:30:\"template-archive-news-blog.php\";a:6:{s:5:\"title\";s:17:\"News blog archive\";s:4:\"slug\";s:43:\"twentytwentyfive/template-archive-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:31:\"template-archive-photo-blog.php\";a:6:{s:5:\"title\";s:18:\"Photo blog archive\";s:4:\"slug\";s:44:\"twentytwentyfive/template-archive-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:30:\"template-archive-text-blog.php\";a:6:{s:5:\"title\";s:23:\"Text-only blog, archive\";s:4:\"slug\";s:43:\"twentytwentyfive/template-archive-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:41:\"template-archive-vertical-header-blog.php\";a:6:{s:5:\"title\";s:34:\"Archive for the right-aligned blog\";s:4:\"slug\";s:54:\"twentytwentyfive/template-archive-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:7:\"archive\";}}s:27:\"template-home-news-blog.php\";a:6:{s:5:\"title\";s:14:\"News blog home\";s:4:\"slug\";s:40:\"twentytwentyfive/template-home-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:28:\"template-home-photo-blog.php\";a:6:{s:5:\"title\";s:15:\"Photo blog home\";s:4:\"slug\";s:41:\"twentytwentyfive/template-home-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:38:\"template-home-posts-grid-news-blog.php\";a:5:{s:5:\"title\";s:34:\"News blog with featured posts grid\";s:4:\"slug\";s:51:\"twentytwentyfive/template-home-posts-grid-news-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:27:\"template-home-text-blog.php\";a:6:{s:5:\"title\";s:20:\"Text-only blog, home\";s:4:\"slug\";s:40:\"twentytwentyfive/template-home-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:10:\"front-page\";i:1;s:4:\"home\";}}s:38:\"template-home-vertical-header-blog.php\";a:6:{s:5:\"title\";s:31:\"Homepage for right-aligned blog\";s:4:\"slug\";s:51:\"twentytwentyfive/template-home-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:40:\"template-home-with-sidebar-news-blog.php\";a:6:{s:5:\"title\";s:22:\"News blog with sidebar\";s:4:\"slug\";s:53:\"twentytwentyfive/template-home-with-sidebar-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:3:{i:0;s:10:\"front-page\";i:1;s:5:\"index\";i:2;s:4:\"home\";}}s:28:\"template-page-photo-blog.php\";a:5:{s:5:\"title\";s:15:\"Photo blog page\";s:4:\"slug\";s:41:\"twentytwentyfive/template-page-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:13:\"templateTypes\";a:1:{i:0;s:4:\"page\";}}s:38:\"template-page-vertical-header-blog.php\";a:5:{s:5:\"title\";s:40:\"Page template for the right-aligned blog\";s:4:\"slug\";s:51:\"twentytwentyfive/template-page-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:13:\"templateTypes\";a:1:{i:0;s:4:\"page\";}}s:33:\"template-query-loop-news-blog.php\";a:4:{s:5:\"title\";s:20:\"News blog query loop\";s:4:\"slug\";s:46:\"twentytwentyfive/template-query-loop-news-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:34:\"template-query-loop-photo-blog.php\";a:6:{s:5:\"title\";s:16:\"Photo blog posts\";s:4:\"slug\";s:47:\"twentytwentyfive/template-query-loop-photo-blog\";s:11:\"description\";s:54:\"A list of posts, 3 columns, with only featured images.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:1:{i:0;s:5:\"query\";}s:10:\"blockTypes\";a:1:{i:0;s:10:\"core/query\";}}s:33:\"template-query-loop-text-blog.php\";a:4:{s:5:\"title\";s:21:\"Text-only blog, posts\";s:4:\"slug\";s:46:\"twentytwentyfive/template-query-loop-text-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:44:\"template-query-loop-vertical-header-blog.php\";a:4:{s:5:\"title\";s:19:\"Right-aligned posts\";s:4:\"slug\";s:57:\"twentytwentyfive/template-query-loop-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:8:\"inserter\";b:0;}s:23:\"template-query-loop.php\";a:5:{s:5:\"title\";s:23:\"List of posts, 1 column\";s:4:\"slug\";s:36:\"twentytwentyfive/template-query-loop\";s:11:\"description\";s:61:\"A list of posts, 1 column, with featured image and post date.\";s:10:\"categories\";a:1:{i:0;s:5:\"query\";}s:10:\"blockTypes\";a:1:{i:0;s:10:\"core/query\";}}s:29:\"template-search-news-blog.php\";a:6:{s:5:\"title\";s:24:\"News blog search results\";s:4:\"slug\";s:42:\"twentytwentyfive/template-search-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:30:\"template-search-photo-blog.php\";a:6:{s:5:\"title\";s:25:\"Photo blog search results\";s:4:\"slug\";s:43:\"twentytwentyfive/template-search-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:29:\"template-search-text-blog.php\";a:6:{s:5:\"title\";s:22:\"Text-only blog, search\";s:4:\"slug\";s:42:\"twentytwentyfive/template-search-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:40:\"template-search-vertical-header-blog.php\";a:6:{s:5:\"title\";s:26:\"Right-aligned blog, search\";s:4:\"slug\";s:53:\"twentytwentyfive/template-search-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:1:{i:0;s:6:\"search\";}}s:40:\"template-single-left-aligned-content.php\";a:6:{s:5:\"title\";s:30:\"Post with left-aligned content\";s:4:\"slug\";s:47:\"twentytwentyfive/post-with-left-aligned-content\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:29:\"template-single-news-blog.php\";a:6:{s:5:\"title\";s:34:\"News blog single post with sidebar\";s:4:\"slug\";s:42:\"twentytwentyfive/template-single-news-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:26:\"template-single-offset.php\";a:6:{s:5:\"title\";s:34:\"Offset post without featured image\";s:4:\"slug\";s:39:\"twentytwentyfive/template-single-offset\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:30:\"template-single-photo-blog.php\";a:6:{s:5:\"title\";s:22:\"Photo blog single post\";s:4:\"slug\";s:43:\"twentytwentyfive/template-single-photo-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:29:\"template-single-text-blog.php\";a:6:{s:5:\"title\";s:27:\"Text-only blog, single post\";s:4:\"slug\";s:42:\"twentytwentyfive/template-single-text-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:40:\"template-single-vertical-header-blog.php\";a:6:{s:5:\"title\";s:25:\"Right-aligned single post\";s:4:\"slug\";s:53:\"twentytwentyfive/template-single-vertical-header-blog\";s:11:\"description\";s:0:\"\";s:13:\"viewportWidth\";i:1400;s:8:\"inserter\";b:0;s:13:\"templateTypes\";a:2:{i:0;s:5:\"posts\";i:1;s:6:\"single\";}}s:22:\"testimonials-2-col.php\";a:5:{s:5:\"title\";s:21:\"2 columns with avatar\";s:4:\"slug\";s:35:\"twentytwentyfive/testimonials-2-col\";s:11:\"description\";s:42:\"Two columns with testimonials and avatars.\";s:10:\"categories\";a:1:{i:0;s:12:\"testimonials\";}s:8:\"keywords\";a:1:{i:0;s:11:\"testimonial\";}}s:22:\"testimonials-6-col.php\";a:5:{s:5:\"title\";s:35:\"3 column layout with 6 testimonials\";s:4:\"slug\";s:35:\"twentytwentyfive/testimonials-6-col\";s:11:\"description\";s:86:\"A section with three columns and two rows, each containing a testimonial and citation.\";s:10:\"categories\";a:1:{i:0;s:12:\"testimonials\";}s:8:\"keywords\";a:1:{i:0;s:11:\"testimonial\";}}s:22:\"testimonials-large.php\";a:5:{s:5:\"title\";s:32:\"Review with large image on right\";s:4:\"slug\";s:35:\"twentytwentyfive/testimonials-large\";s:11:\"description\";s:46:\"A testimonial with a large image on the right.\";s:10:\"categories\";a:1:{i:0;s:12:\"testimonials\";}s:8:\"keywords\";a:1:{i:0;s:11:\"testimonial\";}}s:13:\"text-faqs.php\";a:6:{s:5:\"title\";s:4:\"FAQs\";s:4:\"slug\";s:26:\"twentytwentyfive/text-faqs\";s:11:\"description\";s:68:\"A FAQs section with a FAQ heading and list of questions and answers.\";s:13:\"viewportWidth\";i:1400;s:10:\"categories\";a:2:{i:0;s:4:\"text\";i:1;s:5:\"about\";}s:8:\"keywords\";a:5:{i:0;s:3:\"faq\";i:1;s:5:\"about\";i:2;s:10:\"frequently\";i:3;s:5:\"asked\";i:4;s:9:\"questions\";}}s:19:\"vertical-header.php\";a:6:{s:5:\"title\";s:15:\"Vertical header\";s:4:\"slug\";s:32:\"twentytwentyfive/vertical-header\";s:11:\"description\";s:46:\"Vertical Header with site title and navigation\";s:13:\"viewportWidth\";i:300;s:10:\"categories\";a:1:{i:0;s:6:\"header\";}s:10:\"blockTypes\";a:1:{i:0;s:34:\"core/template-part/vertical-header\";}}}}'),(210,1,'_site_transient_timeout_wp_theme_files_patterns-b24c4b64a1fe6f9f73313f730ddfc1cf','1743532330'); +/*!40000 ALTER TABLE `wp_sitemeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_term_relationships` +-- + +DROP TABLE IF EXISTS `wp_term_relationships`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_term_relationships` ( + `object_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `term_taxonomy_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `term_order` int(11) NOT NULL DEFAULT 0, + PRIMARY KEY (`object_id`,`term_taxonomy_id`), + KEY `term_taxonomy_id` (`term_taxonomy_id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_term_relationships` +-- + +LOCK TABLES `wp_term_relationships` WRITE; +/*!40000 ALTER TABLE `wp_term_relationships` DISABLE KEYS */; +INSERT INTO `wp_term_relationships` VALUES (7,2,0),(7,8,0),(7,14,0),(9,4,0),(9,5,0),(9,8,0),(9,17,0),(9,19,0),(10,2,0),(10,5,0),(10,18,0),(11,2,0),(11,3,0),(11,8,0),(11,14,0),(11,17,0),(12,2,0),(12,4,0),(12,5,0),(12,13,0),(13,3,0),(13,5,0),(13,8,0),(13,14,0),(13,16,0),(13,17,0),(14,2,0),(14,3,0),(14,8,0),(14,15,0),(15,4,0),(15,5,0),(15,8,0),(15,13,0),(16,2,0),(16,5,0),(16,8,0),(16,16,0),(18,10,0); +/*!40000 ALTER TABLE `wp_term_relationships` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_term_taxonomy` +-- + +DROP TABLE IF EXISTS `wp_term_taxonomy`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_term_taxonomy` ( + `term_taxonomy_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `term_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `taxonomy` varchar(32) NOT NULL DEFAULT '', + `description` longtext NOT NULL, + `parent` bigint(20) unsigned NOT NULL DEFAULT 0, + `count` bigint(20) NOT NULL DEFAULT 0, + PRIMARY KEY (`term_taxonomy_id`), + UNIQUE KEY `term_id_taxonomy` (`term_id`,`taxonomy`), + KEY `taxonomy` (`taxonomy`) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_term_taxonomy` +-- + +LOCK TABLES `wp_term_taxonomy` WRITE; +/*!40000 ALTER TABLE `wp_term_taxonomy` DISABLE KEYS */; +INSERT INTO `wp_term_taxonomy` VALUES (1,1,'category','',0,0),(2,2,'category','',0,6),(3,3,'category','',0,3),(4,4,'category','',0,3),(5,5,'category','',0,6),(6,6,'post_tag','',0,0),(7,7,'post_tag','',0,0),(8,8,'post_tag','',0,7),(9,9,'post_tag','',0,0),(10,10,'wp_theme','',0,1),(11,11,'post_tag','',0,0),(12,12,'post_tag','',0,0),(13,13,'post_tag','',0,2),(14,14,'post_tag','',0,3),(15,15,'post_tag','',0,1),(16,16,'post_tag','',0,2),(17,17,'post_tag','',0,3),(18,18,'post_tag','',0,1),(19,19,'post_tag','',0,1); +/*!40000 ALTER TABLE `wp_term_taxonomy` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_termmeta` +-- + +DROP TABLE IF EXISTS `wp_termmeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_termmeta` ( + `meta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `term_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`meta_id`), + KEY `term_id` (`term_id`), + KEY `meta_key` (`meta_key`(191)) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_termmeta` +-- + +LOCK TABLES `wp_termmeta` WRITE; +/*!40000 ALTER TABLE `wp_termmeta` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_termmeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_terms` +-- + +DROP TABLE IF EXISTS `wp_terms`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_terms` ( + `term_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `name` varchar(200) NOT NULL DEFAULT '', + `slug` varchar(200) NOT NULL DEFAULT '', + `term_group` bigint(10) NOT NULL DEFAULT 0, + PRIMARY KEY (`term_id`), + KEY `slug` (`slug`(191)), + KEY `name` (`name`(191)) +) ENGINE=InnoDB AUTO_INCREMENT=20 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_terms` +-- + +LOCK TABLES `wp_terms` WRITE; +/*!40000 ALTER TABLE `wp_terms` DISABLE KEYS */; +INSERT INTO `wp_terms` VALUES (1,'Latest News','latest-news',0),(2,'Physical Health','physical-health',0),(3,'Mental Health','mental-health',0),(4,'Travel','travel',0),(5,'Lifestyle','lifestyle',0),(6,'Wellness','wellness',0),(7,'Fitness','fitness',0),(8,'Mindfulness','mindfulness',0),(9,'Adventure','adventure',0),(10,'twentytwentyfive','twentytwentyfive',0),(11,'exercise','exercise',0),(12,'marathon','marathon',0),(13,'culture','culture',0),(14,'Mindset','mindset',0),(15,'Sleep','sleep',0),(16,'Productivity','productivity',0),(17,'Personal Growth','personal-growth',0),(18,'nutrition','nutrition',0),(19,'Asia','asia',0); +/*!40000 ALTER TABLE `wp_terms` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_usermeta` +-- + +DROP TABLE IF EXISTS `wp_usermeta`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_usermeta` ( + `umeta_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_id` bigint(20) unsigned NOT NULL DEFAULT 0, + `meta_key` varchar(255) DEFAULT NULL, + `meta_value` longtext DEFAULT NULL, + PRIMARY KEY (`umeta_id`), + KEY `user_id` (`user_id`), + KEY `meta_key` (`meta_key`(191)) +) ENGINE=InnoDB AUTO_INCREMENT=33 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_usermeta` +-- + +LOCK TABLES `wp_usermeta` WRITE; +/*!40000 ALTER TABLE `wp_usermeta` DISABLE KEYS */; +INSERT INTO `wp_usermeta` VALUES (1,1,'nickname','admin'),(2,1,'first_name','HWP'),(3,1,'last_name','Toolkit'),(4,1,'description',''),(5,1,'rich_editing','true'),(6,1,'syntax_highlighting','true'),(7,1,'comment_shortcuts','false'),(8,1,'admin_color','fresh'),(9,1,'use_ssl','0'),(10,1,'show_admin_bar_front','true'),(11,1,'locale',''),(12,1,'wp_capabilities','a:1:{s:13:\"administrator\";b:1;}'),(13,1,'wp_user_level','10'),(14,1,'dismissed_wp_pointers',''),(15,1,'show_welcome_panel','1'),(16,1,'source_domain','localhost:8888'),(17,1,'primary_blog','1'),(18,1,'session_tokens','a:3:{s:64:\"cc9f23aa8f1c1f88762e75652d72fe885540909dfaa9999e82e3e1c661ec586d\";a:4:{s:10:\"expiration\";i:1743099560;s:2:\"ip\";s:10:\"172.19.0.1\";s:2:\"ua\";s:117:\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\";s:5:\"login\";i:1742926760;}s:64:\"6169f92dc412a021bf1c10fb33526c1191cc54308c5f47492acac0d302a10999\";a:4:{s:10:\"expiration\";i:1743196402;s:2:\"ip\";s:10:\"172.19.0.1\";s:2:\"ua\";s:117:\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\";s:5:\"login\";i:1743023602;}s:64:\"acd9bd434b5e62151c170e5698cdf71c1ee90c7a545a3654b7d108d2a1856fe5\";a:4:{s:10:\"expiration\";i:1744308697;s:2:\"ip\";s:10:\"172.19.0.1\";s:2:\"ua\";s:117:\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36\";s:5:\"login\";i:1743099097;}}'),(19,1,'wp_user-settings','deleted'),(20,1,'wp_user-settings-time','1743099093'),(21,1,'wp_dashboard_quick_press_last_post_id','4'),(22,1,'community-events-location','a:1:{s:2:\"ip\";s:10:\"172.19.0.0\";}'),(23,1,'wp_2_capabilities','a:1:{s:13:\"administrator\";b:1;}'),(24,1,'wp_2_user_level','10'),(25,1,'wp_2_user-settings','deleted'),(26,1,'wp_2_user-settings-time','1743168777'),(27,1,'wp_2_dashboard_quick_press_last_post_id','3'),(28,1,'wp_persisted_preferences','a:5:{s:4:\"core\";a:6:{s:26:\"isComplementaryAreaVisible\";b:1;s:10:\"openPanels\";a:4:{i:0;s:11:\"post-status\";i:1;s:23:\"taxonomy-panel-post_tag\";i:2;s:23:\"taxonomy-panel-category\";i:3;s:23:\"taxonomy-panel-location\";}s:10:\"editorMode\";s:6:\"visual\";s:12:\"fixedToolbar\";b:1;s:15:\"distractionFree\";b:0;s:9:\"focusMode\";b:0;}s:14:\"core/edit-post\";a:2:{s:12:\"welcomeGuide\";b:0;s:14:\"fullscreenMode\";b:0;}s:9:\"_modified\";s:24:\"2025-03-25T19:46:01.514Z\";s:14:\"core/edit-site\";a:3:{s:12:\"welcomeGuide\";b:0;s:16:\"welcomeGuidePage\";b:0;s:18:\"welcomeGuideStyles\";b:0;}s:17:\"core/block-editor\";a:1:{s:25:\"linkControlSettingsDrawer\";b:1;}}'),(29,1,'manageedit-acf-post-typecolumnshidden','a:1:{i:0;s:7:\"acf-key\";}'),(30,1,'acf_user_settings','a:1:{s:19:\"post-type-first-run\";b:1;}'),(31,1,'closedpostboxes_acf-post-type','a:0:{}'),(32,1,'metaboxhidden_acf-post-type','a:1:{i:0;s:7:\"slugdiv\";}'); +/*!40000 ALTER TABLE `wp_usermeta` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_users` +-- + +DROP TABLE IF EXISTS `wp_users`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8 */; +CREATE TABLE `wp_users` ( + `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `user_login` varchar(60) NOT NULL DEFAULT '', + `user_pass` varchar(255) NOT NULL DEFAULT '', + `user_nicename` varchar(50) NOT NULL DEFAULT '', + `user_email` varchar(100) NOT NULL DEFAULT '', + `user_url` varchar(100) NOT NULL DEFAULT '', + `user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', + `user_activation_key` varchar(255) NOT NULL DEFAULT '', + `user_status` int(11) NOT NULL DEFAULT 0, + `display_name` varchar(250) NOT NULL DEFAULT '', + `spam` tinyint(2) NOT NULL DEFAULT 0, + `deleted` tinyint(2) NOT NULL DEFAULT 0, + PRIMARY KEY (`ID`), + KEY `user_login_key` (`user_login`), + KEY `user_nicename` (`user_nicename`), + KEY `user_email` (`user_email`) +) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_users` +-- + +LOCK TABLES `wp_users` WRITE; +/*!40000 ALTER TABLE `wp_users` DISABLE KEYS */; +INSERT INTO `wp_users` VALUES (1,'admin','$P$Bujazx4w44HXWUUjyvFmeWKvzXRp7r.','admin','wordpress@example.com','http://localhost:8888','2025-03-25 18:09:09','',0,'HWP Toolkit',0,0); +/*!40000 ALTER TABLE `wp_users` ENABLE KEYS */; +UNLOCK TABLES; +/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; + +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; + +-- Dump completed on 2025-04-01 18:26:17 diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/log/.gitkeep b/examples/next/client-multisite-app-router-fetch-data/wp-env/log/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Blog_listing.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Blog_listing.png new file mode 100644 index 00000000..5252333d Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Blog_listing.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Blog_listing_pagination.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Blog_listing_pagination.png new file mode 100644 index 00000000..25fdb8d5 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Blog_listing_pagination.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Catch_all.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Catch_all.png new file mode 100644 index 00000000..49906e65 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Catch_all.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Catch_all_second_site.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Catch_all_second_site.png new file mode 100644 index 00000000..f6ec14bb Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Catch_all_second_site.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Comment_form.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Comment_form.png new file mode 100644 index 00000000..6ec3fe5e Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Comment_form.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Comments.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Comments.png new file mode 100644 index 00000000..ba0b92c7 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Comments.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Cpt_single.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Cpt_single.png new file mode 100644 index 00000000..17566465 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Cpt_single.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Home.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Home.png new file mode 100644 index 00000000..ca96c433 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Home.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Single_blog.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Single_blog.png new file mode 100644 index 00000000..74068e59 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/Single_blog.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/cpt.png b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/cpt.png new file mode 100644 index 00000000..1c618316 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/screenshots/cpt.png differ diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/setup/.htaccess b/examples/next/client-multisite-app-router-fetch-data/wp-env/setup/.htaccess new file mode 100644 index 00000000..f64472d3 --- /dev/null +++ b/examples/next/client-multisite-app-router-fetch-data/wp-env/setup/.htaccess @@ -0,0 +1,22 @@ +# Disable CORS for local development + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" + Header set Access-Control-Allow-Headers "Authorization, Content-Type" + + +# Generated by WordPress +RewriteEngine On +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] +RewriteBase / +RewriteRule ^index\.php$ - [L] + +# add a trailing slash to /wp-admin +RewriteRule ^([_0-9a-zA-Z-]+/)?wp-admin$ $1wp-admin/ [R=301,L] + +RewriteCond %{REQUEST_FILENAME} -f [OR] +RewriteCond %{REQUEST_FILENAME} -d +RewriteRule ^ - [L] +RewriteRule ^([_0-9a-zA-Z-]+/)?(wp-(content|admin|includes).*) $2 [L] +RewriteRule ^([_0-9a-zA-Z-]+/)?(.*\.php)$ $2 [L] +RewriteRule . index.php [L] diff --git a/examples/next/client-multisite-app-router-fetch-data/wp-env/uploads.zip b/examples/next/client-multisite-app-router-fetch-data/wp-env/uploads.zip new file mode 100644 index 00000000..fbd24624 Binary files /dev/null and b/examples/next/client-multisite-app-router-fetch-data/wp-env/uploads.zip differ