diff --git a/docs/plugins/wpgraphql-logging/tutorial/learn-logging/index.md b/docs/plugins/wpgraphql-logging/tutorial/learn-logging/index.md index 70ed47f87..e86f42bcc 100644 --- a/docs/plugins/wpgraphql-logging/tutorial/learn-logging/index.md +++ b/docs/plugins/wpgraphql-logging/tutorial/learn-logging/index.md @@ -1,73 +1,202 @@ --- -title: "Tutorial Learn WPGRaphQL Logging Plugin" -description: "Learn how to install and configure the WPGraphQL Logging Plugin, then customize it using its extensible architecture." +title: "Get Started with WPGraphQL Logging" +description: "Learn how to install and configure the WPGraphQL Logging plugin, view logged data, and extend it with custom context data." --- -@TODO +In this tutorial, you will install and configure the WPGraphQL Logging plugin to track GraphQL queries in your WordPress site. By the end, you will have a working logging system that captures query data, and you will know how to extend it with custom context data. -## Introduction +We will use WPGraphQL IDE to run queries, view logs in the WordPress admin, and write PHP code to extend the plugin's functionality. -This tutorial will guide you through the core features of the WPGraphQL Logging Plugin. You will install and set up the plugin, and then you will see log data appear instantly. +> [!TIP] +> This tutorial assumes you're working with a local WordPress development environment. If you don't have one, you can set one up using [Local](https://localwp.com/). -Next, we will extend the plugin by: +## What you'll build -- Subscribing to an event to add more context data -- Displaying this new data on the admin grid -- Adding a rule to the list of rules for the rule manager -- Writing data to a new file handler +By following this tutorial, you will create: +* A working WPGraphQL Logging setup that tracks GraphQL queries +* Custom context data added to logs using the event system +* A configured admin interface to view and filter logged queries -By the end of this tutorial, you will be able to navigate and configure the plugin, and you will have the confidence to extend its functionality to suit your specific needs. +## Prerequisites -### Prerequisites +Before starting, make sure you have: -In order to complete this tutorial, you should: +* WordPress 6.5 or higher installed +* PHP 8.1.2 or higher +* WPGraphQL 2.3 or higher installed and activated +* Basic familiarity with WordPress, WPGraphQL, and PHP +* The ability to add PHP code to a custom plugin or theme's functions.php -- Be familiar with WordPress, WPGraphQL & PHP -- Be familiar with installing a plugin for WordPress -- Be comfortable to be able to add PHP code to a custom plugin +## Step 1: Install the WPGraphQL Logging plugin -Before you get started you need the following +First, we will install the WPGraphQL Logging plugin. Since this plugin extends WPGraphQL, make sure you have WPGraphQL installed and activated before proceeding. +Download the latest release from the GitHub repository: -## Setup +Visit and download the plugin zip file. +Install and activate the plugin through your WordPress admin. -### 1. Install the Plugin +![WordPress plugins page showing WPGraphQL Logging plugin activated with a blue "Deactivate" link, alongside the WPGraphQL plugin also showing as active](../screenshots/logging-plugin-installed.png) -### 2. Setup the configuration +## Step 2: Configure the logging plugin +Now we will configure the logging settings to start capturing queries. -## Logging & Viewing Data +In WordPress admin, go to GraphQL Logs > Settings. -- Using WPGraphQL IDE -- Logging a query -- Show the user +You should see the Basic Configuration tab with several settings. Notice the default configuration: +* **Enabled**: Checked (logging is on) +* **Exclude Queries**: `__schema,GetSeedNode` (to skip introspection queries) +* **Data Sampling Rate**: 10% (only logs 10% of queries by default) +* **Log Points**: All events selected -## Extending and adding data to the logs +![GraphQL Logs Settings page showing the Basic Configuration tab with default settings including Enabled checkbox checked, Exclude Queries field populated with "__schema,GetSeedNode", and Data Sampling Rate dropdown showing "10% (Every 10th request)"](../screenshots/logging-plugin-settings.png) -### Event +Let's adjust the sampling rate so we see logs more consistently: -### Admin Grid +1. Find the "Data Sampling Rate" dropdown +2. Change it to "100% (All requests)" +3. Scroll down and click "Save Changes" +You should see a success message confirming your settings were saved. -### Add Configuration +## Step 3: Generate log entries -### Rule Manager +Now we will run some GraphQL queries to generate log data. +Go back to GraphQL > GraphiQL IDE. -### Updating the handler +Run the following query: +```graphql +query GetPosts { + posts(first: 3) { + nodes { + id + title + date + } + } +} +``` +Click the "Play" button. You should see your posts in the response. -## Conclusion +Now run a different query: +```graphql +query GetPages { + pages(first: 3) { + nodes { + id + title + content + } + } +} +``` +Notice how we're running queries with named operations (`GetPosts` and `GetPages`). These names will help us identify queries in the logs. +## Step 4: View your logs +Let's look at the logged query data. +In WordPress admin, go to GraphQL Logs > All Logs. -## Contributing +You should see a table displaying your logged queries. Each row represents one GraphQL query execution. -We welcome and appreciate contributions from the community. If you'd like to help improve this documentation, please check out our [Contributing Guide](https://github.com/wpengine/hwptoolkit/blob/main/CONTRIBUTING.md) for more details on how to get started. +![All Logs page showing a table with logged GraphQL query entries](../screenshots/logging-plugin-all-logs.png) + +Notice the information captured for each log entry: + +* **Date**: When the query was executed +* **Query**: The query itself (GetPosts, GetPages) +* **Level**: The log level (usually INFO for successful queries) +* **Event**: Which point in the request lifecycle was logged + +Click on any log entry to see more details. You should see a detail view with the full query text, variables (if any), and additional context data. + +![Log entry details page showing full query text, variables, and context data](../screenshots/logging-plugin-details.png) + +## Step 5: Add custom context data to logs + +Now we will extend the logging system by adding custom context data to each log entry. + +The plugin uses an event system that allows you to transform log payloads before they're saved. We will subscribe to an event and add custom data. + +> [!TIP] +> For more detailed information about the event system and available events, see the [How To: Add Data to an Event](../../how-to/event-add-context/index.md) guide. + +Create a custom plugin file or add to your theme's `functions.php`: + +```php + GraphiQL IDE and run another query: + +```graphql +query TestCustomContext { + posts(first: 1) { + nodes { + title + } + } +} +``` + +Now go to GraphQL Logs > All Logs. + +You should see your new `TestCustomContext` queries. Find the one with "WPGraphQL Pre Request" event and click on it to view the details. + +In the context data section, you should now see your custom fields: + +![Log entry detail showing custom context fields including environment, app_id, and the modified log level (Error) alongside standard context data](../screenshots/logging-plugin-extra-context.png) + +Notice how your custom data appears alongside the default context data like memory usage and request information. Also note that the log level changed to "Error" because we modified it in the transform function. This demonstrates how easily you can extend the logging system to capture application-specific data and even modify logging behavior dynamically. + +## Next steps + +Now that you have a working WPGraphQL Logging setup and understand how to extend it, you can: + +* Add more sophisticated custom context data based on your application's needs - see [How To: Add Data to an Event](../../how-to/event-add-context/index.md) +* Create custom rules that check configuration values or query patterns - see [How To: Add or Remove a Rule](../../how-to/logger-add-remove-rules/index.md) +* Export logs to CSV for offline analysis +* Configure data retention policies in the Data Management tab +* Add custom processors to transform log data - see [How To: Add a Processor](../../how-to/logger-add-processor/index.md) +* Implement custom handlers to send logs to external services - see [How To: Add a Handler](../../how-to/logger-add-handler/index.md) + +For more details about extending the plugin, see the [How-To Guides](https://github.com/wpengine/hwptoolkit/tree/main/docs/plugins/wpgraphql-logging) which include guides for adding custom processors, handlers, and admin interface customizations. diff --git a/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-all-logs.png b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-all-logs.png new file mode 100644 index 000000000..33574674c Binary files /dev/null and b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-all-logs.png differ diff --git a/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-details.png b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-details.png new file mode 100644 index 000000000..0f15f226d Binary files /dev/null and b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-details.png differ diff --git a/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-extra-context.png b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-extra-context.png new file mode 100644 index 000000000..93dc568bd Binary files /dev/null and b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-extra-context.png differ diff --git a/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-installed.png b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-installed.png new file mode 100644 index 000000000..34ccb27fa Binary files /dev/null and b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-installed.png differ diff --git a/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-settings.png b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-settings.png new file mode 100644 index 000000000..707ee2715 Binary files /dev/null and b/docs/plugins/wpgraphql-logging/tutorial/screenshots/logging-plugin-settings.png differ diff --git a/plugins/wpgraphql-logging/.gitignore b/plugins/wpgraphql-logging/.gitignore index f0bc55781..0baf97e1e 100644 --- a/plugins/wpgraphql-logging/.gitignore +++ b/plugins/wpgraphql-logging/.gitignore @@ -56,3 +56,6 @@ tests/_data/ # Playwright outputs artifacts + +# Keep example SQL files +!examples/**/*.sql \ No newline at end of file diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/.wp-env.json b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/.wp-env.json new file mode 100644 index 000000000..854d760b2 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/.wp-env.json @@ -0,0 +1,23 @@ +{ + "phpVersion": "8.1", + "plugins": [ + "https://github.com/wp-graphql/wp-graphql/releases/latest/download/wp-graphql.zip", + "https://github.com/wpengine/hwptoolkit/releases/latest/download/wpgraphql-logging.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/uploads": "./wp-env/uploads", + ".htaccess": "./wp-env/setup/.htaccess" + }, + "lifecycleScripts": { + "afterStart": "wp-env run cli -- wp rewrite structure '/%postname%/' && wp-env run cli -- wp rewrite flush" + } +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/README.md b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/README.md new file mode 100644 index 000000000..9591c51de --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/README.md @@ -0,0 +1,143 @@ +--- +title: "WPGraphQL Logging with Next.js Pages Router" +description: "This demonstrates the usage of WPGraphQL Logging with Next.js Pages Router and WPGraphQL. It shows how GraphQL queries are logged and can be viewed, filtered, and exported from the WordPress admin." +--- + +# Example: WPGraphQL Logging with Next.js + +## Overview + +This example shows the WPGraphQL Logging plugin in action. The example uses a simple Next.js application that makes various GraphQL queries to WordPress, and demonstrates how those queries are logged and can be monitored through the WordPress admin interface. + +The example includes a wp-env setup, which will allow you to build and start this example quickly. With this wp-env setup, you don't need to have a separate WordPress instance or demo data to inspect the example. + +## What does this example do + +1. Fetch and display a list of posts from WordPress using GraphQL +2. Fetch and display individual posts and pages using GraphQL with variables +3. Automatically log all GraphQL queries to the WordPress database +4. View logged queries in the WordPress admin (GraphQL Logs → All Logs) +5. Filter logs by date range and log level +6. Export logs to CSV format +7. Configured WordPress instance with demo data and required plugins, using wp-env + +## Screenshots + +|| | | | +|| :--------------------------------------------------------------------------: | :-----------------------------------------------------------------------------: | :--------------------------------------------------------------------------: | +|| ![Admin logs view](./screenshots/admin-logs-view.png)
View all logs | ![Log detail](./screenshots/log-detail.png)
Individual log details | ![Filter logs](./screenshots/log-filters.png)
Filter and export logs | + +## Project Structure + +``` +├── example-app +│ └── src +│ ├── components # Reusable React components +│ ├── lib +│ │ └── client.js # Apollo client instance +│ ├── pages +│ │ ├── index.js # Home page - list of posts +│ │ ├── posts.js # Posts list with pagination +│ │ └── [slug].js # Dynamic route for single post/page +│ └── styles +│ └── globals.css # Global styles +├── .wp-env.json # wp-env configuration file +└── wp-env + ├── db + │ └── database.sql # WordPress database including all demo data for the example + └── uploads.zip # WordPress content to be used by wp-env +``` + +## Running the example with wp-env + +### Prerequisites + +- Node.js (v18+ recommended) +- [Docker](https://www.docker.com/) (if you plan on running the example see details below) + +**Note** Please make sure you have all prerequisites installed as mentioned above and Docker running (`docker ps`) + +### 1. Setup Repository and Packages + +- Clone the repo `git clone https://github.com/wpengine/hwptoolkit.git` +- Install packages `cd hwptoolkit && npm install` + +### 2. Build and start the application + +- `cd plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs` +- Then run `npm run example:build` will build and start your application. + +This starts the wp-env instance and frontend application. + +> [!IMPORTANT] +> After the wp-env instance starts, ensure that all installed plugins are activated for this example to work properly. + +| Frontend | Admin | +| ---------------------- | ------------------------------- | +| http://localhost:3000/ | http://localhost:8888/wp-admin/ | + +> **Note:** The login details for the admin is username "admin" and password "password" + +### 3. Create environment variables for Next.js + +Create a `.env.local` file in the `example-app` directory with the following content: + +```bash +NEXT_PUBLIC_WORDPRESS_URL=http://localhost:8888 +``` + +This tells the Next.js application where to find your WordPress GraphQL endpoint. + +### 4. Explore the logged queries + +1. Navigate to the Next.js frontend at http://localhost:3000/ +2. Browse through the posts by clicking on them +3. Visit http://localhost:3000/posts to see a different query +4. Login to WordPress admin at http://localhost:8888/wp-admin/ +5. Go to **GraphQL Logs → All Logs** to see all logged queries +6. Click on any log entry to see detailed information including: + - Query text and variables + - Response data + - Execution time and memory usage + - Request headers and context +7. Use the filters to narrow down logs by date range or log level +8. Export logs to CSV for offline analysis + +### 5. Configure logging settings (Optional) + +Navigate to **GraphQL Logs → Settings** in the WordPress admin to configure: + +- Enable/disable logging +- Adjust data sampling rate (default is 100% for this example) +- Configure data retention period +- Set up data sanitization rules +- Exclude specific queries from logging + +If you want to learn more about the logging plugin, check out [the documentation](../../../docs/plugins/wpgraphql-logging/index.md). + +### 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 and 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: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 `npm run 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.json`: `"phpmyadminPort": 11111,` (where port 11111 is not allocated). + +You can check if a port is free by running `lsof -i :11111` diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/.gitignore b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/.gitignore new file mode 100644 index 000000000..f64000977 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/.gitignore @@ -0,0 +1,43 @@ +# 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 + +package-lock.json \ No newline at end of file diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/eslint.config.mjs b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/eslint.config.mjs new file mode 100644 index 000000000..5165cec43 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/eslint.config.mjs @@ -0,0 +1,20 @@ +import { FlatCompat } from "@eslint/eslintrc"; +import js from "@eslint/js"; +import { dirname } from "path"; +import { fileURLToPath } from "url"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const compat = new FlatCompat({ + baseDirectory: __dirname, + recommendedConfig: js.configs.recommended, +}); + +const eslintConfig = [ + ...compat.config({ + extends: ["eslint:recommended", "next/core-web-vitals"], + }), +]; + +export default eslintConfig; diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/jsconfig.json b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/jsconfig.json new file mode 100644 index 000000000..b8d6842d7 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/jsconfig.json @@ -0,0 +1,7 @@ +{ + "compilerOptions": { + "paths": { + "@/*": ["./src/*"] + } + } +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/next.config.mjs b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/next.config.mjs new file mode 100644 index 000000000..d5456a15d --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/next.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: true, +}; + +export default nextConfig; diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/package.json b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/package.json new file mode 100644 index 000000000..03edf620e --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/package.json @@ -0,0 +1,24 @@ +{ + "name": "wpgraphql-logging-nextjs-example-app", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@apollo/client": "^3.13.5", + "next": "^15.5.2", + "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/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/postcss.config.mjs b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/postcss.config.mjs new file mode 100644 index 000000000..c7bcb4b1e --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/postcss.config.mjs @@ -0,0 +1,5 @@ +const config = { + plugins: ["@tailwindcss/postcss"], +}; + +export default config; diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/public/favicon.ico b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/public/favicon.ico new file mode 100644 index 000000000..718d6fea4 Binary files /dev/null and b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/public/favicon.ico differ diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/BlogPostItem.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/BlogPostItem.js new file mode 100644 index 000000000..58740f7f0 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/BlogPostItem.js @@ -0,0 +1,32 @@ +import Link from "next/link"; + +export function BlogPostItem({ post }) { + const { title, date, excerpt, uri, featuredImage } = post ?? {}; + + return ( +
+ + + {featuredImage && ( + + )} + +

+ + {title} + +

+ +
+ + + Read more + +
+ ); +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/Header.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/Header.js new file mode 100644 index 000000000..5f38c322e --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/Header.js @@ -0,0 +1,38 @@ +/* eslint-disable @next/next/no-html-link-for-pages */ +import { gql, useQuery } from "@apollo/client"; +import Link from "next/link"; + +// Defining a GraphQL query to fetch the blog title +const GET_BLOG_TITLE = gql` + query GetBlogTitle { + allSettings { + generalSettingsTitle + } + } +`; + +export default function Header() { + // Using the useQuery hook to execute the GraphQL query and get the data + const { data } = useQuery(GET_BLOG_TITLE); + // Extracting the blog title from the fetched data + const blogTitle = data?.allSettings?.generalSettingsTitle; + + return ( +
+
+
+ {blogTitle} +
+ + +
+
+ ); +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/Layout.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/Layout.js new file mode 100644 index 000000000..8ba6d1914 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/components/Layout.js @@ -0,0 +1,10 @@ +import Header from "./Header"; + +export default function Layout({ children }) { + return ( +
+
+ {children} +
+ ); +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/lib/client.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/lib/client.js new file mode 100644 index 000000000..a1baf091b --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/lib/client.js @@ -0,0 +1,70 @@ +import { ApolloClient, gql, HttpLink, InMemoryCache } from "@apollo/client"; +import { createFragmentRegistry } from "@apollo/client/cache"; +import { relayStylePagination } from "@apollo/client/utilities"; + +// Define GraphQL fragments for reuse in queries +// More info: https://www.apollographql.com/docs/react/data/fragments/ +const fragments = gql` + fragment FeaturedImage on MediaItem { + sourceUrl(size: LARGE) + caption + } + + fragment Page on Page { + id + title + content + date + uri + featuredImage { + node { + ...FeaturedImage + } + } + } + + fragment Post on Post { + id + databaseId + date + uri + content + excerpt + title + author { + node { + name + } + } + featuredImage { + node { + ...FeaturedImage + } + } + } +`; + +// Get the WordPress URL from environment variables +// More info: https://nextjs.org/docs/basic-features/environment-variables +const WORDPRESS_URL = process.env.NEXT_PUBLIC_WORDPRESS_URL; + +// Initialize Apollo Client with the link and cache configuration +// More info: https://www.apollographql.com/docs/react/api/core/ApolloClient/ +export const client = new ApolloClient({ + link: new HttpLink({ + uri: WORDPRESS_URL + "/graphql", + }), + ssrMode: typeof window === "undefined", // Enable SSR mode for server-side rendering + cache: new InMemoryCache({ + typePolicies: { + Query: { + fields: { + posts: relayStylePagination(), // Enable relay-style pagination for posts + // More info: https://www.apollographql.com/docs/react/pagination/cursor-based#relay-style-cursor-pagination + }, + }, + }, + fragments: createFragmentRegistry(fragments), // Register the defined fragments + // More info: https://www.apollographql.com/docs/react/data/fragments#registering-named-fragments-using-createfragmentregistry + }), +}); diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/[slug].js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/[slug].js new file mode 100644 index 000000000..1f4426d0d --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/[slug].js @@ -0,0 +1,94 @@ +import { client } from "@/lib/client"; +import { gql } from "@apollo/client"; +import Head from "next/head"; + +const GET_CONTENT = gql` + query GetContentByUri($uri: String!) { + nodeByUri(uri: $uri) { + __typename + ...Page + ...Post + } + } +`; + +export default function SingleContent({ content }) { + if (!content) { + return ( + <> + + Not Found + +
+

Content Not Found

+

The requested content could not be found.

+
+ + ); + } + + return ( + <> + + {content.title} + + +
+ {content.featuredImage && ( +
+ {content.title} +
+ )} + +

{content.title}

+ + {content.author && ( +

+ By {content.author.node.name} on{" "} + {new Date(content.date).toLocaleDateString()} +

+ )} + + {content.__typename === "Page" && ( +

Page

+ )} + +
+
+ + ); +} + +export async function getServerSideProps({ params }) { + try { + const { data } = await client.query({ + query: GET_CONTENT, + variables: { uri: `/${params.slug}` }, + }); + + if (!data?.nodeByUri) { + return { + notFound: true, + }; + } + + return { + props: { + content: data.nodeByUri, + }, + }; + } catch (error) { + console.error("Error fetching content:", error); + return { + notFound: true, + }; + } +} + diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/_app.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/_app.js new file mode 100644 index 000000000..c94004952 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/_app.js @@ -0,0 +1,15 @@ +import Layout from "@/components/Layout"; +import "@/styles/globals.css"; +import { ApolloProvider } from "@apollo/client"; +import { client } from "../lib/client"; + +export default function App({ Component, pageProps }) { + return ( + // ApolloProvider makes the Apollo Client available to the rest of the app + + + + + + ); +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/_document.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/_document.js new file mode 100644 index 000000000..628a7334c --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/_document.js @@ -0,0 +1,13 @@ +import { Html, Head, Main, NextScript } from "next/document"; + +export default function Document() { + return ( + + + +
+ + + + ); +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/index.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/index.js new file mode 100644 index 000000000..e5ebb3c70 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/index.js @@ -0,0 +1,93 @@ +import { BlogPostItem } from "@/components/BlogPostItem"; +import { client } from "@/lib/client"; +import { gql } from "@apollo/client"; +import Head from "next/head"; + +const LIST_POSTS = gql` + query ListPosts { + posts(first: 5) { + edges { + node { + id + title + uri + excerpt + date + featuredImage { + node { + sourceUrl(size: LARGE) + caption + } + } + } + } + } + } +`; + +export default function Home({ data }) { + const posts = data?.posts?.edges || []; + + return ( + <> + + WPGraphQL Logging Example + + + +
+
+

+ Welcome to WPGraphQL Logging Example +

+

+ This example demonstrates the WPGraphQL Logging plugin. As you + navigate through the site, GraphQL queries are being logged to the + WordPress database. +

+
+

+ View the logs: Login to WordPress admin and + navigate to GraphQL Logs → All Logs to see the + logged queries from this application. +

+
+
+ +

Recent Posts

+ + {posts.length === 0 ? ( +

No posts found.

+ ) : ( + posts.map((item) => { + const post = item.node; + return ; + }) + )} +
+ + ); +} + +// Fetch the initial list of posts at request time using getServerSideProps +export async function getServerSideProps() { + try { + const { data } = await client.query({ query: LIST_POSTS }); + + return { + props: { + data, + }, + }; + } catch (error) { + console.error("Error fetching posts:", error); + return { + props: { + data: { posts: { edges: [] } }, + }, + }; + } +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/posts.js b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/posts.js new file mode 100644 index 000000000..48b86da90 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/pages/posts.js @@ -0,0 +1,106 @@ +import { client } from "@/lib/client"; +import { gql } from "@apollo/client"; +import Head from "next/head"; +import Link from "next/link"; + +const LIST_POSTS_WITH_PAGINATION = gql` + query ListPostsWithPagination($first: Int = 10, $after: String) { + posts(first: $first, after: $after) { + pageInfo { + hasNextPage + hasPreviousPage + endCursor + startCursor + } + edges { + cursor + node { + id + title + uri + excerpt + date + author { + node { + name + } + } + featuredImage { + node { + sourceUrl(size: MEDIUM) + caption + } + } + } + } + } + } +`; + +export default function Posts({ data }) { + const posts = data?.posts?.edges || []; + + return ( + <> + + All Posts + + +
+

All Posts

+ +
+ {posts.map(({ node: post }) => ( + + {post.featuredImage && ( + {post.title} + )} +
+

{post.title}

+

+ By {post.author.node.name} on{" "} + {new Date(post.date).toLocaleDateString()} +

+
+
+ + ))} +
+
+ + ); +} + +export async function getServerSideProps() { + try { + const { data } = await client.query({ + query: LIST_POSTS_WITH_PAGINATION, + variables: { first: 10 }, + }); + + return { + props: { + data, + }, + }; + } catch (error) { + console.error("Error fetching posts:", error); + return { + props: { + data: { posts: { edges: [] } }, + }, + }; + } +} + diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/styles/globals.css b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/styles/globals.css new file mode 100644 index 000000000..2a89a4815 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/example-app/src/styles/globals.css @@ -0,0 +1,19 @@ +@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); +} + +body { + background: var(--background); + color: var(--foreground); + font-family: Arial, Helvetica, sans-serif; +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/package-lock.json b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/package-lock.json new file mode 100644 index 000000000..4543e622c --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/package-lock.json @@ -0,0 +1,2056 @@ +{ + "name": "wpgraphql-logging-nextjs", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "wpgraphql-logging-nextjs", + "version": "1.0.0", + "license": "BSD-0-Clause", + "dependencies": { + "@wordpress/env": "^10.20.0" + } + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.1.tgz", + "integrity": "sha512-rOcLotrptYIy59SGQhKlU0xBg1vvcVl2FdPIEclUvKHh0wo12OfGkId/01PIMJ/V+EimJ77t085YabgnQHBa5A==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.1", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/confirm": { + "version": "5.1.20", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.20.tgz", + "integrity": "sha512-HDGiWh2tyRZa0M1ZnEIUCQro25gW/mN8ODByicQrbR1yHx4hT+IOpozCMi5TgBtUdklLwRI2mv14eNpftDluEw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core": { + "version": "10.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.1.tgz", + "integrity": "sha512-hzGKIkfomGFPgxKmnKEKeA+uCYBqC+TKtRx5LgyHRCrF6S2MliwRIjp3sUaWwVzMp7ZXVs8elB0Tfe682Rpg4w==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^3.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.22", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.22.tgz", + "integrity": "sha512-8yYZ9TCbBKoBkzHtVNMF6PV1RJEUvMlhvmS3GxH4UvXMEHlS45jFyqFy0DU+K42jBs5slOaA78xGqqqWAx3u6A==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.22.tgz", + "integrity": "sha512-9XOjCjvioLjwlq4S4yXzhvBmAXj5tG+jvva0uqedEsQ9VD8kZ+YT7ap23i0bIXOtow+di4+u3i6u26nDqEfY4Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.0.tgz", + "integrity": "sha512-h4fgse5zeGsBSW3cRQqu9a99OXRdRsNCvHoBqVmz40cjYjYFzcfwD0KA96BHIPlT7rZw0IpiefQIqXrjbzjS4Q==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.22.tgz", + "integrity": "sha512-oAdMJXz++fX58HsIEYmvuf5EdE8CfBHHXjoi9cTcQzgFoHGZE+8+Y3P38MlaRMeBvAVnkWtAxMUF6urL2zYsbg==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.22", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.22.tgz", + "integrity": "sha512-CbdqK1ioIr0Y3akx03k/+Twf+KSlHjn05hBL+rmubMll7PsDTGH0R4vfFkr+XrkB0FOHrjIwVP9crt49dgt+1g==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.0.tgz", + "integrity": "sha512-X2HAjY9BClfFkJ2RP3iIiFxlct5JJVdaYYXhA7RKxsbc9KL+VbId79PSoUGH/OLS011NFbHHDMDcBKUj3T89+Q==", + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.1", + "@inquirer/confirm": "^5.1.20", + "@inquirer/editor": "^4.2.22", + "@inquirer/expand": "^4.0.22", + "@inquirer/input": "^4.3.0", + "@inquirer/number": "^3.0.22", + "@inquirer/password": "^4.0.22", + "@inquirer/rawlist": "^4.1.10", + "@inquirer/search": "^3.2.1", + "@inquirer/select": "^4.4.1" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.10", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.10.tgz", + "integrity": "sha512-Du4uidsgTMkoH5izgpfyauTL/ItVHOLsVdcY+wGeoGaG56BV+/JfmyoQGniyhegrDzXpfn3D+LFHaxMDRygcAw==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.1.tgz", + "integrity": "sha512-cKiuUvETublmTmaOneEermfG2tI9ABpb7fW/LqzZAnSv4ZaJnbEis05lOkiBuYX5hNdnX0Q9ryOQyrNidb55WA==", + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.1", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.1.tgz", + "integrity": "sha512-E9hbLU4XsNe2SAOSsFrtYtYQDVi1mfbqJrPDvXKnGlnRiApBdWMJz7r3J2Ff38AqULkPUD3XjQMD4492TymD7Q==", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.1", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@kwsites/file-exists": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/file-exists/-/file-exists-1.1.1.tgz", + "integrity": "sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==", + "license": "MIT", + "dependencies": { + "debug": "^4.1.1" + } + }, + "node_modules/@kwsites/file-exists/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@kwsites/file-exists/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==", + "license": "MIT" + }, + "node_modules/@kwsites/promise-deferred": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@kwsites/promise-deferred/-/promise-deferred-1.1.1.tgz", + "integrity": "sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==", + "license": "MIT" + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@sindresorhus/is": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz", + "integrity": "sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA==", + "license": "MIT" + }, + "node_modules/@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "24.10.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", + "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.16.0" + } + }, + "node_modules/@types/responselike": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.3.tgz", + "integrity": "sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@wordpress/env": { + "version": "10.35.0", + "resolved": "https://registry.npmjs.org/@wordpress/env/-/env-10.35.0.tgz", + "integrity": "sha512-KmRHw9KsPDjzm+1WKW63hKSm3NOwdQkXrtF81VcknHAzGolgS4yPo3QxTGzaGgmK95RjkVWYQIZIoi5s8ABb0w==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@inquirer/prompts": "^7.2.0", + "chalk": "^4.0.0", + "copy-dir": "^1.3.0", + "docker-compose": "^0.24.3", + "extract-zip": "^1.6.7", + "got": "^11.8.5", + "js-yaml": "^3.13.1", + "ora": "^4.0.2", + "rimraf": "^5.0.10", + "simple-git": "^3.5.0", + "terminal-link": "^2.0.0", + "yargs": "^17.3.0" + }, + "bin": { + "wp-env": "bin/wp-env" + }, + "engines": { + "node": ">=18.12.0", + "npm": ">=8.19.2" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "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==", + "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": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "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==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==", + "license": "MIT", + "engines": { + "node": ">=10.6.0" + } + }, + "node_modules/cacheable-request": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.4.tgz", + "integrity": "sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==", + "license": "MIT", + "dependencies": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "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/chardet": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", + "license": "MIT" + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.2.tgz", + "integrity": "sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-response": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", + "license": "MIT", + "dependencies": { + "mimic-response": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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==", + "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==", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/copy-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/copy-dir/-/copy-dir-1.3.0.tgz", + "integrity": "sha512-Q4+qBFnN4bwGwvtXXzbp4P/4iNk0MaiGAzvQ8OiMtlLjkIKjmNN689uVzShSM0908q7GoFHXIPx4zi75ocoaHw==", + "license": "MIT" + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "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==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/docker-compose": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/docker-compose/-/docker-compose-0.24.8.tgz", + "integrity": "sha512-plizRs/Vf15H+GCVxq2EUvyPK7ei9b/cVesHvjnX4xaXjM9spHe2Ytq0BitndFgvTJ3E3NljPNUEl7BAN43iZw==", + "license": "MIT", + "dependencies": { + "yaml": "^2.2.2" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "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==", + "license": "MIT" + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "license": "BSD-2-Clause", + "dependencies": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "bin": { + "extract-zip": "cli.js" + } + }, + "node_modules/fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==", + "license": "MIT", + "dependencies": { + "pend": "~1.2.0" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "license": "MIT", + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/got": { + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "license": "MIT", + "dependencies": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" + }, + "engines": { + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", + "license": "BSD-2-Clause" + }, + "node_modules/http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", + "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "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==", + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/log-symbols": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz", + "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==", + "license": "MIT", + "dependencies": { + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "license": "MIT" + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-3.0.0.tgz", + "integrity": "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw==", + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-4.1.1.tgz", + "integrity": "sha512-sjYP8QyVWBpBZWD6Vr1M/KwknSw6kJOz41tvGMlwWeClHBtYKTbHMki1PsLZnxKpXMPbTKv9b3pjQu3REib96A==", + "license": "MIT", + "dependencies": { + "chalk": "^3.0.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.2.0", + "is-interactive": "^1.0.0", + "log-symbols": "^3.0.0", + "mute-stream": "0.0.8", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "license": "ISC" + }, + "node_modules/p-cancelable": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "license": "BlueOak-1.0.0" + }, + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==", + "license": "MIT" + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", + "integrity": "sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "license": "MIT", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==", + "license": "MIT" + }, + "node_modules/responselike": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", + "license": "MIT", + "dependencies": { + "lowercase-keys": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC" + }, + "node_modules/rimraf": { + "version": "5.0.10", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.10.tgz", + "integrity": "sha512-l0OE8wL34P4nJH/H2ffoaniAokM2qSmrtXHmlpvYr5AVVX8msAyW0l8NVJFDxlSK4u3Uh/f41cQheDVdnYijwQ==", + "license": "ISC", + "dependencies": { + "glob": "^10.3.7" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "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==", + "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==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-git": { + "version": "3.30.0", + "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-3.30.0.tgz", + "integrity": "sha512-q6lxyDsCmEal/MEGhP1aVyQ3oxnagGlBDOVSIB4XUVLl1iZh0Pah6ebC9V4xBap/RfgP2WlI8EKs0WS0rMEJHg==", + "license": "MIT", + "dependencies": { + "@kwsites/file-exists": "^1.1.1", + "@kwsites/promise-deferred": "^1.1.1", + "debug": "^4.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/steveukx/git-js?sponsor=1" + } + }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/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==", + "license": "MIT" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause" + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "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==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz", + "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/terminal-link": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz", + "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "supports-hyperlinks": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", + "license": "MIT" + }, + "node_modules/undici-types": { + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.16.0.tgz", + "integrity": "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.1.tgz", + "integrity": "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==", + "license": "MIT", + "dependencies": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + } + } +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/package.json b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/package.json new file mode 100644 index 000000000..8966fe2ec --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/package.json @@ -0,0 +1,44 @@ +{ + "name": "wpgraphql-logging-nextjs", + "version": "1.0.0", + "description": "An example of WPGraphQL logging using Nextjs.", + "scripts": { + "example:build": "npm run wp:images:unzip && npm run example:dev:install && npm run wp:start && npm run wp:db:import && npm run example:start", + "example:dev:install": "cd example-app && npm install && cd ..", + "example:start": "npm run wp:start && npm run example:dev", + "example:stop": "npm run wp:stop", + "example:prune": "wp-env destroy && npm run example:build && npm run example:start", + "example:dev": "npm --prefix ./example-app run dev", + "wp:start": "npm install && wp-env start", + "wp:stop": "wp-env stop", + "wp:destroy": "wp-env destroy --config ./wp-env/wp-env.json", + "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", + "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", + "wp-env": "wp-env" + }, + "keywords": [ + "headless", + "wordpress", + "nextjs", + "apollo-client", + "fullstack", + "headless-cms", + "wpgraphql", + "headless-wordpress", + "nextjs-pages-router", + "wp-env-configuration", + "fullstack-example", + "logging", + "wpgraphql-logging", + "graphql-monitoring", + "observability" + ], + "author": "hwptoolkit", + "license": "BSD-0-Clause", + "dependencies": { + "@wordpress/env": "^10.20.0" + } +} diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/db/database.sql b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/db/database.sql new file mode 100644 index 000000000..4bca9b245 --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/db/database.sql @@ -0,0 +1,1012 @@ +/*M!999999\- enable the sandbox mode */ +-- MariaDB dump 10.19-11.4.8-MariaDB, for Linux (aarch64) +-- +-- Host: mysql Database: wordpress +-- ------------------------------------------------------ +-- Server version 11.8.5-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 utf8mb4 */; +/*!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' */; +/*M!100616 SET @OLD_NOTE_VERBOSITY=@@NOTE_VERBOSITY, NOTE_VERBOSITY=0 */; + +-- +-- 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 = utf8mb4 */; +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 = utf8mb4 */; +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 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 */; +/*!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 = utf8mb4 */; +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 = utf8mb4 */; +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=395 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:24:{i:1743163867;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:1743165667;a:2:{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;}}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:1743165755;a:1:{s:26:\"upgrader_scheduled_cleanup\";a:1:{s:32:\"c9059feef497c200e69cb9956a81f005\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:5;}}}}i:1743170751;a:1:{s:26:\"upgrader_scheduled_cleanup\";a:1:{s:32:\"0788f78fe69d70d1d4752e57aa22b566\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:357;}}}}i:1743170763;a:1:{s:26:\"upgrader_scheduled_cleanup\";a:1:{s:32:\"f69ca2a244e86e4c29242128df8e8956\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:358;}}}}i:1743170772;a:1:{s:26:\"upgrader_scheduled_cleanup\";a:1:{s:32:\"563efdbbb2f307dfb80c1d496d0109b2\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:359;}}}}i:1743170782;a:1:{s:26:\"upgrader_scheduled_cleanup\";a:1:{s:32:\"32a99f765d2b1a63b1790ee770c3fb21\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:360;}}}}i:1743201685;a:1:{s:21:\"wp_update_user_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:1743205267;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:1743244867;a:2:{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;}}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;}}}i:1743244885;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:1743244886;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:1743246097;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:1743246167;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"25117f4b9fd9bb6384d0eb8ea708c8b9\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:12;}}}}i:1743246175;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"bad9df8a7c3fa92d28999d03f4ccb29e\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:18;}}}}i:1743246409;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"1aee8163cf336b6de8481860de53f230\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:29;}}}}i:1743246864;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"3c2f09ef3307c7968f556ae704095acf\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:35;}}}}i:1743247077;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"1116d9ef00bc7112389bca5c44a23a14\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:36;}}}}i:1743247202;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"0f46b246aa1944327c5c8450376eb6e0\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:306;}}}}i:1743247316;a:1:{s:26:\"importer_scheduled_cleanup\";a:1:{s:32:\"1d5de63f2a862a1a655d7261e844bc49\";a:2:{s:8:\"schedule\";b:0;s:4:\"args\";a:1:{i:0;i:312;}}}}i:1743763324;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:1743763363;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:1764778631;a:1:{s:34:\"wpgraphql_logging_deletion_cleanup\";a:1:{s:32:\"40cd750bba9870f18aada2478b24840a\";a:3:{s:8:\"schedule\";s:5:\"daily\";s:4:\"args\";a:0:{}s:8:\"interval\";i:86400;}}}s:7:\"version\";i:2;}','on'), +(2,'siteurl','http://localhost:8888','on'), +(3,'home','http://localhost:8888','on'), +(4,'blogname','WPGraphQL Logging Example','on'), +(5,'blogdescription','','on'), +(6,'users_can_register','0','on'), +(7,'admin_email','dev-email@wpengine.local','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','/%postname%/','on'), +(30,'rewrite_rules','a:95:{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:12:\"robots\\.txt$\";s:18:\"index.php?robots=1\";s:13:\"favicon\\.ico$\";s:19:\"index.php?favicon=1\";s:12:\"sitemap\\.xml\";s:23:\"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: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: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\";}','on'), +(31,'hack_file','0','on'), +(32,'blog_charset','UTF-8','on'), +(33,'moderation_keys','','off'), +(34,'active_plugins','a:2:{i:0;s:25:\"wp-graphql/wp-graphql.php\";i:1;s:39:\"wpgraphql-logging/wpgraphql-logging.php\";}','on'), +(35,'category_base','','on'), +(36,'ping_sites','https://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','60717','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','posts','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','0','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','1765037703','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:61:{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: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:3:\"6.9\";s:5:\"files\";a:584:{i:0;s:31:\"accordion-heading/style-rtl.css\";i:1;s:35:\"accordion-heading/style-rtl.min.css\";i:2;s:27:\"accordion-heading/style.css\";i:3;s:31:\"accordion-heading/style.min.css\";i:4;s:28:\"accordion-item/style-rtl.css\";i:5;s:32:\"accordion-item/style-rtl.min.css\";i:6;s:24:\"accordion-item/style.css\";i:7;s:28:\"accordion-item/style.min.css\";i:8;s:29:\"accordion-panel/style-rtl.css\";i:9;s:33:\"accordion-panel/style-rtl.min.css\";i:10;s:25:\"accordion-panel/style.css\";i:11;s:29:\"accordion-panel/style.min.css\";i:12;s:23:\"accordion/style-rtl.css\";i:13;s:27:\"accordion/style-rtl.min.css\";i:14;s:19:\"accordion/style.css\";i:15;s:23:\"accordion/style.min.css\";i:16;s:23:\"archives/editor-rtl.css\";i:17;s:27:\"archives/editor-rtl.min.css\";i:18;s:19:\"archives/editor.css\";i:19;s:23:\"archives/editor.min.css\";i:20;s:22:\"archives/style-rtl.css\";i:21;s:26:\"archives/style-rtl.min.css\";i:22;s:18:\"archives/style.css\";i:23;s:22:\"archives/style.min.css\";i:24;s:20:\"audio/editor-rtl.css\";i:25;s:24:\"audio/editor-rtl.min.css\";i:26;s:16:\"audio/editor.css\";i:27;s:20:\"audio/editor.min.css\";i:28;s:19:\"audio/style-rtl.css\";i:29;s:23:\"audio/style-rtl.min.css\";i:30;s:15:\"audio/style.css\";i:31;s:19:\"audio/style.min.css\";i:32;s:19:\"audio/theme-rtl.css\";i:33;s:23:\"audio/theme-rtl.min.css\";i:34;s:15:\"audio/theme.css\";i:35;s:19:\"audio/theme.min.css\";i:36;s:21:\"avatar/editor-rtl.css\";i:37;s:25:\"avatar/editor-rtl.min.css\";i:38;s:17:\"avatar/editor.css\";i:39;s:21:\"avatar/editor.min.css\";i:40;s:20:\"avatar/style-rtl.css\";i:41;s:24:\"avatar/style-rtl.min.css\";i:42;s:16:\"avatar/style.css\";i:43;s:20:\"avatar/style.min.css\";i:44;s:21:\"button/editor-rtl.css\";i:45;s:25:\"button/editor-rtl.min.css\";i:46;s:17:\"button/editor.css\";i:47;s:21:\"button/editor.min.css\";i:48;s:20:\"button/style-rtl.css\";i:49;s:24:\"button/style-rtl.min.css\";i:50;s:16:\"button/style.css\";i:51;s:20:\"button/style.min.css\";i:52;s:22:\"buttons/editor-rtl.css\";i:53;s:26:\"buttons/editor-rtl.min.css\";i:54;s:18:\"buttons/editor.css\";i:55;s:22:\"buttons/editor.min.css\";i:56;s:21:\"buttons/style-rtl.css\";i:57;s:25:\"buttons/style-rtl.min.css\";i:58;s:17:\"buttons/style.css\";i:59;s:21:\"buttons/style.min.css\";i:60;s:22:\"calendar/style-rtl.css\";i:61;s:26:\"calendar/style-rtl.min.css\";i:62;s:18:\"calendar/style.css\";i:63;s:22:\"calendar/style.min.css\";i:64;s:25:\"categories/editor-rtl.css\";i:65;s:29:\"categories/editor-rtl.min.css\";i:66;s:21:\"categories/editor.css\";i:67;s:25:\"categories/editor.min.css\";i:68;s:24:\"categories/style-rtl.css\";i:69;s:28:\"categories/style-rtl.min.css\";i:70;s:20:\"categories/style.css\";i:71;s:24:\"categories/style.min.css\";i:72;s:19:\"code/editor-rtl.css\";i:73;s:23:\"code/editor-rtl.min.css\";i:74;s:15:\"code/editor.css\";i:75;s:19:\"code/editor.min.css\";i:76;s:18:\"code/style-rtl.css\";i:77;s:22:\"code/style-rtl.min.css\";i:78;s:14:\"code/style.css\";i:79;s:18:\"code/style.min.css\";i:80;s:18:\"code/theme-rtl.css\";i:81;s:22:\"code/theme-rtl.min.css\";i:82;s:14:\"code/theme.css\";i:83;s:18:\"code/theme.min.css\";i:84;s:22:\"columns/editor-rtl.css\";i:85;s:26:\"columns/editor-rtl.min.css\";i:86;s:18:\"columns/editor.css\";i:87;s:22:\"columns/editor.min.css\";i:88;s:21:\"columns/style-rtl.css\";i:89;s:25:\"columns/style-rtl.min.css\";i:90;s:17:\"columns/style.css\";i:91;s:21:\"columns/style.min.css\";i:92;s:33:\"comment-author-name/style-rtl.css\";i:93;s:37:\"comment-author-name/style-rtl.min.css\";i:94;s:29:\"comment-author-name/style.css\";i:95;s:33:\"comment-author-name/style.min.css\";i:96;s:29:\"comment-content/style-rtl.css\";i:97;s:33:\"comment-content/style-rtl.min.css\";i:98;s:25:\"comment-content/style.css\";i:99;s:29:\"comment-content/style.min.css\";i:100;s:26:\"comment-date/style-rtl.css\";i:101;s:30:\"comment-date/style-rtl.min.css\";i:102;s:22:\"comment-date/style.css\";i:103;s:26:\"comment-date/style.min.css\";i:104;s:31:\"comment-edit-link/style-rtl.css\";i:105;s:35:\"comment-edit-link/style-rtl.min.css\";i:106;s:27:\"comment-edit-link/style.css\";i:107;s:31:\"comment-edit-link/style.min.css\";i:108;s:32:\"comment-reply-link/style-rtl.css\";i:109;s:36:\"comment-reply-link/style-rtl.min.css\";i:110;s:28:\"comment-reply-link/style.css\";i:111;s:32:\"comment-reply-link/style.min.css\";i:112;s:30:\"comment-template/style-rtl.css\";i:113;s:34:\"comment-template/style-rtl.min.css\";i:114;s:26:\"comment-template/style.css\";i:115;s:30:\"comment-template/style.min.css\";i:116;s:42:\"comments-pagination-numbers/editor-rtl.css\";i:117;s:46:\"comments-pagination-numbers/editor-rtl.min.css\";i:118;s:38:\"comments-pagination-numbers/editor.css\";i:119;s:42:\"comments-pagination-numbers/editor.min.css\";i:120;s:34:\"comments-pagination/editor-rtl.css\";i:121;s:38:\"comments-pagination/editor-rtl.min.css\";i:122;s:30:\"comments-pagination/editor.css\";i:123;s:34:\"comments-pagination/editor.min.css\";i:124;s:33:\"comments-pagination/style-rtl.css\";i:125;s:37:\"comments-pagination/style-rtl.min.css\";i:126;s:29:\"comments-pagination/style.css\";i:127;s:33:\"comments-pagination/style.min.css\";i:128;s:29:\"comments-title/editor-rtl.css\";i:129;s:33:\"comments-title/editor-rtl.min.css\";i:130;s:25:\"comments-title/editor.css\";i:131;s:29:\"comments-title/editor.min.css\";i:132;s:23:\"comments/editor-rtl.css\";i:133;s:27:\"comments/editor-rtl.min.css\";i:134;s:19:\"comments/editor.css\";i:135;s:23:\"comments/editor.min.css\";i:136;s:22:\"comments/style-rtl.css\";i:137;s:26:\"comments/style-rtl.min.css\";i:138;s:18:\"comments/style.css\";i:139;s:22:\"comments/style.min.css\";i:140;s:20:\"cover/editor-rtl.css\";i:141;s:24:\"cover/editor-rtl.min.css\";i:142;s:16:\"cover/editor.css\";i:143;s:20:\"cover/editor.min.css\";i:144;s:19:\"cover/style-rtl.css\";i:145;s:23:\"cover/style-rtl.min.css\";i:146;s:15:\"cover/style.css\";i:147;s:19:\"cover/style.min.css\";i:148;s:22:\"details/editor-rtl.css\";i:149;s:26:\"details/editor-rtl.min.css\";i:150;s:18:\"details/editor.css\";i:151;s:22:\"details/editor.min.css\";i:152;s:21:\"details/style-rtl.css\";i:153;s:25:\"details/style-rtl.min.css\";i:154;s:17:\"details/style.css\";i:155;s:21:\"details/style.min.css\";i:156;s:20:\"embed/editor-rtl.css\";i:157;s:24:\"embed/editor-rtl.min.css\";i:158;s:16:\"embed/editor.css\";i:159;s:20:\"embed/editor.min.css\";i:160;s:19:\"embed/style-rtl.css\";i:161;s:23:\"embed/style-rtl.min.css\";i:162;s:15:\"embed/style.css\";i:163;s:19:\"embed/style.min.css\";i:164;s:19:\"embed/theme-rtl.css\";i:165;s:23:\"embed/theme-rtl.min.css\";i:166;s:15:\"embed/theme.css\";i:167;s:19:\"embed/theme.min.css\";i:168;s:19:\"file/editor-rtl.css\";i:169;s:23:\"file/editor-rtl.min.css\";i:170;s:15:\"file/editor.css\";i:171;s:19:\"file/editor.min.css\";i:172;s:18:\"file/style-rtl.css\";i:173;s:22:\"file/style-rtl.min.css\";i:174;s:14:\"file/style.css\";i:175;s:18:\"file/style.min.css\";i:176;s:23:\"footnotes/style-rtl.css\";i:177;s:27:\"footnotes/style-rtl.min.css\";i:178;s:19:\"footnotes/style.css\";i:179;s:23:\"footnotes/style.min.css\";i:180;s:23:\"freeform/editor-rtl.css\";i:181;s:27:\"freeform/editor-rtl.min.css\";i:182;s:19:\"freeform/editor.css\";i:183;s:23:\"freeform/editor.min.css\";i:184;s:22:\"gallery/editor-rtl.css\";i:185;s:26:\"gallery/editor-rtl.min.css\";i:186;s:18:\"gallery/editor.css\";i:187;s:22:\"gallery/editor.min.css\";i:188;s:21:\"gallery/style-rtl.css\";i:189;s:25:\"gallery/style-rtl.min.css\";i:190;s:17:\"gallery/style.css\";i:191;s:21:\"gallery/style.min.css\";i:192;s:21:\"gallery/theme-rtl.css\";i:193;s:25:\"gallery/theme-rtl.min.css\";i:194;s:17:\"gallery/theme.css\";i:195;s:21:\"gallery/theme.min.css\";i:196;s:20:\"group/editor-rtl.css\";i:197;s:24:\"group/editor-rtl.min.css\";i:198;s:16:\"group/editor.css\";i:199;s:20:\"group/editor.min.css\";i:200;s:19:\"group/style-rtl.css\";i:201;s:23:\"group/style-rtl.min.css\";i:202;s:15:\"group/style.css\";i:203;s:19:\"group/style.min.css\";i:204;s:19:\"group/theme-rtl.css\";i:205;s:23:\"group/theme-rtl.min.css\";i:206;s:15:\"group/theme.css\";i:207;s:19:\"group/theme.min.css\";i:208;s:21:\"heading/style-rtl.css\";i:209;s:25:\"heading/style-rtl.min.css\";i:210;s:17:\"heading/style.css\";i:211;s:21:\"heading/style.min.css\";i:212;s:19:\"html/editor-rtl.css\";i:213;s:23:\"html/editor-rtl.min.css\";i:214;s:15:\"html/editor.css\";i:215;s:19:\"html/editor.min.css\";i:216;s:20:\"image/editor-rtl.css\";i:217;s:24:\"image/editor-rtl.min.css\";i:218;s:16:\"image/editor.css\";i:219;s:20:\"image/editor.min.css\";i:220;s:19:\"image/style-rtl.css\";i:221;s:23:\"image/style-rtl.min.css\";i:222;s:15:\"image/style.css\";i:223;s:19:\"image/style.min.css\";i:224;s:19:\"image/theme-rtl.css\";i:225;s:23:\"image/theme-rtl.min.css\";i:226;s:15:\"image/theme.css\";i:227;s:19:\"image/theme.min.css\";i:228;s:29:\"latest-comments/style-rtl.css\";i:229;s:33:\"latest-comments/style-rtl.min.css\";i:230;s:25:\"latest-comments/style.css\";i:231;s:29:\"latest-comments/style.min.css\";i:232;s:27:\"latest-posts/editor-rtl.css\";i:233;s:31:\"latest-posts/editor-rtl.min.css\";i:234;s:23:\"latest-posts/editor.css\";i:235;s:27:\"latest-posts/editor.min.css\";i:236;s:26:\"latest-posts/style-rtl.css\";i:237;s:30:\"latest-posts/style-rtl.min.css\";i:238;s:22:\"latest-posts/style.css\";i:239;s:26:\"latest-posts/style.min.css\";i:240;s:18:\"list/style-rtl.css\";i:241;s:22:\"list/style-rtl.min.css\";i:242;s:14:\"list/style.css\";i:243;s:18:\"list/style.min.css\";i:244;s:22:\"loginout/style-rtl.css\";i:245;s:26:\"loginout/style-rtl.min.css\";i:246;s:18:\"loginout/style.css\";i:247;s:22:\"loginout/style.min.css\";i:248;s:19:\"math/editor-rtl.css\";i:249;s:23:\"math/editor-rtl.min.css\";i:250;s:15:\"math/editor.css\";i:251;s:19:\"math/editor.min.css\";i:252;s:18:\"math/style-rtl.css\";i:253;s:22:\"math/style-rtl.min.css\";i:254;s:14:\"math/style.css\";i:255;s:18:\"math/style.min.css\";i:256;s:25:\"media-text/editor-rtl.css\";i:257;s:29:\"media-text/editor-rtl.min.css\";i:258;s:21:\"media-text/editor.css\";i:259;s:25:\"media-text/editor.min.css\";i:260;s:24:\"media-text/style-rtl.css\";i:261;s:28:\"media-text/style-rtl.min.css\";i:262;s:20:\"media-text/style.css\";i:263;s:24:\"media-text/style.min.css\";i:264;s:19:\"more/editor-rtl.css\";i:265;s:23:\"more/editor-rtl.min.css\";i:266;s:15:\"more/editor.css\";i:267;s:19:\"more/editor.min.css\";i:268;s:30:\"navigation-link/editor-rtl.css\";i:269;s:34:\"navigation-link/editor-rtl.min.css\";i:270;s:26:\"navigation-link/editor.css\";i:271;s:30:\"navigation-link/editor.min.css\";i:272;s:29:\"navigation-link/style-rtl.css\";i:273;s:33:\"navigation-link/style-rtl.min.css\";i:274;s:25:\"navigation-link/style.css\";i:275;s:29:\"navigation-link/style.min.css\";i:276;s:33:\"navigation-submenu/editor-rtl.css\";i:277;s:37:\"navigation-submenu/editor-rtl.min.css\";i:278;s:29:\"navigation-submenu/editor.css\";i:279;s:33:\"navigation-submenu/editor.min.css\";i:280;s:25:\"navigation/editor-rtl.css\";i:281;s:29:\"navigation/editor-rtl.min.css\";i:282;s:21:\"navigation/editor.css\";i:283;s:25:\"navigation/editor.min.css\";i:284;s:24:\"navigation/style-rtl.css\";i:285;s:28:\"navigation/style-rtl.min.css\";i:286;s:20:\"navigation/style.css\";i:287;s:24:\"navigation/style.min.css\";i:288;s:23:\"nextpage/editor-rtl.css\";i:289;s:27:\"nextpage/editor-rtl.min.css\";i:290;s:19:\"nextpage/editor.css\";i:291;s:23:\"nextpage/editor.min.css\";i:292;s:24:\"page-list/editor-rtl.css\";i:293;s:28:\"page-list/editor-rtl.min.css\";i:294;s:20:\"page-list/editor.css\";i:295;s:24:\"page-list/editor.min.css\";i:296;s:23:\"page-list/style-rtl.css\";i:297;s:27:\"page-list/style-rtl.min.css\";i:298;s:19:\"page-list/style.css\";i:299;s:23:\"page-list/style.min.css\";i:300;s:24:\"paragraph/editor-rtl.css\";i:301;s:28:\"paragraph/editor-rtl.min.css\";i:302;s:20:\"paragraph/editor.css\";i:303;s:24:\"paragraph/editor.min.css\";i:304;s:23:\"paragraph/style-rtl.css\";i:305;s:27:\"paragraph/style-rtl.min.css\";i:306;s:19:\"paragraph/style.css\";i:307;s:23:\"paragraph/style.min.css\";i:308;s:35:\"post-author-biography/style-rtl.css\";i:309;s:39:\"post-author-biography/style-rtl.min.css\";i:310;s:31:\"post-author-biography/style.css\";i:311;s:35:\"post-author-biography/style.min.css\";i:312;s:30:\"post-author-name/style-rtl.css\";i:313;s:34:\"post-author-name/style-rtl.min.css\";i:314;s:26:\"post-author-name/style.css\";i:315;s:30:\"post-author-name/style.min.css\";i:316;s:25:\"post-author/style-rtl.css\";i:317;s:29:\"post-author/style-rtl.min.css\";i:318;s:21:\"post-author/style.css\";i:319;s:25:\"post-author/style.min.css\";i:320;s:33:\"post-comments-count/style-rtl.css\";i:321;s:37:\"post-comments-count/style-rtl.min.css\";i:322;s:29:\"post-comments-count/style.css\";i:323;s:33:\"post-comments-count/style.min.css\";i:324;s:33:\"post-comments-form/editor-rtl.css\";i:325;s:37:\"post-comments-form/editor-rtl.min.css\";i:326;s:29:\"post-comments-form/editor.css\";i:327;s:33:\"post-comments-form/editor.min.css\";i:328;s:32:\"post-comments-form/style-rtl.css\";i:329;s:36:\"post-comments-form/style-rtl.min.css\";i:330;s:28:\"post-comments-form/style.css\";i:331;s:32:\"post-comments-form/style.min.css\";i:332;s:32:\"post-comments-link/style-rtl.css\";i:333;s:36:\"post-comments-link/style-rtl.min.css\";i:334;s:28:\"post-comments-link/style.css\";i:335;s:32:\"post-comments-link/style.min.css\";i:336;s:26:\"post-content/style-rtl.css\";i:337;s:30:\"post-content/style-rtl.min.css\";i:338;s:22:\"post-content/style.css\";i:339;s:26:\"post-content/style.min.css\";i:340;s:23:\"post-date/style-rtl.css\";i:341;s:27:\"post-date/style-rtl.min.css\";i:342;s:19:\"post-date/style.css\";i:343;s:23:\"post-date/style.min.css\";i:344;s:27:\"post-excerpt/editor-rtl.css\";i:345;s:31:\"post-excerpt/editor-rtl.min.css\";i:346;s:23:\"post-excerpt/editor.css\";i:347;s:27:\"post-excerpt/editor.min.css\";i:348;s:26:\"post-excerpt/style-rtl.css\";i:349;s:30:\"post-excerpt/style-rtl.min.css\";i:350;s:22:\"post-excerpt/style.css\";i:351;s:26:\"post-excerpt/style.min.css\";i:352;s:34:\"post-featured-image/editor-rtl.css\";i:353;s:38:\"post-featured-image/editor-rtl.min.css\";i:354;s:30:\"post-featured-image/editor.css\";i:355;s:34:\"post-featured-image/editor.min.css\";i:356;s:33:\"post-featured-image/style-rtl.css\";i:357;s:37:\"post-featured-image/style-rtl.min.css\";i:358;s:29:\"post-featured-image/style.css\";i:359;s:33:\"post-featured-image/style.min.css\";i:360;s:34:\"post-navigation-link/style-rtl.css\";i:361;s:38:\"post-navigation-link/style-rtl.min.css\";i:362;s:30:\"post-navigation-link/style.css\";i:363;s:34:\"post-navigation-link/style.min.css\";i:364;s:27:\"post-template/style-rtl.css\";i:365;s:31:\"post-template/style-rtl.min.css\";i:366;s:23:\"post-template/style.css\";i:367;s:27:\"post-template/style.min.css\";i:368;s:24:\"post-terms/style-rtl.css\";i:369;s:28:\"post-terms/style-rtl.min.css\";i:370;s:20:\"post-terms/style.css\";i:371;s:24:\"post-terms/style.min.css\";i:372;s:31:\"post-time-to-read/style-rtl.css\";i:373;s:35:\"post-time-to-read/style-rtl.min.css\";i:374;s:27:\"post-time-to-read/style.css\";i:375;s:31:\"post-time-to-read/style.min.css\";i:376;s:24:\"post-title/style-rtl.css\";i:377;s:28:\"post-title/style-rtl.min.css\";i:378;s:20:\"post-title/style.css\";i:379;s:24:\"post-title/style.min.css\";i:380;s:26:\"preformatted/style-rtl.css\";i:381;s:30:\"preformatted/style-rtl.min.css\";i:382;s:22:\"preformatted/style.css\";i:383;s:26:\"preformatted/style.min.css\";i:384;s:24:\"pullquote/editor-rtl.css\";i:385;s:28:\"pullquote/editor-rtl.min.css\";i:386;s:20:\"pullquote/editor.css\";i:387;s:24:\"pullquote/editor.min.css\";i:388;s:23:\"pullquote/style-rtl.css\";i:389;s:27:\"pullquote/style-rtl.min.css\";i:390;s:19:\"pullquote/style.css\";i:391;s:23:\"pullquote/style.min.css\";i:392;s:23:\"pullquote/theme-rtl.css\";i:393;s:27:\"pullquote/theme-rtl.min.css\";i:394;s:19:\"pullquote/theme.css\";i:395;s:23:\"pullquote/theme.min.css\";i:396;s:39:\"query-pagination-numbers/editor-rtl.css\";i:397;s:43:\"query-pagination-numbers/editor-rtl.min.css\";i:398;s:35:\"query-pagination-numbers/editor.css\";i:399;s:39:\"query-pagination-numbers/editor.min.css\";i:400;s:31:\"query-pagination/editor-rtl.css\";i:401;s:35:\"query-pagination/editor-rtl.min.css\";i:402;s:27:\"query-pagination/editor.css\";i:403;s:31:\"query-pagination/editor.min.css\";i:404;s:30:\"query-pagination/style-rtl.css\";i:405;s:34:\"query-pagination/style-rtl.min.css\";i:406;s:26:\"query-pagination/style.css\";i:407;s:30:\"query-pagination/style.min.css\";i:408;s:25:\"query-title/style-rtl.css\";i:409;s:29:\"query-title/style-rtl.min.css\";i:410;s:21:\"query-title/style.css\";i:411;s:25:\"query-title/style.min.css\";i:412;s:25:\"query-total/style-rtl.css\";i:413;s:29:\"query-total/style-rtl.min.css\";i:414;s:21:\"query-total/style.css\";i:415;s:25:\"query-total/style.min.css\";i:416;s:20:\"query/editor-rtl.css\";i:417;s:24:\"query/editor-rtl.min.css\";i:418;s:16:\"query/editor.css\";i:419;s:20:\"query/editor.min.css\";i:420;s:19:\"quote/style-rtl.css\";i:421;s:23:\"quote/style-rtl.min.css\";i:422;s:15:\"quote/style.css\";i:423;s:19:\"quote/style.min.css\";i:424;s:19:\"quote/theme-rtl.css\";i:425;s:23:\"quote/theme-rtl.min.css\";i:426;s:15:\"quote/theme.css\";i:427;s:19:\"quote/theme.min.css\";i:428;s:23:\"read-more/style-rtl.css\";i:429;s:27:\"read-more/style-rtl.min.css\";i:430;s:19:\"read-more/style.css\";i:431;s:23:\"read-more/style.min.css\";i:432;s:18:\"rss/editor-rtl.css\";i:433;s:22:\"rss/editor-rtl.min.css\";i:434;s:14:\"rss/editor.css\";i:435;s:18:\"rss/editor.min.css\";i:436;s:17:\"rss/style-rtl.css\";i:437;s:21:\"rss/style-rtl.min.css\";i:438;s:13:\"rss/style.css\";i:439;s:17:\"rss/style.min.css\";i:440;s:21:\"search/editor-rtl.css\";i:441;s:25:\"search/editor-rtl.min.css\";i:442;s:17:\"search/editor.css\";i:443;s:21:\"search/editor.min.css\";i:444;s:20:\"search/style-rtl.css\";i:445;s:24:\"search/style-rtl.min.css\";i:446;s:16:\"search/style.css\";i:447;s:20:\"search/style.min.css\";i:448;s:20:\"search/theme-rtl.css\";i:449;s:24:\"search/theme-rtl.min.css\";i:450;s:16:\"search/theme.css\";i:451;s:20:\"search/theme.min.css\";i:452;s:24:\"separator/editor-rtl.css\";i:453;s:28:\"separator/editor-rtl.min.css\";i:454;s:20:\"separator/editor.css\";i:455;s:24:\"separator/editor.min.css\";i:456;s:23:\"separator/style-rtl.css\";i:457;s:27:\"separator/style-rtl.min.css\";i:458;s:19:\"separator/style.css\";i:459;s:23:\"separator/style.min.css\";i:460;s:23:\"separator/theme-rtl.css\";i:461;s:27:\"separator/theme-rtl.min.css\";i:462;s:19:\"separator/theme.css\";i:463;s:23:\"separator/theme.min.css\";i:464;s:24:\"shortcode/editor-rtl.css\";i:465;s:28:\"shortcode/editor-rtl.min.css\";i:466;s:20:\"shortcode/editor.css\";i:467;s:24:\"shortcode/editor.min.css\";i:468;s:24:\"site-logo/editor-rtl.css\";i:469;s:28:\"site-logo/editor-rtl.min.css\";i:470;s:20:\"site-logo/editor.css\";i:471;s:24:\"site-logo/editor.min.css\";i:472;s:23:\"site-logo/style-rtl.css\";i:473;s:27:\"site-logo/style-rtl.min.css\";i:474;s:19:\"site-logo/style.css\";i:475;s:23:\"site-logo/style.min.css\";i:476;s:27:\"site-tagline/editor-rtl.css\";i:477;s:31:\"site-tagline/editor-rtl.min.css\";i:478;s:23:\"site-tagline/editor.css\";i:479;s:27:\"site-tagline/editor.min.css\";i:480;s:26:\"site-tagline/style-rtl.css\";i:481;s:30:\"site-tagline/style-rtl.min.css\";i:482;s:22:\"site-tagline/style.css\";i:483;s:26:\"site-tagline/style.min.css\";i:484;s:25:\"site-title/editor-rtl.css\";i:485;s:29:\"site-title/editor-rtl.min.css\";i:486;s:21:\"site-title/editor.css\";i:487;s:25:\"site-title/editor.min.css\";i:488;s:24:\"site-title/style-rtl.css\";i:489;s:28:\"site-title/style-rtl.min.css\";i:490;s:20:\"site-title/style.css\";i:491;s:24:\"site-title/style.min.css\";i:492;s:26:\"social-link/editor-rtl.css\";i:493;s:30:\"social-link/editor-rtl.min.css\";i:494;s:22:\"social-link/editor.css\";i:495;s:26:\"social-link/editor.min.css\";i:496;s:27:\"social-links/editor-rtl.css\";i:497;s:31:\"social-links/editor-rtl.min.css\";i:498;s:23:\"social-links/editor.css\";i:499;s:27:\"social-links/editor.min.css\";i:500;s:26:\"social-links/style-rtl.css\";i:501;s:30:\"social-links/style-rtl.min.css\";i:502;s:22:\"social-links/style.css\";i:503;s:26:\"social-links/style.min.css\";i:504;s:21:\"spacer/editor-rtl.css\";i:505;s:25:\"spacer/editor-rtl.min.css\";i:506;s:17:\"spacer/editor.css\";i:507;s:21:\"spacer/editor.min.css\";i:508;s:20:\"spacer/style-rtl.css\";i:509;s:24:\"spacer/style-rtl.min.css\";i:510;s:16:\"spacer/style.css\";i:511;s:20:\"spacer/style.min.css\";i:512;s:20:\"table/editor-rtl.css\";i:513;s:24:\"table/editor-rtl.min.css\";i:514;s:16:\"table/editor.css\";i:515;s:20:\"table/editor.min.css\";i:516;s:19:\"table/style-rtl.css\";i:517;s:23:\"table/style-rtl.min.css\";i:518;s:15:\"table/style.css\";i:519;s:19:\"table/style.min.css\";i:520;s:19:\"table/theme-rtl.css\";i:521;s:23:\"table/theme-rtl.min.css\";i:522;s:15:\"table/theme.css\";i:523;s:19:\"table/theme.min.css\";i:524;s:24:\"tag-cloud/editor-rtl.css\";i:525;s:28:\"tag-cloud/editor-rtl.min.css\";i:526;s:20:\"tag-cloud/editor.css\";i:527;s:24:\"tag-cloud/editor.min.css\";i:528;s:23:\"tag-cloud/style-rtl.css\";i:529;s:27:\"tag-cloud/style-rtl.min.css\";i:530;s:19:\"tag-cloud/style.css\";i:531;s:23:\"tag-cloud/style.min.css\";i:532;s:28:\"template-part/editor-rtl.css\";i:533;s:32:\"template-part/editor-rtl.min.css\";i:534;s:24:\"template-part/editor.css\";i:535;s:28:\"template-part/editor.min.css\";i:536;s:27:\"template-part/theme-rtl.css\";i:537;s:31:\"template-part/theme-rtl.min.css\";i:538;s:23:\"template-part/theme.css\";i:539;s:27:\"template-part/theme.min.css\";i:540;s:24:\"term-count/style-rtl.css\";i:541;s:28:\"term-count/style-rtl.min.css\";i:542;s:20:\"term-count/style.css\";i:543;s:24:\"term-count/style.min.css\";i:544;s:30:\"term-description/style-rtl.css\";i:545;s:34:\"term-description/style-rtl.min.css\";i:546;s:26:\"term-description/style.css\";i:547;s:30:\"term-description/style.min.css\";i:548;s:23:\"term-name/style-rtl.css\";i:549;s:27:\"term-name/style-rtl.min.css\";i:550;s:19:\"term-name/style.css\";i:551;s:23:\"term-name/style.min.css\";i:552;s:28:\"term-template/editor-rtl.css\";i:553;s:32:\"term-template/editor-rtl.min.css\";i:554;s:24:\"term-template/editor.css\";i:555;s:28:\"term-template/editor.min.css\";i:556;s:27:\"term-template/style-rtl.css\";i:557;s:31:\"term-template/style-rtl.min.css\";i:558;s:23:\"term-template/style.css\";i:559;s:27:\"term-template/style.min.css\";i:560;s:27:\"text-columns/editor-rtl.css\";i:561;s:31:\"text-columns/editor-rtl.min.css\";i:562;s:23:\"text-columns/editor.css\";i:563;s:27:\"text-columns/editor.min.css\";i:564;s:26:\"text-columns/style-rtl.css\";i:565;s:30:\"text-columns/style-rtl.min.css\";i:566;s:22:\"text-columns/style.css\";i:567;s:26:\"text-columns/style.min.css\";i:568;s:19:\"verse/style-rtl.css\";i:569;s:23:\"verse/style-rtl.min.css\";i:570;s:15:\"verse/style.css\";i:571;s:19:\"verse/style.min.css\";i:572;s:20:\"video/editor-rtl.css\";i:573;s:24:\"video/editor-rtl.min.css\";i:574;s:16:\"video/editor.css\";i:575;s:20:\"video/editor.min.css\";i:576;s:19:\"video/style-rtl.css\";i:577;s:23:\"video/style-rtl.min.css\";i:578;s:15:\"video/style.css\";i:579;s:19:\"video/style.min.css\";i:580;s:19:\"video/theme-rtl.css\";i:581;s:23:\"video/theme-rtl.min.css\";i:582;s:15:\"video/theme.css\";i:583;s:19:\"video/theme.min.css\";}}','on'), +(125,'recovery_keys','a:0:{}','off'), +(126,'WPLANG','','auto'), +(127,'_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:57:\"https://downloads.wordpress.org/release/wordpress-6.9.zip\";s:6:\"locale\";s:5:\"en_US\";s:8:\"packages\";O:8:\"stdClass\":5:{s:4:\"full\";s:57:\"https://downloads.wordpress.org/release/wordpress-6.9.zip\";s:10:\"no_content\";s:68:\"https://downloads.wordpress.org/release/wordpress-6.9-no-content.zip\";s:11:\"new_bundled\";s:69:\"https://downloads.wordpress.org/release/wordpress-6.9-new-bundled.zip\";s:7:\"partial\";s:0:\"\";s:8:\"rollback\";s:0:\"\";}s:7:\"current\";s:3:\"6.9\";s:7:\"version\";s:3:\"6.9\";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:1764778504;s:15:\"version_checked\";s:3:\"6.9\";s:12:\"translations\";a:0:{}}','off'), +(150,'_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.5.3\";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.8.3\";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:46;i:4;i:1;i:3;i:1;i:2;i:0;i:1;i:0;}s:11:\"num_ratings\";i:48;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-11-24 10:42pm 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:34328:\"

2.5.3

\n

Other Changes

\n
    \n
  • fix(#3438, #1999): Media item privacy inheritance and attachment status queries (https://github.com/jasonbahl/automation-tests/pull/3444)
  • \n
  • chore: cleanup orphaned files and configs (https://github.com/jasonbahl/automation-tests/pull/3442)
  • \n
\n

2.5.2

\n

Bug Fixes

\n
    \n
  • fix: Prevent fatal error when updating options via /wp-admin/options.php (https://github.com/jasonbahl/automation-tests/pull/3440)
  • \n
\n

2.5.1

\n

Bug Fixes

\n
    \n
  • fix: Add fallback sizes to MediaItemSizeEnum when intermediate sizes are disabled (https://github.com/jasonbahl/automation-tests/pull/3433)
  • \n
\n

2.5.0

\n

Note: Version 2.4.0 was skipped due to an issue with the release automation workflow where the version was bumped twice (once manually and once by the workflow). The fixes included in this release were originally intended for v2.4.0, but to maintain consistency with the WordPress.org deployment, we’re releasing as v2.5.0 instead. The workflow has been updated to prevent this issue in future releases.

\n

New Features

\n
    \n
  • feat: Implement WPGraphQL Experiments API (https://github.com/jasonbahl/automation-tests/pull/3428)
  • \n
  • feat: Add namespaced get/set API to AppContext (with deprecation for dynamic properties) (https://github.com/jasonbahl/automation-tests/pull/3429)
  • \n
\n

Bug Fixes

\n
    \n
  • fix: Release Workflow Version Skipping Issue (https://github.com/jasonbahl/automation-tests/pull/3426)
  • \n
  • fix: use get_query_args and merge args instead of override via set_query_arg (https://github.com/jasonbahl/automation-tests/pull/3424)
  • \n
\n

2.3.8

\n

New Features

\n
    \n
  • feat: Implement WPGraphQL Experiments API (https://github.com/jasonbahl/automation-tests/pull/3428)
  • \n
  • feat: Add namespaced get/set API to AppContext (with deprecation for dynamic properties) (https://github.com/jasonbahl/automation-tests/pull/3429)
  • \n
\n

Bug Fixes

\n
    \n
  • fix: Release Workflow Version Skipping Issue (https://github.com/jasonbahl/automation-tests/pull/3426)
  • \n
  • fix: use get_query_args and merge args instead of override via set_query_arg (https://github.com/jasonbahl/automation-tests/pull/3424)
  • \n
\n

2.3.7

\n

Bug Fixes

\n
    \n
  • fix: Prevent bad string injection in plugin update message (#3318) (https://github.com/jasonbahl/automation-tests/pull/3419)
  • \n
\n

2.3.6

\n

Bug Fixes

\n
    \n
  • fix: update failing e2e tests for graphiql (https://github.com/jasonbahl/automation-tests/pull/3414)
  • \n
  • fix: Prevent printed scripts from breaking GraphQL responses (https://github.com/jasonbahl/automation-tests/pull/3413)
  • \n
  • fix: prevent changeset deletions from being synced back to develop (https://github.com/jasonbahl/automation-tests/pull/3412)
  • \n
  • fix: wp 6.8 test failures (https://github.com/jasonbahl/automation-tests/pull/3410)
  • \n
  • fix: Move graphql_root_value filter execution to runtime for access to request params (https://github.com/jasonbahl/automation-tests/pull/3406)
  • \n
  • fix: make void and call on (https://github.com/jasonbahl/automation-tests/pull/3371)
  • \n
\n

Other Changes

\n
    \n
  • chore: update npm deps (https://github.com/jasonbahl/automation-tests/pull/3408)
  • \n
  • chore: update composer deps (https://github.com/jasonbahl/automation-tests/pull/3407)
  • \n
  • refactor: prepare deprecations for v3 removal (https://github.com/jasonbahl/automation-tests/pull/3400)
  • \n
\n

2.3.5

\n

Bug Fixes

\n
    \n
  • fix: prevent changeset deletions from being synced back to develop (https://github.com/jasonbahl/automation-tests/pull/3412)
  • \n
  • fix: wp 6.8 test failures (https://github.com/jasonbahl/automation-tests/pull/3410)
  • \n
  • fix: Move graphql_root_value filter execution to runtime for access to request params (https://github.com/jasonbahl/automation-tests/pull/3406)
  • \n
\n

Other Changes

\n
    \n
  • chore: update npm deps (https://github.com/jasonbahl/automation-tests/pull/3408)
  • \n
  • chore: update composer deps (https://github.com/jasonbahl/automation-tests/pull/3407)
  • \n
  • refactor: prepare deprecations for v3 removal (https://github.com/jasonbahl/automation-tests/pull/3400)
  • \n
\n

2.3.4

\n

Bug Fixes

\n
    \n
  • fix: make void and call on (https://github.com/jasonbahl/automation-tests/pull/3371)
  • \n
\n

2.3.3

\n

Bug Fixes

\n
    \n
  • fix: update skipped since tags (https://github.com/jasonbahl/automation-tests/pull/3372)
  • \n
  • fix: check for preloaded AppContext::get_loader() (https://github.com/jasonbahl/automation-tests/pull/3384)
  • \n
  • fix: cleanup logic (https://github.com/jasonbahl/automation-tests/pull/3383)
  • \n
\n

Other Changes

\n
    \n
  • chore: improve type safety of and schema registration (https://github.com/jasonbahl/automation-tests/pull/3382)
  • \n
  • refactor: cleanup class to reduce complexity and improve type safety (https://github.com/jasonbahl/automation-tests/pull/3381)
  • \n
  • perf: refactor to lazy-load dataloaders (https://github.com/jasonbahl/automation-tests/pull/3380)
  • \n
  • chore: update Composer dev-deps and PHPCs ruleset (https://github.com/jasonbahl/automation-tests/pull/3379)
  • \n
  • chore: expose array shape for (https://github.com/jasonbahl/automation-tests/pull/3374)
  • \n
  • chore: expose array shapes for register_graphql_enum_type() (https://github.com/jasonbahl/automation-tests/pull/3373)
  • \n
  • chore: narrow/fix php types on WPGraphQL, Server, Utils namespaces (https://github.com/jasonbahl/automation-tests/pull/3368)
  • \n
\n

2.3.2

\n

Other Changes

\n
    \n
  • chore: improve type safety of and schema registration (https://github.com/jasonbahl/automation-tests/pull/3382)
  • \n
  • refactor: cleanup class to reduce complexity and improve type safety (https://github.com/jasonbahl/automation-tests/pull/3381)
  • \n
  • perf: refactor to lazy-load dataloaders (https://github.com/jasonbahl/automation-tests/pull/3380)
  • \n
  • chore: update Composer dev-deps and PHPCs ruleset (https://github.com/jasonbahl/automation-tests/pull/3379)
  • \n
\n

2.3.1

\n

Other Changes

\n
    \n
  • chore: expose array shape for (https://github.com/jasonbahl/automation-tests/pull/3374)
  • \n
  • chore: expose array shapes for register_graphql_enum_type() (https://github.com/jasonbahl/automation-tests/pull/3373)
  • \n
  • chore: narrow/fix php types on WPGraphQL, Server, Utils namespaces (https://github.com/jasonbahl/automation-tests/pull/3368)
  • \n
\n

2.3.0

\n

New Features

\n
    \n
  • feat: lazy loading fields for Object Types and Interface Types (https://github.com/jasonbahl/automation-tests/pull/3356)
  • \n
  • feat: Update Enum Type descriptions (https://github.com/jasonbahl/automation-tests/pull/3355)
  • \n
\n

Bug Fixes

\n
    \n
  • fix: don’t initialize twice in class constructor (https://github.com/jasonbahl/automation-tests/pull/3369)
  • \n
  • fix: cleanup Model fields for better source-of-truth and type-safety. (https://github.com/jasonbahl/automation-tests/pull/3363)
  • \n
  • fix: bump and remove 7.3 references (https://github.com/jasonbahl/automation-tests/pull/3360)
  • \n
\n

Other Changes

\n
    \n
  • chore: improve type-safety for class (https://github.com/jasonbahl/automation-tests/pull/3367)
  • \n
  • chore: add array shapes to and (https://github.com/jasonbahl/automation-tests/pull/3366)
  • \n
  • chore: inline (non-breaking) native return types (https://github.com/jasonbahl/automation-tests/pull/3362)
  • \n
  • chore: implement array shapes for (https://github.com/jasonbahl/automation-tests/pull/3364)
  • \n
  • chore: Test compatibility with WordPress 6.8 (https://github.com/jasonbahl/automation-tests/pull/3361)
  • \n
  • ci: trigger Codeception workflow more often (https://github.com/jasonbahl/automation-tests/pull/3359)
  • \n
  • chore: Update Composer deps (https://github.com/jasonbahl/automation-tests/pull/3358)
  • \n
\n

2.2.0

\n

New Features

\n
    \n
  • feat: add support for graphql_description on register_post_type and register_taxonomy (https://github.com/jasonbahl/automation-tests/pull/3346)
  • \n
\n

Other Changes

\n
    \n
  • chore: update placeholder that didn’t properly get replaced during release (https://github.com/jasonbahl/automation-tests/pull/3349)
  • \n
  • chore: update interface descriptions (https://github.com/jasonbahl/automation-tests/pull/3347)
  • \n
\n

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:16212:\"
\n
\n
\n
\n

Speedy

\n
\n
\n
\n

\n By \'\'con (conschneider) on March 26, 2025

\n
\n
\n
GraphQL vs. REST API\n 10 : 0\n\nThank you for this plugin. Building my headless application with WPGraphQL is fun. \nThe repl interface to test queries is A+.
\n
\n
\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\";}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:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.5.3.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:149:{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:\"2.2.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.2.0.zip\";s:5:\"2.3.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.3.0.zip\";s:5:\"2.3.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.3.3.zip\";s:5:\"2.3.6\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.3.6.zip\";s:5:\"2.3.8\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.3.8.zip\";s:5:\"2.5.0\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.5.0.zip\";s:5:\"2.5.1\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.5.1.zip\";s:5:\"2.5.2\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.5.2.zip\";s:5:\"2.5.3\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.5.3.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\";}}','off'), +(151,'recently_activated','a:0:{}','off'), +(162,'finished_updating_comment_type','1','auto'), +(169,'wp_graphql_version','2.5.3','auto'), +(170,'graphql_general_settings','','auto'), +(171,'acf_first_activated_version','6.3.12','on'), +(172,'acf_site_health','{\"version\":\"6.3.12\",\"plugin_type\":\"Free\",\"update_source\":\"wordpress.org\",\"wp_version\":\"6.7.2\",\"mysql_version\":\"8.0.35\",\"is_multisite\":false,\"active_theme\":{\"name\":\"Twenty Twenty-Five\",\"version\":\"1.0\",\"theme_uri\":\"https:\\/\\/wordpress.org\\/themes\\/twentytwentyfive\\/\",\"stylesheet\":false},\"active_plugins\":{\"advanced-custom-fields\\/acf.php\":{\"name\":\"Advanced Custom Fields\",\"version\":\"6.3.12\",\"plugin_uri\":\"https:\\/\\/www.advancedcustomfields.com\"},\"hwpt-wpgraphql-sitemap\\/hwpt-wpgraphql-sitemap.php\":{\"name\":\"HWPT WPGraphQL Sitemap\",\"version\":\"1.0.0\",\"plugin_uri\":\"\"},\"wp-graphql\\/wp-graphql.php\":{\"name\":\"WPGraphQL\",\"version\":\"2.1.1\",\"plugin_uri\":\"https:\\/\\/github.com\\/wp-graphql\\/wp-graphql\"}},\"ui_field_groups\":\"0\",\"php_field_groups\":\"0\",\"json_field_groups\":\"0\",\"rest_field_groups\":\"0\",\"number_of_fields_by_type\":[],\"number_of_third_party_fields_by_type\":[],\"post_types_enabled\":true,\"ui_post_types\":\"3\",\"json_post_types\":\"0\",\"ui_taxonomies\":\"3\",\"json_taxonomies\":\"0\",\"rest_api_format\":\"light\",\"admin_ui_enabled\":true,\"field_type-modal_enabled\":true,\"field_settings_tabs_enabled\":false,\"shortcode_enabled\":false,\"registered_acf_forms\":\"0\",\"json_save_paths\":1,\"json_load_paths\":1,\"event_first_activated\":1743158563,\"last_updated\":1743159955,\"event_first_created_post_type\":1743159900,\"event_first_created_taxonomy\":1743159955}','off'), +(174,'acf_version','6.3.12','auto'), +(175,'wp-graphql_allow_tracking','no','auto'), +(177,'wp-graphql_tracking_skipped','yes','auto'), +(178,'wpgraphql-acf_allow_tracking','no','auto'), +(180,'wpgraphql-acf_tracking_skipped','yes','auto'), +(185,'wp_calendar_block_has_published_posts','1','auto'), +(187,'theme_mods_twentytwentyfive','a:1:{s:18:\"custom_css_post_id\";i:-1;}','auto'), +(188,'_transient_wp_styles_for_blocks','a:2:{s:4:\"hash\";s:32:\"7fd09879fbd531b73d40fe17062a7523\";s:6:\"blocks\";a:53:{s:11:\"core/button\";s:0:\"\";s:14:\"core/site-logo\";s:0:\"\";s:18:\"core/post-template\";s:0:\"\";s:18:\"core/term-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'), +(203,'category_children','a:0:{}','auto'), +(231,'_site_transient_update_themes','O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1764778505;s:7:\"checked\";a:15:{s:12:\"twentyeleven\";s:3:\"5.0\";s:13:\"twentyfifteen\";s:3:\"4.1\";s:14:\"twentyfourteen\";s:3:\"4.4\";s:14:\"twentynineteen\";s:3:\"3.2\";s:15:\"twentyseventeen\";s:3:\"4.0\";s:13:\"twentysixteen\";s:3:\"3.7\";s:9:\"twentyten\";s:3:\"4.5\";s:14:\"twentythirteen\";s:3:\"4.5\";s:12:\"twentytwelve\";s:3:\"4.7\";s:12:\"twentytwenty\";s:3:\"3.0\";s:16:\"twentytwentyfive\";s:3:\"1.4\";s:16:\"twentytwentyfour\";s:3:\"1.4\";s:15:\"twentytwentyone\";s:3:\"2.7\";s:17:\"twentytwentythree\";s:3:\"1.6\";s:15:\"twentytwentytwo\";s:3:\"2.1\";}s:8:\"response\";a:0:{}s:9:\"no_update\";a:15:{s:12:\"twentyeleven\";a:6:{s:5:\"theme\";s:12:\"twentyeleven\";s:11:\"new_version\";s:3:\"4.9\";s:3:\"url\";s:42:\"https://wordpress.org/themes/twentyeleven/\";s:7:\"package\";s:58:\"https://downloads.wordpress.org/theme/twentyeleven.4.9.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:\"4.0\";s:3:\"url\";s:43:\"https://wordpress.org/themes/twentyfifteen/\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/theme/twentyfifteen.4.0.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.3\";s:3:\"url\";s:44:\"https://wordpress.org/themes/twentyfourteen/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/theme/twentyfourteen.4.3.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.1\";s:3:\"url\";s:44:\"https://wordpress.org/themes/twentynineteen/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/theme/twentynineteen.3.1.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.9\";s:3:\"url\";s:45:\"https://wordpress.org/themes/twentyseventeen/\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/theme/twentyseventeen.3.9.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.6\";s:3:\"url\";s:43:\"https://wordpress.org/themes/twentysixteen/\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/theme/twentysixteen.3.6.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.4\";s:3:\"url\";s:39:\"https://wordpress.org/themes/twentyten/\";s:7:\"package\";s:55:\"https://downloads.wordpress.org/theme/twentyten.4.4.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.4\";s:3:\"url\";s:44:\"https://wordpress.org/themes/twentythirteen/\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/theme/twentythirteen.4.4.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.6\";s:3:\"url\";s:42:\"https://wordpress.org/themes/twentytwelve/\";s:7:\"package\";s:58:\"https://downloads.wordpress.org/theme/twentytwelve.4.6.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.9\";s:3:\"url\";s:42:\"https://wordpress.org/themes/twentytwenty/\";s:7:\"package\";s:58:\"https://downloads.wordpress.org/theme/twentytwenty.2.9.zip\";s:8:\"requires\";s:3:\"4.7\";s:12:\"requires_php\";s:5:\"5.2.4\";}s:16:\"twentytwentyfive\";a:6:{s:5:\"theme\";s:16:\"twentytwentyfive\";s:11:\"new_version\";s:3:\"1.3\";s:3:\"url\";s:46:\"https://wordpress.org/themes/twentytwentyfive/\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/theme/twentytwentyfive.1.3.zip\";s:8:\"requires\";s:3:\"6.7\";s:12:\"requires_php\";s:3:\"7.2\";}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.6\";s:3:\"url\";s:45:\"https://wordpress.org/themes/twentytwentyone/\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/theme/twentytwentyone.2.6.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:\"2.0\";s:3:\"url\";s:45:\"https://wordpress.org/themes/twentytwentytwo/\";s:7:\"package\";s:61:\"https://downloads.wordpress.org/theme/twentytwentytwo.2.0.zip\";s:8:\"requires\";s:3:\"5.9\";s:12:\"requires_php\";s:3:\"5.6\";}}s:12:\"translations\";a:0:{}}','off'), +(235,'new_admin_email','dev-email@wpengine.local','auto'), +(236,'adminhash','a:2:{s:4:\"hash\";s:32:\"0b0afbbdf480cfc1e242b81e5ba23c3d\";s:8:\"newemail\";s:21:\"wordpress@example.com\";}','off'), +(250,'_site_transient_update_plugins','O:8:\"stdClass\":5:{s:12:\"last_checked\";i:1764778504;s:8:\"response\";a:0:{}s:12:\"translations\";a:0:{}s:9:\"no_update\";a:2:{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.2.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.5.3\";s:3:\"url\";s:41:\"https://wordpress.org/plugins/wp-graphql/\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/plugin/wp-graphql.2.5.3.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:7:\"checked\";a:3:{s:9:\"hello.php\";s:5:\"1.7.2\";s:25:\"wp-graphql/wp-graphql.php\";s:5:\"2.5.3\";s:39:\"wpgraphql-logging/wpgraphql-logging.php\";s:5:\"1.0.0\";}}','off'), +(251,'wp-graphql_tracking_notice','hide','auto'), +(252,'wpgraphql-acf_tracking_notice','hide','auto'), +(255,'_transient_doing_cron','1764778631.4502220153808593750000','on'), +(322,'hwp_previews_settings','a:4:{s:4:\"post\";a:2:{s:7:\"enabled\";b:1;s:11:\"preview_url\";s:68:\"http://localhost:3000/api/preview?secret=CHANGE-SECRET-TOKEN&id={ID}\";}s:4:\"page\";a:2:{s:7:\"enabled\";b:1;s:11:\"preview_url\";s:68:\"http://localhost:3000/api/preview?secret=CHANGE-SECRET-TOKEN&id={ID}\";}s:10:\"attachment\";a:1:{s:11:\"preview_url\";s:68:\"http://localhost:3000/api/preview?secret=CHANGE-SECRET-TOKEN&id={ID}\";}s:8:\"building\";a:2:{s:7:\"enabled\";b:1;s:11:\"preview_url\";s:68:\"http://localhost:3000/api/preview?secret=CHANGE-SECRET-TOKEN&id={ID}\";}}','auto'), +(329,'using_application_passwords','1','off'), +(358,'_site_transient_timeout_wp_theme_files_patterns-b24c4b64a1fe6f9f73313f730ddfc1cf','1764780019','off'), +(359,'_site_transient_wp_theme_files_patterns-b24c4b64a1fe6f9f73313f730ddfc1cf','a:2:{s:7:\"version\";s:3:\"1.4\";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:20:\"Centered site header\";s:4:\"slug\";s:32:\"twentytwentyfive/header-centered\";s:11:\"description\";s:52:\"Site 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:54:\"Site 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:63:\"Site 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:43:\"Site 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:17:\"Right-aligned 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:17:\"Text 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:21:\"Right-aligned archive\";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:14:\"Text 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:18:\"Right-aligned home\";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:18:\"Right-aligned page\";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:20:\"Text blog query loop\";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:24:\"Right-aligned query loop\";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:24:\"Text blog search results\";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:21:\"Text 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:20:\"Vertical site header\";s:4:\"slug\";s:32:\"twentytwentyfive/vertical-header\";s:11:\"description\";s:52:\"Vertical site 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'), +(360,'wp_notes_notify','1','on'), +(361,'db_upgraded','','on'), +(362,'_site_transient_timeout_theme_roots','1764780304','off'), +(363,'_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\";}','off'), +(364,'graphql_experiments_settings','','auto'), +(365,'_site_transient_timeout_browser_f18b5213b6de2490ec9be218b0f025b0','1765383305','off'), +(366,'_site_transient_browser_f18b5213b6de2490ec9be218b0f025b0','a:10:{s:4:\"name\";s:6:\"Chrome\";s:7:\"version\";s:9:\"142.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;}','off'), +(367,'_site_transient_timeout_php_check_7b9fb72b3bf6b27c046e3a9832dfe8e2','1765383306','off'), +(368,'_site_transient_php_check_7b9fb72b3bf6b27c046e3a9832dfe8e2','a:5:{s:19:\"recommended_version\";s:3:\"8.3\";s:15:\"minimum_version\";s:6:\"7.2.24\";s:12:\"is_supported\";b:0;s:9:\"is_secure\";b:1;s:13:\"is_acceptable\";b:1;}','off'), +(369,'_site_transient_timeout_available_translations','1764789306','off'), +(370,'_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:6:\"6.0.11\";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:62:\"https://downloads.wordpress.org/translation/core/6.0.11/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.7\";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.7/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.27\";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.27/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-07-10 08:09:09\";s:12:\"english_name\";s:8:\"Assamese\";s:11:\"native_name\";s:21:\"অসমীয়া\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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.7\";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.7/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.28\";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.28/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-01 10:38:20\";s:12:\"english_name\";s:9:\"Bulgarian\";s:11:\"native_name\";s:18:\"Български\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-18 15:08:47\";s:12:\"english_name\";s:20:\"Bengali (Bangladesh)\";s:11:\"native_name\";s:15:\"বাংলা\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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.8\";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.8/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-03 07:35:59\";s:12:\"english_name\";s:7:\"Catalan\";s:11:\"native_name\";s:7:\"Català\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:6:\"6.9-RC\";s:7:\"updated\";s:19:\"2025-09-09 08:25:54\";s:12:\"english_name\";s:5:\"Czech\";s:11:\"native_name\";s:9:\"Čeština\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/6.9-RC/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-26 15:18:01\";s:12:\"english_name\";s:5:\"Welsh\";s:11:\"native_name\";s:7:\"Cymraeg\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-18 15:47:02\";s:12:\"english_name\";s:6:\"Danish\";s:11:\"native_name\";s:5:\"Dansk\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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_AT\";a:8:{s:8:\"language\";s:5:\"de_AT\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-10-23 12:01:47\";s:12:\"english_name\";s:16:\"German (Austria)\";s:11:\"native_name\";s:21:\"Deutsch (Österreich)\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:14:\"de_CH_informal\";a:8:{s:8:\"language\";s:14:\"de_CH_informal\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-28 08:08:17\";s:12:\"english_name\";s:30:\"German (Switzerland, Informal)\";s:11:\"native_name\";s:21:\"Deutsch (Schweiz, Du)\";s:7:\"package\";s:71:\"https://downloads.wordpress.org/translation/core/6.9/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_DE\";a:8:{s:8:\"language\";s:5:\"de_DE\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 21:23:46\";s:12:\"english_name\";s:6:\"German\";s:11:\"native_name\";s:7:\"Deutsch\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 21:22:22\";s:12:\"english_name\";s:15:\"German (Formal)\";s:11:\"native_name\";s:13:\"Deutsch (Sie)\";s:7:\"package\";s:69:\"https://downloads.wordpress.org/translation/core/6.9/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:5:\"de_CH\";a:8:{s:8:\"language\";s:5:\"de_CH\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-28 08:11:27\";s:12:\"english_name\";s:20:\"German (Switzerland)\";s:11:\"native_name\";s:17:\"Deutsch (Schweiz)\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"dsb\";a:8:{s:8:\"language\";s:3:\"dsb\";s:7:\"version\";s:5:\"6.2.8\";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.8/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-27 14:27:19\";s:12:\"english_name\";s:5:\"Greek\";s:11:\"native_name\";s:16:\"Ελληνικά\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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_NZ\";a:8:{s:8:\"language\";s:5:\"en_NZ\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-05-22 11:56:25\";s:12:\"english_name\";s:21:\"English (New Zealand)\";s:11:\"native_name\";s:21:\"English (New Zealand)\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:5:\"en_CA\";a:8:{s:8:\"language\";s:5:\"en_CA\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-25 13:30:15\";s:12:\"english_name\";s:16:\"English (Canada)\";s:11:\"native_name\";s:16:\"English (Canada)\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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_GB\";a:8:{s:8:\"language\";s:5:\"en_GB\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-13 00:57:20\";s:12:\"english_name\";s:12:\"English (UK)\";s:11:\"native_name\";s:12:\"English (UK)\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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_ZA\";a:8:{s:8:\"language\";s:5:\"en_ZA\";s:7:\"version\";s:6:\"6.9-RC\";s:7:\"updated\";s:19:\"2025-07-29 13:22:09\";s:12:\"english_name\";s:22:\"English (South Africa)\";s:11:\"native_name\";s:22:\"English (South Africa)\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/6.9-RC/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_AU\";a:8:{s:8:\"language\";s:5:\"en_AU\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-25 15:42:18\";s:12:\"english_name\";s:19:\"English (Australia)\";s:11:\"native_name\";s:19:\"English (Australia)\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:2:\"eo\";a:8:{s:8:\"language\";s:2:\"eo\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-08-19 08:40:47\";s:12:\"english_name\";s:9:\"Esperanto\";s:11:\"native_name\";s:9:\"Esperanto\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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_AR\";a:8:{s:8:\"language\";s:5:\"es_AR\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-27 01:55:32\";s:12:\"english_name\";s:19:\"Spanish (Argentina)\";s:11:\"native_name\";s:21:\"Español de Argentina\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-20 03:23:00\";s:12:\"english_name\";s:15:\"Spanish (Chile)\";s:11:\"native_name\";s:17:\"Español de Chile\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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_ES\";a:8:{s:8:\"language\";s:5:\"es_ES\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-03 11:10:15\";s:12:\"english_name\";s:15:\"Spanish (Spain)\";s:11:\"native_name\";s:8:\"Español\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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_PE\";a:8:{s:8:\"language\";s:5:\"es_PE\";s:7:\"version\";s:6:\"6.9-RC\";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:65:\"https://downloads.wordpress.org/translation/core/6.9-RC/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_CR\";a:8:{s:8:\"language\";s:5:\"es_CR\";s:7:\"version\";s:6:\"6.9-RC\";s:7:\"updated\";s:19:\"2025-10-01 22:54:47\";s:12:\"english_name\";s:20:\"Spanish (Costa Rica)\";s:11:\"native_name\";s:22:\"Español de Costa Rica\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/6.9-RC/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_VE\";a:8:{s:8:\"language\";s:5:\"es_VE\";s:7:\"version\";s:5:\"6.4.7\";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.7/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.8\";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.8/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.12\";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.12/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.18\";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.18/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_MX\";a:8:{s:8:\"language\";s:5:\"es_MX\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-28 13:13:48\";s:12:\"english_name\";s:16:\"Spanish (Mexico)\";s:11:\"native_name\";s:19:\"Español de México\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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_GT\";a:8:{s:8:\"language\";s:5:\"es_GT\";s:7:\"version\";s:6:\"5.2.23\";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.23/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_CO\";a:8:{s:8:\"language\";s:5:\"es_CO\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-16 01:19:35\";s:12:\"english_name\";s:18:\"Spanish (Colombia)\";s:11:\"native_name\";s:20:\"Español de Colombia\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:6:\"6.9-RC\";s:7:\"updated\";s:19:\"2025-11-05 21:53:17\";s:12:\"english_name\";s:6:\"Basque\";s:11:\"native_name\";s:7:\"Euskara\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9-RC/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-25 07:54:11\";s:12:\"english_name\";s:7:\"Persian\";s:11:\"native_name\";s:10:\"فارسی\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:6:\"6.9-RC\";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:65:\"https://downloads.wordpress.org/translation/core/6.9-RC/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-29 11:04:04\";s:12:\"english_name\";s:7:\"Finnish\";s:11:\"native_name\";s:5:\"Suomi\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-10-03 04:54:28\";s:12:\"english_name\";s:15:\"French (Canada)\";s:11:\"native_name\";s:19:\"Français du Canada\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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_BE\";a:8:{s:8:\"language\";s:5:\"fr_BE\";s:7:\"version\";s:5:\"6.5.7\";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.7/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:5:\"fr_FR\";a:8:{s:8:\"language\";s:5:\"fr_FR\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 12:17:41\";s:12:\"english_name\";s:15:\"French (France)\";s:11:\"native_name\";s:9:\"Français\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"fur\";a:8:{s:8:\"language\";s:3:\"fur\";s:7:\"version\";s:6:\"4.8.27\";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.27/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.8\";s:7:\"updated\";s:19:\"2025-10-21 16:35:04\";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.8/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-18 15:51:09\";s:12:\"english_name\";s:8:\"Galician\";s:11:\"native_name\";s:6:\"Galego\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-08-29 04:27:18\";s:12:\"english_name\";s:8:\"Gujarati\";s:11:\"native_name\";s:21:\"ગુજરાતી\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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.34\";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.34/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.8\";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.8/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.7\";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.7/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-03 02:14:36\";s:12:\"english_name\";s:8:\"Croatian\";s:11:\"native_name\";s:8:\"Hrvatski\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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.8\";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.8/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-03 02:11:55\";s:12:\"english_name\";s:9:\"Hungarian\";s:11:\"native_name\";s:6:\"Magyar\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-10-23 03:46:40\";s:12:\"english_name\";s:10:\"Indonesian\";s:11:\"native_name\";s:16:\"Bahasa Indonesia\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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.28\";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.28/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-01 17:48:46\";s:12:\"english_name\";s:7:\"Italian\";s:11:\"native_name\";s:8:\"Italiano\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-28 11:59:02\";s:12:\"english_name\";s:8:\"Japanese\";s:11:\"native_name\";s:9:\"日本語\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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.28\";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.28/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-25 08:25:07\";s:12:\"english_name\";s:8:\"Georgian\";s:11:\"native_name\";s:21:\"ქართული\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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.8\";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.8/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:6:\"6.9-RC\";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:62:\"https://downloads.wordpress.org/translation/core/6.9-RC/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.23\";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.23/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-10-29 19:46:21\";s:12:\"english_name\";s:7:\"Kannada\";s:11:\"native_name\";s:15:\"ಕನ್ನಡ\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-03 12:23:06\";s:12:\"english_name\";s:6:\"Korean\";s:11:\"native_name\";s:9:\"한국어\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-23 23:56:42\";s:12:\"english_name\";s:16:\"Kurdish (Sorani)\";s:11:\"native_name\";s:13:\"كوردی‎\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-23 15:08:15\";s:12:\"english_name\";s:6:\"Kyrgyz\";s:11:\"native_name\";s:16:\"Кыргызча\";s:7:\"package\";s:60:\"https://downloads.wordpress.org/translation/core/6.9/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:6:\"6.9-RC\";s:7:\"updated\";s:19:\"2025-09-27 20:51:17\";s:12:\"english_name\";s:10:\"Lithuanian\";s:11:\"native_name\";s:15:\"Lietuvių kalba\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/6.9-RC/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-07-15 19:11:43\";s:12:\"english_name\";s:7:\"Latvian\";s:11:\"native_name\";s:16:\"Latviešu valoda\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:6:\"6.0.11\";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:65:\"https://downloads.wordpress.org/translation/core/6.0.11/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 19:15:51\";s:12:\"english_name\";s:9:\"Malayalam\";s:11:\"native_name\";s:18:\"മലയാളം\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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.7\";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.7/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 13:58:20\";s:12:\"english_name\";s:7:\"Marathi\";s:11:\"native_name\";s:15:\"मराठी\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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.17\";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.17/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.39\";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.39/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 19:55:58\";s:12:\"english_name\";s:19:\"Norwegian (Bokmål)\";s:11:\"native_name\";s:13:\"Norsk bokmål\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:6:\"6.9-RC\";s:7:\"updated\";s:19:\"2025-11-07 08:26:32\";s:12:\"english_name\";s:6:\"Nepali\";s:11:\"native_name\";s:18:\"नेपाली\";s:7:\"package\";s:65:\"https://downloads.wordpress.org/translation/core/6.9-RC/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_NL\";a:8:{s:8:\"language\";s:5:\"nl_NL\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 13:18:27\";s:12:\"english_name\";s:5:\"Dutch\";s:11:\"native_name\";s:10:\"Nederlands\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:\"nl_BE\";a:8:{s:8:\"language\";s:5:\"nl_BE\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-28 09:40:20\";s:12:\"english_name\";s:15:\"Dutch (Belgium)\";s:11:\"native_name\";s:20:\"Nederlands (België)\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-18 15:26:13\";s:12:\"english_name\";s:14:\"Dutch (Formal)\";s:11:\"native_name\";s:20:\"Nederlands (Formeel)\";s:7:\"package\";s:69:\"https://downloads.wordpress.org/translation/core/6.9/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:\"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.27\";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.27/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-01 09:45:52\";s:12:\"english_name\";s:6:\"Polish\";s:11:\"native_name\";s:6:\"Polski\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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.35\";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.35/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:5:\"pt_BR\";a:8:{s:8:\"language\";s:5:\"pt_BR\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 18:21:27\";s:12:\"english_name\";s:19:\"Portuguese (Brazil)\";s:11:\"native_name\";s:20:\"Português do Brasil\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 10:17:43\";s:12:\"english_name\";s:21:\"Portuguese (Portugal)\";s:11:\"native_name\";s:10:\"Português\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:10:\"pt_PT_ao90\";a:8:{s:8:\"language\";s:10:\"pt_PT_ao90\";s:7:\"version\";s:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 00:03:57\";s:12:\"english_name\";s:27:\"Portuguese (Portugal, AO90)\";s:11:\"native_name\";s:17:\"Português (AO90)\";s:7:\"package\";s:67:\"https://downloads.wordpress.org/translation/core/6.9/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_AO\";a:8:{s:8:\"language\";s:5:\"pt_AO\";s:7:\"version\";s:5:\"6.4.7\";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.7/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-18 15:08:01\";s:12:\"english_name\";s:8:\"Romanian\";s:11:\"native_name\";s:8:\"Română\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-18 16:34:37\";s:12:\"english_name\";s:7:\"Russian\";s:11:\"native_name\";s:14:\"Русский\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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.18\";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.18/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-01 04:57:17\";s:12:\"english_name\";s:6:\"Slovak\";s:11:\"native_name\";s:11:\"Slovenčina\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:6:\"6.9-RC\";s:7:\"updated\";s:19:\"2025-04-24 16:58:02\";s:12:\"english_name\";s:7:\"Saraiki\";s:11:\"native_name\";s:14:\"سرائیکی\";s:7:\"package\";s:63:\"https://downloads.wordpress.org/translation/core/6.9-RC/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-10-29 11:19:02\";s:12:\"english_name\";s:9:\"Slovenian\";s:11:\"native_name\";s:13:\"Slovenščina\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-21 22:07:32\";s:12:\"english_name\";s:8:\"Albanian\";s:11:\"native_name\";s:5:\"Shqip\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 21:54:43\";s:12:\"english_name\";s:7:\"Serbian\";s:11:\"native_name\";s:23:\"Српски језик\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-27 15:18:03\";s:12:\"english_name\";s:7:\"Swedish\";s:11:\"native_name\";s:7:\"Svenska\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-16 17:19:56\";s:12:\"english_name\";s:7:\"Swahili\";s:11:\"native_name\";s:9:\"Kiswahili\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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.39\";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.39/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.12\";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.12/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-10-10 17:38:55\";s:12:\"english_name\";s:7:\"Tagalog\";s:11:\"native_name\";s:7:\"Tagalog\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-26 15:28:41\";s:12:\"english_name\";s:7:\"Turkish\";s:11:\"native_name\";s:8:\"Türkçe\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-11-25 18:37:24\";s:12:\"english_name\";s:6:\"Uighur\";s:11:\"native_name\";s:16:\"ئۇيغۇرچە\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.8\";s:7:\"updated\";s:19:\"2025-04-18 21:10:00\";s:12:\"english_name\";s:9:\"Ukrainian\";s:11:\"native_name\";s:20:\"Українська\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.8/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.18\";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.18/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-09-01 09:12:13\";s:12:\"english_name\";s:10:\"Vietnamese\";s:11:\"native_name\";s:14:\"Tiếng Việt\";s:7:\"package\";s:59:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-02 00:32:44\";s:12:\"english_name\";s:16:\"Chinese (Taiwan)\";s:11:\"native_name\";s:12:\"繁體中文\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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:3:\"6.9\";s:7:\"updated\";s:19:\"2025-12-03 08:19:35\";s:12:\"english_name\";s:15:\"Chinese (China)\";s:11:\"native_name\";s:12:\"简体中文\";s:7:\"package\";s:62:\"https://downloads.wordpress.org/translation/core/6.9/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.8\";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.8/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:\"繼續\";}}}','off'), +(371,'can_compress_scripts','0','on'), +(372,'_site_transient_timeout_wp_plugin_dependencies_plugin_timeout_wp-graphql','1764821710','off'), +(373,'_site_transient_wp_plugin_dependencies_plugin_timeout_wp-graphql','1','off'), +(374,'_site_transient_timeout_community-events-44485c287b35f6187af786644b0948c8','1764821798','off'), +(375,'_site_transient_community-events-44485c287b35f6187af786644b0948c8','a:4:{s:9:\"sandboxed\";b:0;s:5:\"error\";N;s:8:\"location\";a:1:{s:2:\"ip\";s:12:\"192.168.65.0\";}s:6:\"events\";a:2:{i:0;a:10:{s:4:\"type\";s:6:\"meetup\";s:5:\"title\";s:26:\"WordUp Warszawa 02.12.2025\";s:3:\"url\";s:47:\"https://www.meetup.com/wordup/events/312194541/\";s:6:\"meetup\";s:15:\"WordUp Warszawa\";s:10:\"meetup_url\";s:30:\"https://www.meetup.com/wordup/\";s:4:\"date\";s:19:\"2025-12-02 18:00:00\";s:8:\"end_date\";s:19:\"2025-12-02 23:59:00\";s:20:\"start_unix_timestamp\";i:1764694800;s:18:\"end_unix_timestamp\";i:1764716340;s:8:\"location\";a:4:{s:8:\"location\";s:16:\"Warszawa, Poland\";s:7:\"country\";s:2:\"PL\";s:8:\"latitude\";d:52.22453;s:9:\"longitude\";d:21.01546;}}i:1;a:10:{s:4:\"type\";s:8:\"wordcamp\";s:5:\"title\";s:20:\"WordCamp Europe 2026\";s:3:\"url\";s:33:\"https://europe.wordcamp.org/2026/\";s:6:\"meetup\";N;s:10:\"meetup_url\";N;s:4:\"date\";s:19:\"2026-06-04 00:00:00\";s:8:\"end_date\";s:19:\"2026-06-06 00:00:00\";s:20:\"start_unix_timestamp\";i:1780524000;s:18:\"end_unix_timestamp\";i:1780696800;s:8:\"location\";a:4:{s:8:\"location\";s:14:\"Krakow, Poland\";s:7:\"country\";s:2:\"PL\";s:8:\"latitude\";d:50.0477778;s:9:\"longitude\";d:19.9313889;}}}}','off'), +(376,'_site_transient_timeout_feed_9bbd59226dc36b9b26cd43f15694c5c3','1764821798','off'), +(377,'_site_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:\"Tue, 02 Dec 2025 20:36: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: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=7.0-alpha-61342\";s: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:66:\"\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:24:\"WordPress 6.9 “Gene”\";s: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:40:\"https://wordpress.org/news/2025/12/gene/\";s: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, 02 Dec 2025 20:12: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:8:\"category\";a:4:{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:\"\";}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.9\";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: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=19398\";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:495:\"WordPress 6.9, code-named \"Gene,\" brings major upgrades to how teams collaborate and create. The Notes feature introduces block-level commenting to streamline reviewing and polishing content, navigating across the entire dashboard with the Command Palette is now faster for power users, and the new Abilities API provides a standardized way to open the door for AI-powered and automated workflows. Combined with all the performance and accessibility improvements, 6.9 is one to write home about.\";s: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:79391:\"\n
\"WordPress
\n\n\n\n

Each WordPress release celebrates an artist who has made an indelible mark on the world of music. WordPress 6.9, code-named “Gene,” honors the American Jazz pianist Gene Harris. 

\n\n\n\n

A piano veteran, self taught at the age of six, Harris infused mainstream jazz with elements of soul, blues, and gospel, creating a warm, signature sound that is both elegant and iconic. Harris’ bluesy jazz lived at the intersection of worlds, weaving a rich landscape of texture and mood, with a thread of soulfulness that ignited listeners.

\n\n\n\n

Welcome to WordPress 6.9

\n\n\n\n

WordPress 6.9 brings major upgrades to how teams collaborate and create. The new Notes feature introduces block-level commenting when writing posts and pages that streamlines reviews, while the expanded Command Palette makes it faster for power users to navigate and operate across the entire dashboard. The new Abilities API provides a standardized, machine-readable permissions system that opens the door for next generation AI-powered and automated workflows. This release also delivers notable performance improvements for faster page loads and adds several practical new blocks alongside a more visual drag and drop to help creators build richer, more dynamic content.

\n\n\n\n

Download WordPress 6.9 “Gene”

\n\n\n\n

Introducing Notes: Seamless, Block-Level Collaboration

\n\n\n\n

Collaborate Smarter : Leave Feedback Right Where You’re Working

\n\n\n\n

With notes attached directly to blocks in the post editor, your team can stay aligned, track changes, and turn feedback into action all in one place. Whether you’re working on copy or refining design in your posts or pages, collaboration happens seamlessly on the canvas itself.

\n\n\n\n
\"View
\n\n\n\n

Command Palette Throughout the Dashboard

\n\n\n\n

Your tools are always at hand.

\n\n\n\n

Access the Command Palette from any part of the dashboard, whether you’re writing your latest post, deep in design in the Site Editor, or browsing your plugins. Everything you need, just a few keystrokes away.

\n\n\n\n
\"Command
\n\n\n\n

Fit text to container

\n\n\n\n

Content that adapts.

\n\n\n\n

There’s a new typography option for text-based blocks that’s been added to the Paragraph and Heading blocks. This new option automatically adjusts font size to fill its container perfectly, making it ideal for banners, callouts, and standout moments in your design.

\n\n\n\n
\""Novem"
\n\n\n\n

The Abilities API

\n\n\n\n

Unlocking the next generation of site interactions.

\n\n\n\n

WordPress 6.9 lays the groundwork for the future of automation with the unified Abilities API. By creating a standardized registry for site functionality, developers can now register, validate, and execute actions consistently across any context—from PHP and REST endpoints to AI agents—paving the way for smarter, more connected WordPress experiences.

\n\n\n\n
\"Abstract
\n\n\n\n

Accessibility Improvements

\n\n\n\n

More than 30 accessibility fixes sharpen the core WordPress experience. These updates improve screen reader announcements, hide unnecessary CSS-generated content from assistive tech, fix cursor placement issues, and make sure typing focus stays put even when users click an autocomplete suggestion.

\n\n\n\n

Performance enhancements

\n\n\n\n

WordPress 6.9 delivers significant frontend performance enhancements, optimizing the site loading experience for visitors. 6.9 boasts an improved LCP (Largest Contentful Paint) through on-demand block styles for classic themes, minifying block theme styles, and increasing the limit for inline styles – removing blockages to page rendering and clearing the rendering path by deprioritizing non-critical scripts. This release comes with many more performance boosts, including optimized database queries, refined caching, improved spawning of WP Cron, and a new template enhancement output buffer that opens the door for more future optimizations.

\n\n\n\n

And much more

\n\n\n\n

For a comprehensive overview of all the new features and enhancements in WordPress 6.9, please visit the feature-showcase website.

\n\n\n\n

Check out What’s New

\n\n\n\n

Learn more about WordPress 6.9

\n\n\n\n

Learn WordPress is a free resource for new and experienced WordPress users. Learn is stocked with how-to videos on using various features in WordPress, interactive workshops for exploring topics in-depth, and lesson plans for diving deep into specific areas of WordPress.

\n\n\n\n

Read the WordPress 6.9 Release Notes for information on installation, enhancements, fixed issues, release contributors, learning resources, and the list of file changes.

\n\n\n\n

Explore the WordPress 6.9 Field Guide. Learn about the changes in this release with detailed developer notes to help you build with WordPress.

\n\n\n\n

The 6.9 release squad

\n\n\n\n

Every release comes to you from a dedicated team of enthusiastic contributors who help keep things on track and moving smoothly. The team that has led 6.9 is a cross-functional group of contributors who are always ready to champion ideas, remove blockers, and resolve issues.

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

Thank you, contributors

\n\n\n\n

The mission of WordPress is to democratize publishing and embody the freedoms that come with open source. A global and diverse community of people collaborating to strengthen the software supports this effort.

\n\n\n\n

WordPress 6.9 reflects the tireless efforts and passion of more than 900+ contributors in countries all over the world. This release also welcomed over 279 first-time contributors!

\n\n\n\n

Their collaboration delivered more than 340 enhancements and fixes, ensuring a stable release for all – a testament to the power and capability of the WordPress open source community.

\n\n\n\n

2046 · Aakash Verma · Aaron Jorbin · Aaron Robertshaw · Aarti Chauhan · Aashish Sharma · aatospaja · Abdur Rahman Emon · Abu Hurayra · Adam Harley (Kawauso) · Adam Silverstein · Adam Zieliński · Aditya Bansode · Aditya Dhade · aditya shah · Aditya Singh · aduth · agulbra · Ahmed · ajaxStardust · Ajit Bohra · Akanshu Singh · Akeda Bagus · Aki Hamano · Akira Tachibana · Akramul Hasan · Akshat Kakkad · Akshay Dhere · Akshaya Rane · Albert Juhé Lluveras · alejandrogonzalvo · Alex Cuadra · Alex Lende · Alex Lion (阿力獅) · Alex Stine · Alexandre Buffet · Alexei Samarschi · Alexis Pandaan · alordiel · Alvaro Gómez · Amber Hinds · Amin · Aminul Islam · Aminul Islam Alvi · Amit Bhosale · Amy Kamala · Anatol Broder · Anders Norén · Andrea Fercia · Andrea Roenning · Andrei Draganescu · Andrew Hoyer · Andrew Nacin · Andrew Ozz · Andrew Serong · André Maneiro · Andy Fragen · Anita C · Ankit K Gupta · Ankit Kumar Shah · Ankit Panchal · Anne McCarthy · Anne-Mieke Bovelett · Anton Vlasenko · Antonio Sejas · Anuj Singh · Anveshika Srivastava · apmeyer · Ari Stathopoulos · Arkadiusz Rzadkowolski · Armando · Artemio Morales · Arthur Chu · Artur Piszek · ArtZ91 · asafm7 · asdofindia · Ashish Kumar (Ashfame) · Ashraful Haque Akash · askapache · Aslam Doctor · Aurooba Ahmed · aut0poietic · Axel DUCORON · Ayesh Karunaratne · Azhar Deraiya · Béryl de La Grandière · bartnv · bchecketts · Beee · Ben Dwyer · Benazeer · Benjamin Denis · Benjamin Zekavica · Benny · Benoit Chantre · Bernhard Kau · Bernhard Reiter · bernhard-reiter · bgermann · bhattaganesh · Bhavesh Desai · BiDbMAK · Bigul Malayi · Birgir Erlendsson (birgire) · Birgit Pauli-Haack · Bishal Shrestha · bobbyleenoblestudios · BogdanUngureanu · bonger · Boro Sitnikovski · Brad Griffin · brad hogan · Brad Jorsch · bradshawtm · Brandon Hubbard · Brandon Kraft · Brandon Zhang · Brennan Goewert · brhodes · Brian Alexander · Brian Coords · Brian Gardner · Brian Haas · brumack · Bryan Schneidewind · bshuchter · burnuser · byteninjaa0 · Cédric Chevillard · Callum Bridgford-Whittick · Calvin Alkan · Carlo Cannas · Carlos Bravo · Carlos G. P. · CarlSteffen · Carolina Nymark · Carolina Romo · Catalin Ciobanu · catgofire · cbirdsong · ccharel · Chad Butler · Chad Chadbourne · Chakrapani Gautam · Chi-Hsuan Huang · Chillifish · ChloeD · Chouby · Chris Zarate · chriscct7 · chrisdotdotdot · chrismattix · christinecooper · Christoph Daum · Christy Nyiri · cikrimcin · Ciprian Popescu · cjhaas · ckoerner · claimableperch · Code Amp · codebuddy · coleatkinson1 · Colin Stewart · ColinD · Cooper Dalrymple · Coralie Tixeront · Corey Salzano · Corey Worrell · Cornwell · Cory Hughart · Courtney Robertson · cucocreative · Cullen Whitmore · Cyrille37 · Daan van den Bergh · Dakota Chichester · damchtlv · Damir · Damon Cook · Dan Cameron · Dan Waldschmidt · Daniel Bachhuber · Daniel Iser · Daniel Richards · Daniele Scasciafratte · daniellacatus · danielmorell · Danny Schmarsel · dannyreaktiv · Darren Ethier (nerrad) · Darshit Rajyaguru · Dave Ryan · daveguitaruno · David Aguilera · David Arenas · David Artiss · David Baumwald · David Calhoun · David Herrera · David Levine · David Perez · David Riviera · David Smith · DavidB · dawidadach · Dean Sas · Debabrata Karfa · DEBARGHYA BANERJEE · Denis de Bernardy · Denis Žoljom · Dennis Ploetner · Dennis Snell · Dennys Dionigi · Densi Nakum · derekherman · Devasheesh Kaul · Dhananjay Kuber · Dhrumil Kumbhani · Dhruval Shah · Dhruvang21 · Dhruvik Malaviya · diebombe · Dilip Bheda · Dilip Modhavadiya · Dion Hulse · divinenephron · dj.cowan · Dominik Schilling · dominiquepijnenburg · donalirl · doughamlin · DougMelvin · drawcard · dretzlaff · Drew Jaynes · Drivingralle · dsawyers · dustintechsmith · eclev91 · eduwass · Ehti · elialum · Eliezer Peña · Ella van Durpe · Elvis Morales · emaildano · Emerson Maningo · Emilie LEBRUN · Emran Ahmed · Enaan Farhan · Enrico Battocchi · Enrique Sánchez · epeicher · Eric · Eric Andrew Lewis · Erick Hitter · Erik · Erik Joling · Eshaan Dabasiya · ethanscorey · Evan Mullins · Even Tobiesen · Fabian Kägy · Fabian Todt · Faisal Ahammad · Faisal Alvi · fakhriaz · Falguni Desai · Felix Arntz · Felix Renicks · Fellyph Cintra · Florian TIAR · Francisco Vera · FrogDesk Strategy · Fumiki Takahashi · Gael Denysiak · Gajendra Singh · Gan Eng Chin · Garrett Hyder · Gary Jones · Gary Pendergast · Gaurang Dabhi · Gautam Mehta · Gennady Kovshenin · George Mamadashvili · George Stephanis · Georgi Stoyanov · gernberg · giuliorubelli · Glen Davies · Gopal Krishnan · Grant M. Kinney · Greg Ziółkowski · Guido · Guido Scialfa · Guillaume TURPIN · Gulamdastgir Momin · H. Adam Lenz · H. Kabir · hanimbarek · hanneslsm · Hans-Gerd Gerhards · Hardik Raval · Hareesh S · Harsh Gajipara · Harshal Kadu · harshbhonsle08 · harshdeepgill · Harun · Helen Hou-Sandi · HelgaTheViking · Hidenori ISHIKAWA · Hilay Trivedi · Himani Panchal · Himanshu Pathak · Hiroshi Sato · Hit Bhalodia · Hitendra Chopda · Hitesh Talpada · Hozefa Saleh · Hrohh · hugod · hugosolar · humanify · huubl · Huzaifa Al Mesbah · Héctor Prieto · Ian Dunn · ignatiusjeroe · Igor Radovanov · ikriv · imokweb · Imran · Indira Biswas · Ipstenu (Mika Epstein) · Iqbal Hossain · Isabel Brison · Ishika Bansal · Ivan Ottinger · Jabe · Jacob Cassidy · Jagir Bahesh · Jaimin Prajapati · Jakaria Istauk · Jake Spurlock · jakeparis · James Koster · James LePage · James Monroe · James Sansbury · James Titus · Jamie · Jamie Burchell · Jamie Marsland · janthiel · Jarda Snajdr · jarekmorawski · Jarkko Saltiola · Jason Adams · Jason LeMahieu (MadtownLems) · Jason Sauerwald · Javier Casares · Jay McPartland · Jayaram · Jaydip · Jean-Baptiste Audras · Jeff Chi · Jeff Matson · Jeff Ong · Jeff Paul · Jeffrey de Wit · Jeffro · jeflopo · Jenny Dupuy · Jeremiah Bratton · Jeremy Felt · Jeremy Massel · Jeroen Schmit · jeryj · Jesin A · jessedyck · Jessica Lyschik · Jigar Bhanushali · Jigar Panchal · jikamens · jnweaver · Joan Namunina · JoAnne Obata · JochenT · jodamo5 · Joe Dolson · Joe Hoyle · Joe McGill · Joen Asmussen · Johannes Jülg · John Blackbourn · John Brand · John Godley · John James Jacoby · John Parris · John Regan · JohnVieth · Jon Surrell · Jonathan Bossenger · Jonathan Champ · Jonathan Desrosiers · Joni Erkkilä · Jonny Harris · Jono Alderson · jordesign · Jorge Costa · Jos Velasco · Joseph Scott · Josh Habdas · Joshua Goode · jrmd · Juan Aldasoro · Juan Cook · JuanMa Garrido · juliengardair · Juliette Reinders Folmer · Justin Ahinon · Justin Tadlock · Jyotirmoy Roy · K. Adam White · Kai Hao · Kailey (trepmal) · Kaito Hanamori · Kakoma · Kalpesh · Karin Christen · Karol Manijak · Karthick Murugan · Karthikeya Bethu · Kaspars · Kat Hagan · Kateryna K. a11n · Kathryn Presner · Katrina Massey · Kausar Alam · Kaushik Domadiya · Kawshar Ahmed · kaygee79 · Kazuto Takeshita · Kelly Choyce-Dwan · Kelly Hoffman · Kelly Mears · Ken Gagne · Kerfred · Kerry Liu · kesselb · Kevin Leary · Khoi Pro · Khushi Patel · killerbishop · Kingsley Felix · Kira Schroder · Kishan Jasani · kitchin · Kjell Reigstad · kkmuffme · Kleor · Knut Sparhell · Konstantin Obenland · Konstantinos Xenos · kpapazov · kprocyszyn · krishaamer · Krunal Bhimajiyani · Krupa Nanda · kshaner · kub1x · kubiq · kunalpuri123 · Kush Sharma · Kushagra Goyal · Lachezar Gadzhev · lakrisgubben · Lakshyajeet Singh Goyal · Lalit Kumawat · Lance Willett · Laura Byrne · Lauri Saarni · ldanielgiuliani · Lee Willis · leedxw · leemon · Lena Morita · Leonidas Milosis · Levin Baria · lgseo · LilGames · liviopv · logiclink · LogicRays Technologies · lordandy1984 · Lovro Hrust · Lucas Martins · Luigi Teschio · luisherranz · LukasFritzeDev · Lukasz · Luke Cavanagh · maccyd · Madhavi Shah · Madhu Dollu · Maggie Cabrera · Maikuolan · manfcarlo · manhatthien98 · Manuel Camargo · Manzoor Wani · maorb · Marc · Marc Armengou · Marcio Duarte · Marco Ciampini · Marcus · Marcus Kazmierczak · marian1 · Marie · Marin Atanasov · Mario Santos · mariohamann · mariushosting · Marty · MartyThornley · Mary Baum · Mary Hubbard · Mat Lipe · mathiscode · Matias Benedetto · Matias Ventura · Matt Mullenweg · Matt Robinson · Matt West · Matteo Enna · Matthias Pfefferle · mattryanwalker · Max Schmeling · Maxime Pertici · Mayank Tripathi · Mayur Prajapati · Md Abdullah Al Arif · Md Abdullah Al Fahad · Md Abul Bashar · MD ISMAIL · MD Kawsar Chowdhury · Md Masum Molla Alhaz · Md Obidullah (obiPlabon) · Md Rashed Hossain · Md Sabbir Hossain · Md. Najmul Islam · Md.Mehedi Hasan · mdmoreau · mdviralsampat · Meet Makadia · megane9988 · Meher Bala · Mel Choyce-Dwan · Micha Krapp · Michael Burridge · Michael Keck · Michael Nelson · Michael Sumner · michaelreetz · Michal Czaplinski · Michelle Schulp Hunt · Miguel Fonseca · Miguel Lezama · Mikael Korpela · Mike · Mike Fitzpatrick · Mike Hansen · Mike Jolley · Mike McAlister · Mike Ritter · Mikin Chauhan · Milan Ricoul · Minal Diwan · Miroku · missveronica · Mitchell Austin · mkeck · mlaetitia1986 · mleray · mleraygp · Mobarak Ali · Mohammad Rockeybul Alam · Mohammed Kateregga · Moses Cursor Ssebunya · mrwweb · mtg169 · mujuonly · Mukesh Panchal · Mukul Singh · Mumtahina Faguni · Núria Nadal i Rovira · n8finch · Naman Vyas · NANI SAMIREDDY · Narendra Sishodiya · Naresh Bheda · Nasim Miah · Naveen Dwivedi · Navneet Kaur · Nazar Hotsa · Nazmul Hosen · Ned Zimmerman · nexbridge · Nextendweb · Neycho Kalaydzhiev · Nick · Nick · Nick Diego · Nick Halsey · nickbrazilian · nickjbedford · nickpagz · nickwilmot · Nico · nidhidhandhukiya · Niels Lange · nigelnelles · Nik Tsekouras · Nikan Radan · Nikunj Hatkar · Nimesh · Nino Mihovilic · Ninos · Noah Allen · Noel Santos · Noruzzaman · nosilver4u · oceantober · oferlaor · okat · Okawa Yasuno · Olga Gleckler · Oliver Campion · Omar Alshaker · Ophelia Rose · Optimizing Matters · owi · Paal Joachim Romdahl · Pablo Honey · Palak Patel · Paragon Initiative Enterprises · Parin Panjari · Parth vataliya · Partho Hore · Pascal Birchler · Patel Jaymin · Patricia BT · Patrick Lumumba · Patrick Piwowarczyk · Paul · Paul Bearne · Paul Biron · Paul Bonneau · Paul Kevan · Paulo Trentin · paulstanos · pcarvalho · Pedro Figueroa · Per Egil Roksvaag · Peter Ingersoll · Peter Westwood · Peter Wilson · petitphp · Philip John · Philip Sola · Philipp Bammes · Phill · piskvorky · Pooja Bhimani · poojapadamad · porg · prab18hat · Praful Patel · Pranjal Pratap Singh · Prasad Karmalkar · prasadgupte · Prashant Baldha · Pratik Londhe · Presskopp · prettyboymp · puggan · quentinr64600 · Rachel Baker · Rafiqul Islam · Raluca · Ramanan · Rami Yushuvaev · Ramon Ahnert · Ramon Corrales · Ramon James · Ravi Chudasama · Ravi Gadhiya · rcrdortiz · Rehan Ali · Rejaul Alom Khan · Remy Perona · Renato Alves · renishsurani · retrofox · Rezwan Shiblu · Riad Benguella · riadev · Rich Tabor · Richard Korthuis · Riddhi Dave · Rinat · Rinkal Pagdar · Rishabh Gupta · Rishav Dutta · Rishit Gupta · Risto Jovanovic · Ritoban · Robert Anderson · Robert Chapin · Robert Ghetau · Robert O\'Rourke · Robmcclel · Rodrigo Primo · roelof · Rolly Bueno · Ronak prajapati · room34 · Rostislav Wolný · Rotem Gelbart · Rufaro Madamombe · Rutvik Bhambhi · Ryan McCue · Ryan Welcher · S Page · Sören Wünsch · Sabbir Ahmed · Sabbir Sam · SACHINRAJ CP · Sahil Jadhav · Sainath Poojary · Sajjad Hossain Sagor · sakibmoon · Sam · sam_a · Samir Malpande · Sampat Viral · Samuel Paget · Samuel Wood (Otto) · Sandeep Dahiya · Sandip Sinh · Sandy McFadden · Sarah Norris · sarah semark · Sarthak Nagoshe · Satish Prajapati · saurabh.dhariwal · Saxon Fletcher · scholdstrom · Scott Buscemi · Scott Kingsley Clark · Scott Taylor · scribu · Sebastian Pisula · Seif Radwane · Sergey Biryukov · Seth Rubenstein · SH Sajal Chowdhury · Shadi G شادي جـ · Shail Mehta · Shalin Shah · Shane Muirhead · Shashank Jain · Shashank Shekhar · Shazzad Hossain Khan · Sheri Grey · Shipon Karmakar · Shreya Shrivastava · Shubham Patil · Shyamsundar Gadde · sidharthpandita · siliconforks · Silpa TA · simonefontana · Slava Abakumov · smerriman · Sneha Patil · Sophie Dimitrov · Sourabh Jain · Sourav Pahwa · Soyeb Salar · Spenser Hale · spstrap · Sridhar Katakam · stankea · Stanko Metodiev · staurand · Stefan Pasch · Stefan Velthuys · Stephen Bernhardt · Stephen Harris · Steve Dufresne · strarsis · Subrata Sarkar · Sudip Dadhaniya · Sujan Sarkar · Sukhendu Sekhar Guria · Sumit Bagthariya · SunilPrajapati · sunnykasera · sunyatasattva (a11n) · supernovia · SuzuKube · svedish · Svetoslav Marinov · Sybre Waaijer · syhussaini · T4ng · Taco Verdonschot · Takashi Irie · Takuro · Tammie Lister · tatof · tecnogaming · Tetsuro Higuchi · tharsheblows · thelmachido a11n · ThemeAWESOME · theMikeD · Thomas Kräftner · Thorsten Frommen · Till Krüss · Tim Havinga · Tim Sheehan · Timo Tijhof · Timothée Brosille · Timothée Moulin · Timothy Jacobs · TJarrett · Tobias Bäthge · Tobias Zimpel · tobifjellner (Tor-Bjorn “Tobi” Fjellner) · Tom de Visser · Tom J Nowell · Tomoki Shimomura · Toni Viemerö · Tonya Mork · Toro_Unit (Hiroshi Urabe) · Torsten Landsiedel · Travis Smith · traxus · Trevor Mills · tristanleboss · Troy Chaplin · Trupti Kanzariya · tsteel · Tung Du · Tushar Bharti · Tushar Patel · Tussendoor B.V. · Ugyen Dorji · Umesh Nevase · Umesh Singh · Unsal Korkmaz · upadalavipul · Utsav Ladani · Utsav tilava · Valentin Grenier · Vape tsimshatsui · vbbp · Vedansh Mishra · Vegard S. · vgnavada · Vicente Canales · vidugupta · Vijendra Jat · Viktor Szépe · Vinit · Vipul Ghori · Vipul Gupta · Vipul Patil · Vishit Shah · vladimiraus · vortfu · Vrishabh Jasani · Walter Ebert · WebMan Design | Oliver Juhas · websupporter · webwrotter · Weston Ruter · whaze · widhy980 · Will Skora · wplmillet · xate · xavilc · xerpa43 · xipasduarte · Yagnik Sangani · Yash · Yash B · Yash Jawale · Yogesh Bhutkar · YogieAnamCara · Yui · Zebulan Stanphill · Zeel Thakkar · Zunaid Amin · Łukasz Strączyński · 耗子

\n\n\n\n

More than 71 locales have fully translated WordPress 6.9 into their language. Community translators are working hard to ensure more translations are on their way. Thank you to everyone who helps make WordPress available in 200+ languages.

\n\n\n\n

Last but not least, thanks to the volunteers who contribute to the support forums by answering questions from WordPress users worldwide.

\n\n\n\n

Get involved

\n\n\n\n

Participation in WordPress goes far beyond coding. And learning more and getting involved is easy.  Discover the teams that come together to Make WordPress and use this interactive tool to help you decide which is right for you.

\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:\"19398\";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:75:\"\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:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"WordPress 6.9 Release Candidate 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:69:\"https://wordpress.org/news/2025/11/wordpress-6-9-release-candidate-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, 25 Nov 2025 15:33: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:8:\"category\";a:7:{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: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:\"\";}i:2;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:3;a:5:{s:4:\"data\";s:3:\"6.9\";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: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:5;a:5:{s:4:\"data\";s:18:\"release candidates\";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: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=19373\";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:366:\"The third Release Candidate (“RC3”) for WordPress 6.9 is ready for download and testing! 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 RC3 on a test server and site. Reaching this phase […]\";s: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:\"Amy Kamala\";s: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:8039:\"\n

The third Release Candidate (“RC3”) for WordPress 6.9 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 RC3 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.9 is the highest quality possible.

\n\n\n\n

You can test WordPress 6.9 RC3 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 RC3 version (zip). and install it on a WordPress website.
Command LineUse this WP-CLI command:
wp core update --version=6.9-RC3
WordPress PlaygroundUse the 6.9 WordPress Playground instance to test the software directly in your browser.  No setup is required – just click and go! 
\n\n\n\n

The scheduled final release date for WordPress 6.9 is December 2, 2025. The full release schedule can be found here. Your help testing RC versions is vital to making this release as stable and powerful as possible.

\n\n\n\n

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

\n\n\n\n

What’s in WordPress 6.9 RC3?

\n\n\n\n

Want to look deeper into the details and technical notes for this release? Take a look at the WordPress 6.9 Field Guide. For technical information related to issues addressed since RC2, you can browse the following links:

\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 get involved with 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 crucial to the development of any software. It’s also a meaningful way for anyone to contribute. 

\n\n\n\n

Your help testing the WordPress 6.9 RC3 prerelease is key to ensuring that the final 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.9. 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/RC 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

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.9 prereleases. If you haven’t yet, please conclude your testing and update the “Tested up to” version in your theme and plugin readme files to 6.9.

\n\n\n\n

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

\n\n\n\n

Test on your hosting platforms

\n\n\n\n

Web hosts provide vital infrastructure for supporting WordPress and its users. Testing on hosting systems helps inform the development process while ensuring that WordPress and hosting platforms are fully compatible, free of errors, optimized for the best possible user experience, and that updates roll out to customer sites without issue.

\n\n\n\n

Want to test WordPress on your hosting system? Get started with configuring distributed hosting tests here

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

\n\n\n\n

An RC3 haiku

\n\n\n\n

Some folks make money,

\n\n\n\n

some folks make time to travel,

\n\n\n\n

and we Make WordPress.

\n\n\n\n

Props to @akshayar, @davidbaumwald, @westonruter, @ellatrix, @mobarak and @tacoverdo for proofreading and review.

\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:\"19373\";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:33:\"WordPress 6.9 Release Candidate 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:69:\"https://wordpress.org/news/2025/11/wordpress-6-9-release-candidate-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, 18 Nov 2025 15:26:53 +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: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:\"\";}i:2;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:3;a:5:{s:4:\"data\";s:3:\"6.9\";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:7:\"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:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=19350\";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:367:\"The second Release Candidate (“RC2”) for WordPress 6.9 is ready for download and testing! 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 RC2 on a test server and site. Reaching this phase […]\";s: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:\"Akshaya Rane\";s: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:10595:\"\n

The second Release Candidate (“RC2”) for WordPress 6.9 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 RC2 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.9 is the best it can be.

\n\n\n\n

You can test WordPress 6.9 RC2 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 RC2 version (zip) and install it on a WordPress website.
Command LineUse the following WP-CLI command:
wp core update --version=6.9-RC2
WordPress PlaygroundUse the 6.9 RC2 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 scheduled final release date for WordPress 6.9 is December 2, 2025. The full release schedule can be found here. Your help testing RC versions is vital to making this release as stable and powerful as possible.

\n\n\n\n

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

\n\n\n\n

What’s in WordPress 6.9 RC2?

\n\n\n\n

Get a recap of WordPress 6.9’s highlighted features in the Beta 1 announcement. For more technical information related to issues addressed since RC1, 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 crucial to the development of any software. It’s also a meaningful way for anyone to contribute. 

\n\n\n\n

Your help testing the WordPress 6.9 RC2 version is key to ensuring that the final 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.9. 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

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.9 beta releases. If you haven’t yet, make sure to conclude your testing and update the “Tested up to” version in your plugin’s readme file to 6.9.

\n\n\n\n

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

\n\n\n\n

Test on your hosting platforms

\n\n\n\n

Web hosts provide vital infrastructure for supporting WordPress and its users. Testing on hosting systems helps inform the development process while ensuring that WordPress and hosting platforms are fully compatible, free of errors, optimized for the best possible user experience, and that updates roll out to customer sites without issue.

\n\n\n\n

Want to test WordPress on your hosting system? Get started with configuring distributed hosting tests here.

\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 (RC2) also marks the hard string freeze point of the 6.9 release cycle.

\n\n\n\n

An RC2 haiku

\n\n\n\n

A calm hillside sighs,
Work of many now complete —
RC2 stays true.

\n\n\n\n

Props to @amykamala, @annezazu, @davidbaumwald, @westonruter and @joedolson for proofreading and review.

\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:\"19350\";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:75:\"\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:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"WordPress 6.9 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/11/wordpress-6-9-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, 11 Nov 2025 15:34: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:8:\"category\";a:7:{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: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:\"\";}i:2;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:3;a:5:{s:4:\"data\";s:3:\"6.9\";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: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:5;a:5:{s:4:\"data\";s:18:\"release candidates\";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: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=19317\";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:364:\"The first Release Candidate (“RC1”) for WordPress 6.9 is ready for download and testing! This version of the WordPress software is still under development. Please do not install, run, or test this version of WordPress on production or mission-critical websites. Instead, it’s recommended to evaluate RC1 on a test server and site. WordPress 6.9 RC1 […]\";s: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:\"Amy Kamala\";s: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:9479:\"\n

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

\n\n\n\n

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

\n\n\n\n

WordPress 6.9 RC1 can be tested using any of the following methods:

\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 this WP-CLI command:
wp core update --version=6.9-RC1
WordPress PlaygroundUse the 6.9 RC1 WordPress Playground instance to test the software directly in your browser. No setup is required – just click and go! 
\n\n\n\n

The scheduled final release date for WordPress 6.9 is December 2, 2025. The full release schedule can be found here. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible.

\n\n\n\n

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

\n\n\n\n

What’s in WordPress 6.9 RC1?

\n\n\n\n

Check out the Beta 1 announcement for details on WordPress 6.9.

\n\n\n\n

You can browse the technical details for all issues addressed since Beta 4 using these links:

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

Want to know more about this release? Here are some highlights:

\n\n\n\n
    \n
  • Site Editor improvements and Refined content creation\n
      \n
    • Ability to hide blocks
    • \n\n\n\n
    • New blocks
    • \n\n\n\n
    • Notes on blocks
    • \n\n\n\n
    • Universal command palette in wp-admin
    • \n
    \n
  • \n\n\n\n
  • Developer updates\n
      \n
    • Updates to dataviews and dataforms components
    • \n\n\n\n
    • New abilities API
    • \n\n\n\n
    • Updates to interactivity API
    • \n\n\n\n
    • Updates to block binding API
    • \n
    \n
  • \n\n\n\n
  • Performance Improvements\n
      \n
    • Improved script and style handling
    • \n\n\n\n
    • Optimized queries and caching
    • \n\n\n\n
    • Added ability to handle “fetchpriority” in ES Modules and Import Maps
    • \n\n\n\n
    • Standardizing output buffering
    • \n
    \n
  • \n
\n\n\n\n

The final release is on track for December 2nd. As always, a successful release depends on your confirmation during testing. So please download and test!

\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 crucial to the development of any software. It’s also a meaningful way for anyone to contribute. 

\n\n\n\n

Your help testing the WordPress 6.9 RC1 version is key to ensuring that the final 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.9.

\n\n\n\n

Calls for testing

\n\n\n\n

Thank you to everyone who helps test the following enhancements and bug fixes:

\n\n\n\n\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

Thank you to everyone who helps with testing!

\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.9 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.9.

\n\n\n\n

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

\n\n\n\n

Test on your hosting platforms

\n\n\n\n

Web hosts provide vital infrastructure for supporting WordPress and its users. Testing on hosting systems helps inform the development process while ensuring that WordPress and hosting platforms are fully compatible, free of errors, optimized for the best possible user experience, and that updates roll out to customer sites without issue.

\n\n\n\n

Want to test WordPress on your hosting system? Get started with configuring distributed hosting tests here. Thank you to all web hosts who help test WordPress!

\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

An RC1 haiku

\n\n\n\n

As the sun rises,

\n\n\n\n

RC1 breaks its cocoon

\n\n\n\n

and emerges strong.

\n\n\n\n

Props to @akshayar, @davidbaumwald, @jeffpaul, @desrosj, @westonruter, @ellatrix, @priethor, @krupajnanda and @cbravobernal 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:\"19317\";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:72:\"\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:6:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"WordPress 6.9 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/11/wordpress-6-9-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, 04 Nov 2025 15:34: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:8:\"category\";a:6:{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: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:\"\";}i:2;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:3;a:5:{s:4:\"data\";s:3:\"6.9\";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: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:5;a:5:{s:4:\"data\";s:7:\"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:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=19263\";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:347:\"WordPress 6.9 Beta 3 is available for download and testing! This beta version of the WordPress software is still under development. Please don’t install, run, or test this version of WordPress on production or mission-critical websites. Instead, you can evaluate Beta 3 on a test server and site. WordPress 6.9 Beta 3 can be tested […]\";s: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:\"Amy Kamala\";s: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:5454:\"\n

WordPress 6.9 Beta 3 is available for download and testing!

\n\n\n\n

This beta version of the WordPress software is still under development. Please don’t install, run, or test this version of WordPress on production or mission-critical websites. Instead, you can evaluate Beta 3 on a test server and site.

\n\n\n\n

WordPress 6.9 Beta 3 can be tested using any of the following methods:

\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 this WP-CLI command:
wp core update --version=6.9-beta3
WordPress PlaygroundUse the 6.9 Beta 3 WordPress Playground instance to test the software directly in your browser.  No setup is required – just click and go! 
\n\n\n\n

\n\n\n\n

The final release of WordPress 6.9 is scheduled for December 2, 2025, and the release schedule can be found here. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible. Thank you to everyone who helps with testing!

\n\n\n\n

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

\n\n\n\n

Find out what’s new in WordPress 6.9: 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.9 Beta 3 version is key to ensuring that everything in the release is the best it can be. While testing the upgrade process is essential, trying out new features is equally as important. This detailed guide provides a walk through on testing features in WordPress 6.9.

\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

Beta 3 updates and highlights

\n\n\n\n

WordPress 6.9 Beta 3 contains more than 80 updates and fixes since the Beta 2 release.

\n\n\n\n

Each beta cycle focuses on bug fixes, and more are on the way with your testing! You can browse the technical details for all issues addressed since Beta 2 using these links:

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

A Beta 3 haiku

\n\n\n\n

Code is poetry,

\n\n\n\n

and poetry is magic.

\n\n\n\n

So code is magic.

\n\n\n\n

Props to @akshayar , @jeffpaul, @krupajnanda, @mosescursor, and @westonruter 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:\"19263\";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: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.9 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/10/wordpress-6-9-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, 28 Oct 2025 15:23: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: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-9\";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:7:\"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:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:35:\"https://wordpress.org/news/?p=19253\";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:334:\"WordPress 6.9 Beta 2 is now ready for testing! 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. You can test WordPress 6.9 Beta 2 in […]\";s: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:\"Akshaya Rane\";s: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:5125:\"\n

WordPress 6.9 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.9 Beta 2 in any of the following 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.9-beta2
WordPress PlaygroundUse the 6.9 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 scheduled final release date for WordPress 6.9 is December 2, 2025.  The full release schedule can be found here. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible. Do check the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information. Thank you to everyone who contributes by testing! 

\n\n\n\n

Catch up on what’s new in WordPress 6.9: 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.9 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.9.

\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

Beta 2 updates and highlights

\n\n\n\n

WordPress 6.9 Beta 2 contains more than 33 Editor updates and fixes since the Beta 1 release, including 28 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

Morning dew returns,

\n\n\n\n

Small fixes bloom in silence—

\n\n\n\n

Code finds its balance.

\n\n\n\n

Props to @davidbaumwald, @wildworks , @krupajnanda & @mosescursor for proofreading and review.

\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:\"19253\";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:63:\"\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:23:\"WordPress 6.8.3 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:59:\"https://wordpress.org/news/2025/09/wordpress-6-8-3-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, 30 Sep 2025 19:31: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:3:{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:\"\";}i:1;a:5:{s:4:\"data\";s:14:\"minor-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: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=19204\";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:372:\"WordPress 6.8.3 is now available! This is a security release that features two fixes. Because this is a security release, it is recommended that you update your sites immediately. You can download WordPress 6.8.3 from WordPress.org, or visit your WordPress Dashboard, click “Updates”, and then click “Update Now”. If you have sites that support automatic […]\";s: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:15:\"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:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:4937:\"\n

WordPress 6.8.3 is now available!

\n\n\n\n

This is a security release that features two fixes.

\n\n\n\n

Because this is a security release, it is recommended that you update your sites immediately.

\n\n\n\n

You can download WordPress 6.8.3 from WordPress.org, or visit your WordPress Dashboard, click “Updates”, and then click “Update Now”. If you have sites that support automatic background updates, the update process will begin automatically.

\n\n\n\n

The next major release will be version 6.9, which is planned for December 2nd, 2025.
For more information on WordPress 6.8.3, please visit the version page on the HelpHub site.

\n\n\n\n

Security updates included in this release

\n\n\n\n

The security team would like to thank the following people for responsibly reporting vulnerabilities, and allowing them to be fixed in this release:

\n\n\n\n
    \n
  • A data exposure issue where authenticated users could access some restricted content. Independently reported by Mike Nelson, Abu Hurayra, Timothy Jacobs, and Peter Wilson.
  • \n\n\n\n
  • A cross-site scripting (XSS) vulnerability requiring an authenticated user role that affects the nav menus. Reported by Phill Savage.
  • \n
\n\n\n\n

As a courtesy, these fixes have also been made available to all branches eligible to receive security fixes (currently through 4.7). As a reminder, only the most recent version of WordPress is actively supported.

\n\n\n\n

Thank you to these WordPress contributors

\n\n\n\n

This release was led by John Blackbourn.

\n\n\n\n

In addition to the security researchers and release squad members mentioned above, WordPress 6.8.3 would not have been possible without the contributions of the following people:

\n\n\n\n

Aaron Jorbin, Abu Hurayra, Adam Zieliński, Alex Concha, Andrei Draganescu, David Baumwald, Ehtisham Siddiqui, Ian Dunn, Jake Spurlock, Jb Audras, Joe Hoyle, John Blackbourn, Jon Surrell, Jonathan Desrosiers, Michael Nelson, Peter Wilson, Phill, Robert Anderson, Ryan McCue, Scott Reilly, Timothy Jacobs, vortfu, Weston Ruter

\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 Slack channel. Need help? Check out the Core Contributor Handbook.

\n\n\n\n

Props to Ehtisham Siddiqui, John Blackbourn, Paul Kevan, Jonathan Desrosiers, Aaron Jorbin, Weston Ruter for reviewing.

\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:\"19204\";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:63:\"\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:57:\"Portland Welcomes WordCamp US 2025: A Community Gathering\";s: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://wordpress.org/news/2025/08/portland-welcomes-wcus-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, 30 Aug 2025 03:03:52 +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:3:{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: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:\"\";}i:2;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=19074\";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:405:\"A full house of attendees gathered in Portland, Oregon, for WordCamp US 2025, with thousands more tuning in online. Over four days, the flagship WordPress event brought together contributors, innovators, and community members for collaboration, inspiration, and discovery. WordPress is so unique because we’re not just a product; we’re a movement. Matt Mullenweg, WordPress Cofounder […]\";s: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:\"Brett McSherry\";s: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:65530:\"\n\n\n

A full house of attendees gathered in Portland, Oregon, for WordCamp US 2025, with thousands more tuning in online. Over four days, the flagship WordPress event brought together contributors, innovators, and community members for collaboration, inspiration, and discovery.

\n\n\n\n
\n

WordPress is so unique because we’re not just a product; we’re a movement.

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

The WordPress event began with a dedicated Contributor Day and continued with a Showcase Day and two days of sessions filled with talks, panels, workshops, and community celebrations. WordPress Cofounder Matt Mullenweg joined a diverse lineup of speakers, panelists, and workshop leaders who brought fresh perspectives to the open web from across the globe.

\n\n\n\n

Set against the vibrant backdrop of Portland — with its iconic bridges, coffee culture, and creative energy — the Sponsor Hall buzzed as companies across the WordPress ecosystem demoed new products, shared insights, and connected with attendees. Each day offered opportunities to refuel with local flavors and international favorites, turning mealtimes into lively hubs of networking and idea-sharing.

\n\n\n\n

A Global Gathering in Portland

\n\n\n\n

WordCamp US is the annual gathering point for the WordPress community — where collaboration, creativity, and innovation intersect. This year in Portland, the event delivered an expansive program that reached every corner of the ecosystem.

\n\n\n\n

Here’s what attendees experienced:

\n\n\n\n
    \n
  • Engaging Sessions Across Tracks – Keynotes, presentations, and discussions explored the evolving web and the role of open source in shaping it.
  • \n\n\n\n
  • A Global Speaker Lineup – Voices from across continents brought local stories and global visions to the stage.
  • \n\n\n\n
  • Wide-Ranging Topics – From AI in WordPress development to accessibility, design systems, content strategy, education, and case studies of WordPress at scale.
  • \n\n\n\n
  • Hands-On Learning Opportunities – Workshops provided practical takeaways, empowering attendees to apply new skills immediately.
  • \n\n\n\n
  • A Community Built on Collaboration – Whether contributing code, exploring business strategies, or sharing creative projects, attendees found space to learn, grow, and celebrate open source together.
  • \n
\n\n\n\n

New contributors took their first steps into open source, seasoned developers explored cutting-edge AI integrations, and agencies and product teams shared strategies for scaling WordPress to meet modern needs. Beyond the technical, conversations around inclusivity, sustainability, and education underscored WordPress’s role as a tool for empowerment and positive change.

\n\n\n\n

In hallways, coffee lines, and evening meetups, attendees found the “hallway track” alive and well, spontaneous moments of connection that often became the most memorable part of the experience. Whether reconnecting with longtime collaborators or meeting someone new, these small interactions reinforced the heart of WordCamp US: a community that thrives on openness, generosity, and shared purpose.

\n\n\n\n

Contributor Day: Collaboration at the Core

\n\n\n\n

The conference opened on Tuesday, August 26, with a vibrant Contributor Day. Nearly 300 contributors filled the space, including more than 120 first-time participants who were onboarded across 19 teams. Developers, designers, translators, marketers, and community organizers worked side by side, representing WordPress expertise.

\n\n\n\n

Throughout the day, contributors tackled everything from improving accessibility and performance to refining documentation to enhancing translation tools. Beyond technical contributions, teams like Marketing and Community focused on outreach, mentoring, and shaping future-facing initiatives. Remote participants joined via dedicated channels, reinforcing the inclusive nature of WordPress’s global community. By day’s end, the collective energy was clear: WordPress continues to be built by and for everyone.

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

The mix of experience in the room made this year especially notable. First-time contributors were paired with seasoned table leads who guided them through their first steps into open source contribution. Longtime contributors reconnected with their teams and advanced ongoing initiatives, while new voices added fresh perspectives and momentum. The spirit of mentorship was woven throughout, ensuring that Contributor Day was productive and welcoming.

\n\n\n\n

The results spoke for themselves:

\n\n\n\n
    \n
  • Polyglots translated more than 12,000 strings, expanding WordPress’s accessibility worldwide.
  • \n\n\n\n
  • The Community team celebrated the approval of two brand-new local meetups.
  • \n\n\n\n
  • The Training team achieved its objective of updating outdated course thumbnails.
  • \n\n\n\n
  • The Core team worked through a live bug scrub, with 9 committers and 16 contributors collaborating on improvements.
  • \n\n\n\n
  • The Documentation team completed numerous content updates to keep resources fresh and reliable.
  • \n
\n\n\n\n

Momentum carried through every table, with participants reporting measurable progress and a renewed sense of shared purpose. Contributor Day once again highlighted the unique power of collaboration in shaping the open web, proving that every contribution matters through code, translations, training, or community building.

\n\n\n\n

Showcase Day: WordPress in Action

\n\n\n\n

Wednesday, August 27, was the popular Showcase Day, spotlighting real-world innovation in WordPress. Initially expected to draw about 250 participants, Showcase Day welcomed more than 800 attendees — a powerful sign of how much energy and curiosity the community brought to Portland. The sessions demonstrated how WordPress powers meaningful work across industries from nonprofits to newsrooms, agencies to global enterprises, while staying true to open source values.

\n\n\n\n

The day opened with a keynote by Amy Sample Ward: The Tech That Comes Next. Drawing from their co-authored book with Afua Bruce, Amy highlighted the inequities embedded in today’s technologies — from dataset bias to accessibility gaps — and challenged attendees to rethink how tools are funded, built, and deployed. Their talk invited technologists, funders, and community leaders to imagine a more equitable digital future, rooted in collaboration and shared responsibility.

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

From there, Joeleen Kennedy of Human Made shared how Full Site Editing (FSE) shapes the refresh of Wikimedia’s ongoing user experience. Her session Modernizing at Scale detailed how FSE is simplifying workflows, improving accessibility, and making the multilingual platform more sustainable for the long term. Attendees gained a behind-the-scenes look at how one of the world’s largest open knowledge platforms is leveraging WordPress innovation.

\n\n\n\n

Josh Bryant took the stage to explore what happens when Gutenberg leaves the WP-Admin dashboard. His talk, Reimagining WordPress Editing, walked through embedding the block editor into a standalone React application to support Dow Jones’s newsroom workflows. From decoupling Gutenberg to managing custom data stores, the session showcased advanced techniques for scaling editorial tools while maintaining the flexibility of the WordPress ecosystem.

\n\n\n\n

Hands-on learning was a hallmark of Showcase Day, with Jamie Marsland’s workshop leading participants through building and launching their own professional portfolio sites — no coding required. Attendees left with a fully functioning site, demonstrating WordPress’s continued ability to empower anyone, anywhere, to publish online.

\n\n\n\n

In the afternoon, Jeffrey Paul’s session Scalable, Ethical AI addressed one of the most pressing topics in today’s digital world: how to integrate AI without sacrificing ownership, privacy, or open standards. Walking participants through practical use cases with ClassifAI and local LLMs, Paul emphasized how WordPress can help content creators harness AI while maintaining autonomy over their data.

\n\n\n\n

The day closed with a forward-looking community highlight: WordPress Campus Connect. Panelists Destiny Kanno, Andrés Parra, Javier Montes de Blas, Mauricio Barrantes, and Elineth Morera Campos shared how this initiative brings WordPress into classrooms and universities worldwide. Student Andrés Parra received a scholarship to attend WordCamp. During the panel, Elineth also announced that Fidélitas University will begin offering its students a WordPress Credits program starting in October 2025, making it a mandatory addition sometime in 2026, enabling them to contribute directly to WordPress as part of their studies.

\n\n\n\n

By connecting students and educators with the open web, Campus Connect is building the next generation of contributors and innovators, ensuring that WordPress remains both a learning tool and a pathway to opportunity.

\n\n\n\n

Taken together, Showcase Day affirmed that WordPress is more than just a CMS — it is a platform for equitable technology, global collaboration, cutting-edge enterprise solutions, and the future of digital education. WordPress has the power to be both a platform and a community tool for education, equity, and innovation.

\n\n\n\n

Presentation Days: Learning, Inspiration, and Connection

\n\n\n\n

The first full day of sessions at WordCamp US 2025 opened with warm remarks from the organizing team, who reminded attendees: “The most important thanks goes to all of you. The mix of new energy and veteran experience is what makes WordCamp so special, so thank you for being here.” That spirit of gratitude and community carried throughout the event.

\n\n\n\n

The Sponsor Hall became a hub of activity, complete with raffles, the return of Career Corner, and even a Voodoo Donut Truck parked outside. Attendees lined up to test their luck at a claw machine stuffed with plush Wapuus, while others sought guidance at the Happiness Bar — a hands-on help desk for WordPress questions big and small. Between these activities, the steady buzz of conversations made it clear: the “hallway track” remained one of WordCamp’s most valuable experiences.

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

The program itself set a high bar. Danny Sullivan’s keynote shed light on how search has evolved to meet the needs of new generations, from 24/7 demand and mobile expectations to short-form video and AI. His session gave attendees a deeper understanding of how search intersects with publishing today and sparked conversations about how WordPress can continue adapting in an era where AI shapes discovery and content.

\n\n\n\n

From there, the schedule unfolded across multiple tracks. The Core AI panel — featuring James LePage, Felix Arntz, and Jeffrey Paul — offered a look into how AI tools are woven into WordPress core. Emphasizing ethics, transparency, and user empowerment, the panel painted a roadmap for how WordPress can adopt new technologies without compromising its open-source values.

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

Hands-on learning played a significant role throughout the conference. Ryan Welcher’s interactive Block Developer Cookbook drew a packed room as participants worked through community-selected code recipes built on the latest WordPress APIs. By the end, attendees left with working examples and practical strategies they could bring back to their projects.

\n\n\n\n

The program also highlighted diverse technical perspectives. Jemima Abu’s session, A PHP Developer’s Guide to ReactJS, bridged the gap between classic and modern web development. At the same time, Adam Gazzaley’s keynote, A New Era of Experiential Medicine – AI and the Brain, invited attendees to consider the human side of technology, exploring how digital tools can advance health and well-being.

\n\n\n\n

The second day of presentations, Friday, August 29, opened with creativity and imagination. John Maeda’s keynote, Cozy AI Cooking: WordCamp Edition, used the metaphor of a kitchen to demystify AI, blending storytelling with technical insight to show how curiosity and care can guide builders in integrating AI into their work.

\n\n\n\n

Later in the day, Tammie Lister’s The System is the Strategy illustrated how design systems provide structure and scalability for growing WordPress projects. At the same time, Adam Silverstein’s Unlock Developer Superpowers with AI showcased new ways developers can use emerging tools to speed up workflows and problem-solving.

\n\n\n\n

Community stories also took center stage. In Creators around a Campfire, Anne McCarthy, Jamie Marsland, Christian Taylor, Mark Szymanski, and Michael Cunningham reflected on how YouTubers and content creators shape the WordPress ecosystem. Their session highlighted the role of storytelling and education in expanding WordPress’s reach to new audiences worldwide.

\n\n\n\n

The Sponsor Hall remained lively between sessions — with attendees meeting companies, testing demos, and swapping ideas that extended far beyond the conference halls. They also shared moments together at the arcade built for the event and added smiles, hugs, and laughter, which underscored the atmosphere: WordCamp US was as much about connection as code.

\n\n\n\n

Together Into the Future

\n\n\n\n

As the event drew to a close, WordPress Cofounder Matt Mullenweg took the stage to share the current state of WordPress and a vision for its future. He highlighted the growth in social media for WordPress with 124,726 new followers since last WCUS — and the WordPress.org website growing over 10% in users along with almost 20% in new users.

\n\n\n\n

Matt also spotlighted community initiatives shaping the future of open source education and diversity: WordPress Campus Connect, which has already reached 570 students across 11 events. Combined with the growth in overall events (77) which is a 32.76% increase over 2024. Each effort reinforced the message that WordPress is more than software; it is a global movement driven by people.

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

He concluded with a live Q&A, fielding questions from the audience on the direction of WordPress, its role in an AI-driven web, and the importance of keeping the project open, inclusive, and adaptable. The final notes of the keynote carried into a closing party in downtown Portland, where attendees capped off the week with music, conversation, and the unmistakable joy of a community coming together.

\n\n\n\n

Closing

\n\n\n\n

WordCamp US 2025 once again demonstrated what makes the WordPress ecosystem extraordinary: a community committed to building tools, resources, and opportunities that empower people everywhere.

\n\n\n\n

This year also marked the debut of the Open Horizons Scholarship, which funded six recipients — two organizers, three volunteers, and one speaker — from five countries. A total of $14,670 supported their journeys to WCUS. The scholarship, which also supports participation at WordCamp Asia and WordCamp Europe, is designed to make flagship events more accessible to contributors worldwide.

\n\n\n\n

A heartfelt thank you goes to the organizers, volunteers, sponsors, and speakers who brought the Portland edition to life — and to every attendee who joined us in person or followed along online. We hope you leave with fresh ideas, meaningful connections, and renewed energy to help shape the future of the open web.

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

Be sure to mark your calendars for the next global gatherings: WordCamp Asia 2026  in Mumbai, India, WordCamp Europe 2026  in Kraków, Poland, and WordCamp US 2026 in Phoenix, Arizona. We can’t wait to see you at the next chapter of the WordPress story.

\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:\"19074\";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: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:60:\"Portland, Are You Ready? The WCUS 2025 Schedule Has Arrived!\";s: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://wordpress.org/news/2025/08/portland-are-you-ready-the-wcus-2025-schedule-has-arrived/\";s: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, 06 Aug 2025 20:03:43 +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:9:\"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:\"\";}i:1;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:2;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:\"\";}i:3;a:5:{s:4:\"data\";s:4:\"WCUS\";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:9:\"WordCamps\";s: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=19004\";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:402:\"We’re excited to announce that the full schedule for WordCamp US 2025 has been published! From August 26–29 in Portland, Oregon, join web creators, innovators, and community leaders for four days of learning, collaboration, and inspiration. This year’s lineup brings together sessions on everything from cutting-edge AI to hands-on workshops, performance, accessibility, design, and 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:14:\"Brett McSherry\";s: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:5698:\"\n

We’re excited to announce that the full schedule for WordCamp US 2025 has been published! From August 26–29 in Portland, Oregon, join web creators, innovators, and community leaders for four days of learning, collaboration, and inspiration. This year’s lineup brings together sessions on everything from cutting-edge AI to hands-on workshops, performance, accessibility, design, and the future of WordPress.

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

Check out the full schedule and start planning your WordCamp experience.

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

Contributor Day — Connect, Collaborate, and Give Back

\n\n\n\n

Kicking off the week on Tuesday, August 26 is Contributor Day, it is your chance to roll up your sleeves and make a direct impact on WordPress. Whether you’re a seasoned developer, creative designer, translator, marketer, or simply passionate about open source, there’s a place for you to get involved. Join WordPress teams working on real projects, share your skills, and connect with people across the global community. Contributor Day is also a fantastic place for hiring managers or business owners to meet emerging talent and see contributors in action. Lunch is provided, and both in-person and select remote participation options are available. If you’ve ever wanted to help shape the future of WordPress, this is your moment!

\n\n\n\n

Read more: Start planning your Contributor Day activities >>

\n\n\n\n

Showcase Day — See WordPress in Action

\n\n\n\n

Showcase Day on Wednesday, August 27, shines a spotlight on what’s possible with WordPress. Get inspired by live demos, case studies, and actionable presentations from experts and innovators using WordPress in creative and impactful ways. You’ll see how changemakers, nonprofits, publishers, and agencies use WordPress to solve real-world problems, build new products, and drive the web forward. Highlights include hands-on workshops, technical talks, and practical sessions covering everything from design systems to modern AI. It’s a full day dedicated to celebrating the talent, creativity, and innovation of the WordPress community.

\n\n\n\n

Read more: See where these inspirational showcases take you >>

\n\n\n\n

Conference Days — Learn, Connect, and Level Up

\n\n\n\n

The main event days for Thursday and Friday, August 28-29, feature a robust mix of technical deep-dives, product masterclasses, and sessions designed for all experience levels. Whether you’re a developer, designer, business owner, or just starting out, you’ll find plenty to explore—from future-focused discussions on AI and performance to hands-on workshops and networking events that bring the community together.

\n\n\n\n

Keynote Highlights:

\n\n\n\n
    \n
  • Amy Sample Ward, CEO of NTEN: The Tech That Comes Next: How Changemakers, Philanthropists, and Technologists Can Build an Equitable World. Featured Wednesday, August 27.
  • \n\n\n\n
  • Danny Sullivan, from Google Search: Industry leader, featured Thursday, August 28.
  • \n\n\n\n
  • Matt Mullenweg, Co-founder of WordPress: Featured Friday, August 29.
  • \n\n\n\n
  • More keynotes announcing soon!
  • \n
\n\n\n\n

With dozens of sessions across multiple tracks, plus workshops and networking opportunities, WordCamp US is set to be an unforgettable experience. Don’t miss your chance to connect, share ideas, and help shape the future of the web.

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

Check out the full schedule and start planning your WordCamp experience.

\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:30:\"com-wordpress:feed-additions:1\";a:1:{s:7:\"post-id\";a:1:{i:0;a:5:{s:4:\"data\";s:5:\"19004\";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:63:\"\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:54:\"Maintenance Releases for WordPress branches 4.7 to 6.7\";s: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://wordpress.org/news/2025/08/maintenance-releases-for-wordpress-branches-4-7-to-6-7/\";s: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, 05 Aug 2025 19:11: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:8:\"category\";a:3:{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:\"\";}i:1;a:5:{s:4:\"data\";s:14:\"minor-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: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=18997\";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:374:\"Following on from the WordPress 6.8.2 maintenance release last month, the included update to the root security certificate bundle has been backported to all branches back to 4.7. This ensures that when your site performs server-side HTTP requests, the most up-to-date information about trusted security certificates is used. Further information can be found on 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:15:\"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:40:\"http://purl.org/rss/1.0/modules/content/\";a:1:{s:7:\"encoded\";a:1:{i:0;a:5:{s:4:\"data\";s:2119:\"\n

Following on from the WordPress 6.8.2 maintenance release last month, the included update to the root security certificate bundle has been backported to all branches back to 4.7. This ensures that when your site performs server-side HTTP requests, the most up-to-date information about trusted security certificates is used. Further information can be found on the Core Trac ticket.

\n\n\n\n

A new maintenance release for each branch from 4.7 to 6.7 is now available. If you have sites on these branches and they support automatic background updates, the update process will begin automatically.

\n\n\n\n

The latest and only supported version of WordPress remains as 6.8.2. This is being done as a courtesy for sites still running older versions of WordPress. You can download WordPress 6.8.2 from WordPress.org, or visit your WordPress Dashboard, click “Updates”, and then click “Update Now”.

\n\n\n\n

Thank you to these WordPress contributors

\n\n\n\n

Special thanks to @desrosj, @ocean90, @davidbaumwald, @peterwilsoncc, @jorbin, @estelaris, and @johnbillion for backporting and releasing this update.

\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:\"18997\";s: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\";a:12:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Wed, 03 Dec 2025 16:16:38 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, 02 Dec 2025 20:36:49 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:1764778051;s:21:\"cache_expiration_time\";i:1764821798;s:23:\"__cache_expiration_time\";i:1764821798;}','off'), +(378,'_site_transient_timeout_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3','1764821798','off'), +(379,'_site_transient_feed_mod_9bbd59226dc36b9b26cd43f15694c5c3','1764778598','off'), +(380,'_site_transient_timeout_feed_d117b5738fbd35bd8c0391cda1f2b5d9','1764821799','off'); +INSERT INTO `wp_options` VALUES +(381,'_site_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:112:\"\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\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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:88:\"WPTavern: #196 – Topher DeRosia on How Public Contributions Shape Careers in 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=201513\";s: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://wptavern.com/podcast/196-topher-derosia-on-how-public-contributions-shape-careers-in-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:51892:\"
Transcript
\n

[00:00:19] 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, how public contributions can shape careers in WordPress.

\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 Topher DeRosia. Topher is a web developer with over 30 years of experience, and he’s been deeply involved in the WordPress community for the past 15 years. He’s attended nearly 80 WordCamps around the world, contributed to projects like HeroPress, and has made it his mission to highlight the power and value of open source and remote work, especially in the WordPress ecosystem.

\n\n\n\n

In this episode, Topher joins me to talk about the value of working in public, and how sharing your work openly can create unexpected and lasting opportunities. Whether that’s boosting your career, finding a sense of purpose, or building connections across the globe.

\n\n\n\n

We start with Topher’s personal journey, discovering the WordPress community and the profound impact it has had on his life and family. The conversation explores what makes open source communities, like WordPress, so unique, and while working transparently can lead to moments of serendipity and even job offers from people who have seen your contributions many years before.

\n\n\n\n

Topher shares stories about giving back, the motivation that comes from helping others, and the long-term satisfaction that comes from being generous with your time and expertise.

\n\n\n\n

We also discussed the tension between the philanthropic and commercial aspects of WordPress, and how individuals and companies navigate that balance.

\n\n\n\n

Towards the end, Topher reflects on building a body of work over time, trusting in the slow and organic process instead of seeking instant influencer success. He explains why he still chooses to create and share resources for free, motivated by the hope of helping the next person just starting out.

\n\n\n\n

If you’ve ever wondered about the power of sharing your work, finding meaning in open communities, or how to make a difference over the long term, 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 Topher DeRosia.

\n\n\n\n

I am joined on the podcast by Topher DeRosia. Hello.

\n\n\n\n

[00:03:19] Topher DeRosia: Hello there.

\n\n\n\n

[00:03:20] Nathan Wrigley: It’s very nice to chat to Topher. We’ve done this before. We’ve had many chats online, but I just want to pay a special thanks to Topher for reasons I won’t bore the audience with, Topher has sort of joined me at extremely late notice, like minutes of notice.

\n\n\n\n

We had a bit of back and forth yesterday about topics that we may cover, and the one that’s going to be covered today is the one that we decided. But he wasn’t expecting this, and so he’s arrived and I’m extremely grateful. So firstly, my deepest thanks for carving out a bit of your day unexpectedly.

\n\n\n\n

[00:03:50] Topher DeRosia: You’re very welcome. This is always fun, and fit my day perfectly.

\n\n\n\n

[00:03:53] Nathan Wrigley: Yeah, okay. Thank you. So what we decided to talk about was, and I’ll encapsulate it in a sentence that Topher wrote to me, and then we’ll just sort of get into it and see where we go. Topher said, he’d like to talk about the value of doing things in public, and how this can come back to you later as a way of potentially, I don’t know, boosting your career or just offering some guiding light to the community and what have you.

\n\n\n\n

So first of all, in order to give us some idea, I’m sure that there are people who know you, having listened to the things that you’ve done or consumed the HeroPress website or what have you. Will you just give us a little potted bio of yourself related to, I guess the WordPress community, makes most sense in this context?

\n\n\n\n

[00:04:30] Topher DeRosia: Sure. I have been a web developer for 30 years, which is old, but I got into WordPress about 15 years ago and I did not know there was a community for several years. And Brian Richards said to me, hey, we should do a WordCamp. And I said, what’s a WordCamp? And then of course, my life changed forever after.

\n\n\n\n

Oh, you know what? We started with a meetup, but like 2 weeks later he said we should do a WordCamp. And he said, we should do it this summer. And we were talking, like we were talking in June. So we went from never hearing of it before, to having a WordCamp suddenly. And I’ve been in, all in on the community ever since. I’ve been to nearly 80 WordCamps, all over the world. I’ve been making stuff, building stuff, meeting people ever since.

\n\n\n\n

[00:05:12] Nathan Wrigley: Wow.

\n\n\n\n

[00:05:13] Topher DeRosia: It’s pretty great.

\n\n\n\n

[00:05:13] Nathan Wrigley: Yeah, 80. Gosh, that’s profound. I mean, I don’t consider myself to have a high attendee account, but 80, that really is remarkable.

\n\n\n\n

So I think it’s fair to say that the profundity of the effect of discovering that community is pretty important in your life. You know, it’s had a material impact in every way.

\n\n\n\n

[00:05:31] Topher DeRosia: Hugely. My wife got into the community. My children, both my kids have spoken at WordCamp US. My wife has spoken. My kids have friends in other countries that I don’t know because of the WordPress community. Every parent has that fear of, what if something happened to us? What would happen to the kids? And we have family that would take care of them, you know? It’s nice to know we also have that backup where there are people all over the world who would say, hey, we got room, come on.

\n\n\n\n

[00:05:55] Nathan Wrigley: Yeah, that’s pretty amazing. I joined the WordPress community, so I’d been involved in lots of open source projects, things like Magento and Drupal and things like that. And I know that Drupal has, there’s definitely stuff in the Drupal space that you can attend. But I never did.

\n\n\n\n

And to be honest with you, I didn’t know that that stuff existed until after the fact. And then in about 2014, something like that, I discovered WordPress. And just like you, I had no conception that it was more than some downloadable bit of software. Honestly didn’t even know that it was done by volunteers. I just had probably some assumption that there was an organization or a company behind it that in some way monetised it and made it free and what have you.

\n\n\n\n

And then just got this intuition, I guess, with social networks, the way that they were at that time, you could find groups and discover that there were all these ancillary groups of people doing things with WordPress, you know, groups focusing around page builders and groups focusing around plugins.

\n\n\n\n

And then for me to discover that there were actual events that you could attend was, just like you, really remarkable. And I attended the first one and I kind of thought, oh, we’ll just see how this goes. I’m a bit of an awkward character in person, so I sort of stood around at the back. But it didn’t take me long to sort of be welcomed in. And just like you, completely changed my life. And ever since then, a sizable proportion of my free time has been devoted to curious WordPress things. It’s amazing.

\n\n\n\n

I can’t quite work out what it is about a project like WordPress that inculcates that, fosters that, makes that possible. Because I imagine if you attended, I don’t know, a Cisco networking conference or something like that, it’s not going to have the same feel. So I don’t know if you want to speak to that for a little bit, why you think the community works.

\n\n\n\n

[00:07:36] Topher DeRosia: Yeah. I have two thoughts about it. One is that I think it’s absolutely because of the people. And it may be chance that the right people found WordPress and got together at the same time. But to that point, that it’s the people, I recently went to two non WordPress conferences in one week.

\n\n\n\n

I went to one for higher education in technology. The people who attended were from universities and colleges, and they were looking for ways to manage web stuff on their entire campus. So do you offer a blog to all 24,000 students, you know? That kind of thing. It was my first time there, but I saw a number of people who were greeting each other and not having seen each other since last year, and the year before, and the year before. And it was very much like a WordCamp. And people talked about how this group is so wonderful and they wait all year long to come back here. And I thought, oh, okay, so this is WordCamp.

\n\n\n\n

And then while I was there, I met somebody who worked at Umbraco, which is an open source .net based CMS. And they’ve been around for 20, more than 20 years, but it’s a very small community, like 0.01% of the market share. And I told her, you know, who I am, what I do, and she’s like, oh, we would love to have you come to our conference this weekend in Chicago. Can I pay you to come? I was like, oh wow, sure.

\n\n\n\n

So I went and it was about a hundred people and it was WordCamp. Everybody there loved the software, loved the community, everybody was friends. It was the same. And expanding just a little more, HeroPress says it’s about people leveraging WordPress to make their lives better. But in actuality, what it is, is open source and remote work combined. It allows people in Malaysia to pick up software and compete on a relatively equal basis with somebody in New York. And in our world, that’s WordPress. But it’s exactly the same with every open source remote work option, Drupal, Umbraco, anything.

\n\n\n\n

[00:09:45] Nathan Wrigley: Maybe open source then is, forgive me, the secret sauce. Maybe that’s the component, the bit that binds those communities together in a way that perhaps, I don’t know, something where a proprietary thing or something was locked down, or profit was the whole point, maybe that is the bit. The fact that there’s a bunch of people gathering together in a kind of philanthropic way. You know, there’s no expectation that my attendance will definitely lead to finance, let’s put it that way.

\n\n\n\n

Like I said, I don’t really have much experience outside the WordPress world, and so my assumption was that there was something a little bit unique. But from what you’ve said, this same exact thing is happening probably a thousand times over throughout the globe, but your expectation there is that the open source component is the bit, the bit that unlocks it.

\n\n\n\n

[00:10:32] Topher DeRosia: Yeah, I agree. WordPress has the advantage of a very large user base, which is good and bad. There are certainly more wonderful people in it than if there were fewer. But at that scale, you are just as likely to have really terrible people. I know people that have left the WordPress community because they’ve been treated horrendously, abused, and it breaks my heart. And I want to say, oh, WordPress is different, you won’t find that here, but you will. It’s too big a community to not have that.

\n\n\n\n

[00:11:01] Nathan Wrigley: I wonder what it is then about that sort of spirit of giving back that creates some kind of, I don’t know, hive mind, for want of a better word. You know, there’s just this ethic that you’re all combined on this slightly higher purpose. So in the case of WordPress, and you mentioned Drupal and you mentioned the other CMS with the small market share, the principle there is that you’re working on something, and I guess publishing is the point. You are enabling people who may or may not have a voice to get on the internet and do something, publish something, write something, put images, videos or what have you.

\n\n\n\n

There is some kind of higher calling there. It’s very hard to sort of grasp that, and to really understand it. But do you know what I mean? You’re doing something which, at the end of your days, you can look back and say, there was something there. There was something meaningful, there was something significant and important. And that feeling, that thing, whatever that thing is, is important, and enough to propel people to give up hours and weeks of their lives to do this.

\n\n\n\n

[00:12:04] Topher DeRosia: I think most people enjoy making other people, I don’t know, so many things, more successful, happier, more stable. And there are open source projects that will shrivel up and die because no one ever says thank you. People work on a project for years and years and they think, you know what? Nobody cares. I’m going to go play Frisbee.

\n\n\n\n

But I think the WordPress community is large enough, and we have these events that everybody goes to, that you run into people who have been impacted by the work you do.

\n\n\n\n

There’s a, boy, can’t remember his first name. Heisel. He’s Dutch but lived in England and now he lives in Malta or something. Anyway, I met him for the first time at WordCamp London and he walked up to me and said, hey, I need to shake your hand. I said, okay. He said, a few years ago I lost my job and I didn’t know what I was going to do and I needed to support my family, and I got on OS Training and learned WordPress from your videos, and now I support my family with WordPress. I about broke down in tears right there.

\n\n\n\n

And that kind of thing happens to lots and lots of people. People who say, you know what? This plugin you wrote, it changed my life. I make a living with this now. I support my family.

\n\n\n\n

[00:13:19] Nathan Wrigley: Do you know what’s kind of interesting there is that, I guess you did none of it with the expectation of that person wandering up. You know, it’s not like, Topher, you sat down and thought, the more thanks I get, the more I’m going to do. There isn’t that kind of expectation. But it certainly helps, doesn’t it? When somebody does come up and express those thoughts to you. I bet you that carried you through the next days, weeks, or months. You know, the capacity to drag that out of your brain.

\n\n\n\n

[00:13:42] Topher DeRosia: It still is. That was years ago.

\n\n\n\n

[00:13:43] Nathan Wrigley: Yeah, yeah. Isn’t that interesting?

\n\n\n\n

[00:13:45] Topher DeRosia: I do think though that you don’t do it for the thanks, but it’s a lot easier to do if you think it matters. When people say thank you, it feels good, but it lets you know that what I’m doing matters. It’s making a difference. It’s making somebody’s life better. It’s making the world better. That’s a huge motivator.

\n\n\n\n

[00:14:04] Nathan Wrigley: That’s the big thing. So this is a curious question, right? And it’s not really related to WordPress. Did you have those same intuitions at an early age? Was there some part of you can remember even as, I don’t know, let’s say a 15-year-old or 17-year-old or something like that. Where you had already made the leap that life is better when you are being helpful? Or did you learn that later?

\n\n\n\n

Because I kind of have the intuition that quite a few people in our community probably figured that out at some point fairly early on. And it enables them, I’m obviously not suggesting that people who didn’t make that intuition early on can’t join the community or what have you. But I’m surrounded by people who seem to have this almost bottomless capacity to give. And I’m always struck by how did that begin for them? Where did that start for them? So because I’ve got you on the line, I’m asking you directly.

\n\n\n\n

[00:14:58] Topher DeRosia: When I was in college, I just randomly became interested in motivations. What makes people do things? What makes somebody mean all the time? What makes somebody happy all the time? What makes somebody be kind?

\n\n\n\n

And I thought through the process of how gratitude is an influencer. If you say to somebody, thank you for what you’re doing, it makes them feel good. It makes them want to do it more. If they’re, you know, working at a food pantry and you say, hey, thank you for what you’re doing, it’s changing lives, just feeding children. It makes them want to do that more. If that person at a food pantry were faced every day with angry people who abused them verbally and stuff like that, they’d be a lot less inclined to do that.

\n\n\n\n

[00:15:37] Nathan Wrigley: Yeah. I listened to a podcast not that long ago, and I actually can’t remember which one it was because I listened to several in this line. But essentially it was trying to peel back the latest studies in what causes some people to be happy. And I am not going to explain this and have the expectation that everything I say is true, nor that this is the limit of that. But a fairly reliable indicator of happiness, whatever that means, but on a fairly profound level, happiness can be boiled down to these two things, apparently.

\n\n\n\n

One of them is that you are giving of your time. So it may be that you are, as you say, working in a soup kitchen. Or that you are doing something in the community. Or you are just putting into your children or what have you. There is a real connection apparently between the capacity to give something from which you expect nothing in return. Humans apparently find great, deep satisfaction from that.

\n\n\n\n

And the other one is friendship. If you have people that you regard as friends, on a deep level. So obviously acquaintances, we can all have many, many thousands of those, especially online nowadays. But it’s that core little group of really impactful, meaningful people who in the time of crisis, you know are going to have your back.

\n\n\n\n

Those two things apparently are a real predictor of one’s happiness. And both of them seem to stray into our community, you know? Although it’s an online thing, you’re still giving your time, and you know that in a fairly ephemeral way that you maybe can never grasp, people will be benefiting from that. And also you make friends. So there you go, it’s the root to happiness.

\n\n\n\n

[00:17:19] Topher DeRosia: It is.

\n\n\n\n

[00:17:20] Nathan Wrigley: So all of that, having said all of that, you have this wealth of experience in the community. You’ve done so many projects in the community. And as I said at the top of the show, the thing that you wanted to talk about was, not just the mere fact of doing things in the community, but about the fact that you are doing things in the community in a sort of public way, and how that can sort of impact in the future. So just tell us a little bit about why you wanted to get into that, or maybe some anecdotal evidence of how that’s helped you.

\n\n\n\n

[00:17:50] Topher DeRosia: Very little of it in my life has been deliberate. I’ve done some things and then later thought, oh, wow, I didn’t realise that this would be the consequence. I made videos for OS Training for a lot of years, they’re behind a paywall, they paid me by the video. I wasn’t thinking, oh, I’m going to go teach the world. It was a client, I made videos.

\n\n\n\n

And years later, Brin Wilson from WinningWP got a hold of me on Post Status and said, hey, I want to start a YouTube channel. Would you make videos for me? I said, sure, but why me? He said, well, I’ve seen your work. You’ve done this, you have given evidence to the world that you know what you’re doing. And that was a good contract. And I got it because I had previously done something else.

\n\n\n\n

With HeroPress, I didn’t set out to become a relatively known person. I was just doing it. But I remember the first time I talked to a stranger from India and introduced myself and they said, oh, of course we know you. I said, what do you mean of course? You live 5,000 miles away from me. How on earth would you know me? And, boy, it is just stuff like that.

\n\n\n\n

I have some plugins on wordpress.org. I think cumulatively they have 12 installs. They’re not big plugins, but they’re there. And people look and say, oh, Topher knows how to make plugins.

\n\n\n\n

I contribute to the photos project. And people who aren’t necessarily contributors don’t necessarily understand the different kinds of contribution. They just see my name on the contributor list like, oh, Topher builds WordPress because I take a lot of photos or something. But just the fact that I’m out there doing that makes a difference.

\n\n\n\n

I’ve been blogging for years. I did blogs in the GoDaddy Garage back in the day, I wrote on OS Training, I wrote all over the place. And recently I thought, boy, I wish I had had all that on my own site.

\n\n\n\n

And then it occurred to me that WordPress does a lot of RSS, and so does YouTube. And so I built a site called topher.how. Found everything I’ve ever done and just used WP All Import and pulled it all into one place. So now at topher.how you can see stuff I’ve done decades ago, and it’s nice. It’s a place to say, look, here’s stuff I did. But I have gotten, no, you know, I’m not going to say I’ve gotten jobs, I’ve gotten consideration, interviews, interest because people who know who I am, because I did something once long ago.

\n\n\n\n

[00:20:11] Nathan Wrigley: Yeah, I guess the interview phase, to get yourself over the line, you’ve still got to sort of show your metal, haven’t you? But that whole thing of just being represented by your past, it’s really curious. We live in a world which is so dominated by, I don’t know, the financial motivation for this, that, and the other.

\n\n\n\n

It is curious when nowadays you can have a legacy which is not the CV, it’s not the line items on the CV. It can be much more ephemeral stuff. Things that you did, videos that you made, blogs that you contributed to.

\n\n\n\n

The people out there making the decisions about who’s going to get those jobs, well, you have proved that that kind of history of being online definitely works, and in unexpected ways. It’s not like there’s always a through line between, okay, I’m going to make these YouTube videos so that in a few years time I’ll have this credible body of evidence that will make it so that anybody can employ me. It’s much more ephemeral than that. It’s more, I’m doing this video because I think itll be helpful, and then serendipitously that then leads to something in the future.

\n\n\n\n

[00:21:14] Topher DeRosia: Yeah, very much so. Before we started recording, you mentioned my background here. It’s a piece of fabric on a photo stand. And I bought it just the other day because, you know, I’ve been making videos for years, I’ve never appeared on camera. Always been a screencast. And I recently got a client that said, well, we want you on camera. And so I got this thing.

\n\n\n\n

But the interesting part is that the client is a company in Bangladesh. And I know them quite well, they know me quite well because of stuff we’ve done together in the past in the WordPress community. And when they needed videos, they came to me, because they know me and they know that’s what I do. That wouldn’t happen if I hadn’t been out doing stuff years ago. What are the chances I would know somebody, me in Michigan, I would know somebody in Bangladesh?

\n\n\n\n

[00:22:01] Nathan Wrigley: Right. Right, I mean, the world of 50 years ago, it’s tending to zero basically, you know, unless you’d been on plane or somebody had been on a plane in the opposite direction and you’d met where you are. The opportunities afforded are amazing, and it’s that kind of long tail that you’ve got as well. That I suppose is going to be hard for somebody that’s younger to listen to because, you know, they kind of see this mountain that they’ve got to climb and this great body of work that they’ve got to build up over decades. I guess that’s, it’s not all about that either, it’s about sort of just chipping away at it and doing things piecemeal.

\n\n\n\n

[00:22:31] Topher DeRosia: I have a funny story about that. Early in my WordPress career, I got to know Pippen Williamson. You may remember him.

\n\n\n\n

[00:22:39] Nathan Wrigley: Yeah. I do.

\n\n\n\n

[00:22:39] Topher DeRosia: And he was very well known in the WordPress community. I got to know a few people who were very well known. I was like, man, that’s cool, everybody knows these people. Wonder if people will ever know me? We were talking about it, he and I, and he quickly urged me, do not seek to be known because that will only lead to tears. If you’re doing it for the wrong reason, then it will just turn out badly.

\n\n\n\n

And so I thought, well, you know, maybe in 10 years. Well, here we are. And I didn’t set out to be known. I’ve never bought a banner ad saying, look at Topher. I just went to WordCamp and spoke. I wrote blog posts, I made videos. I shook a lot of hands. I listened to a lot of stories.

\n\n\n\n

[00:23:18] Nathan Wrigley: It’s about sort of spreading the network organically really, isn’t it? Which I suppose in a sense leads to, okay, rather than the word fame, I’m going to use the word notoriety because I think they’ve got two very different endpoints. But the idea of seeking fame is tied up with, you know, you just want random people to know you because they know you, and that’s the kind of end game, you know? Oh, you are famous because you’re famous, that sort of flavor to it.

\n\n\n\n

Whereas notoriety for me has much more, there’s a body, a corpus of work behind you that leads to that understanding that, okay, that’s Topher. I know Topher because he did this, this, this, and this. It’s not famous because they’re famous. It’s more, there’s the guy who made those videos that I watched. Or there’s the guy that wrote that blog that I read all the time. That kind of thing. And so it’s not fame for fame sake, it’s accidental fame more, if you know what I mean?

\n\n\n\n

[00:24:10] Topher DeRosia: Yeah. I heard the term not too long ago that I like called community known.

\n\n\n\n

[00:24:14] Nathan Wrigley: Okay. That’s nice.

\n\n\n\n

[00:24:15] Topher DeRosia: Within a community, you you could say famous, very well known. Outside that community, people do not care and have no idea who you are.

\n\n\n\n

[00:24:22] Nathan Wrigley: That’s right. Yeah, it’s curious, inside of our community, there’s this one person whose name kind of precedes all others, and it would be Matt Mullenweg. But I’m willing to bet that if Matt was walking down the street, more or less anywhere, that his life is just the same as yours and mine. Nobody’s going to know who he is unless randomly they happen to be a WordPresser. But he’s fairly thin on the ground. You know, it’s not like he’s Scarlett Johansson or George Clooney or something like that, where that fame is probably quite an oppressive thing in their life. You know, the capacity to just walk down the street.

\n\n\n\n

So yeah, anyway, the point being that you’ve done stuff over time without the intention of it being this fame for being famous. It’s more about being community known, as you said. But that has had amazing consequences.

\n\n\n\n

And that kind of leads me to this next thing. I wonder, this question comes up all the time, but I do wonder if it’s more material now than it ever has been. I wonder if the community can always cope with the commercial pressure that is being born by the community?

\n\n\n\n

So for example, you know, you up to events and there’s a lot of people trying to sell you things. And maybe WordCamps from 15 years ago would’ve felt very much more a room full of like-minded individuals. Whereas now if you go to WordCamps, maybe there’s more of a feeling of, okay, that bit over there is more commercial, that bit over there is less commercial. But there’s always that kind of commercial angle.

\n\n\n\n

I don’t really know where I’m going with that, but the commercial side of things, I don’t know if you’ve got a feeling on, or a intuition on that?

\n\n\n\n

[00:25:54] Topher DeRosia: Sort of. Something I’ve noticed over the years is that it’s entirely possible to write a plugin, start selling it, have it be successful, build a business, hire people, maybe get a relatively large business, maybe hundreds of employees. And it feels good, it looks good, it’s great, it’s wonderful until it starts going, or getting hard. And then people who never thought this would happen start having to make difficult decisions that hurt people.

\n\n\n\n

If things aren’t going well, we need to let some people go. Maybe we need to let a lot of people go. Maybe we need to reorganise, whatever. And people look at this golden company, the pinnacle of WordPress, open source, love, family, peace, blah, blah, blah, and they’re letting people go. And you think, what? They’re just another business. They were just in it for the money. And they’re not, but it can feel that way when you’ve been let go.

\n\n\n\n

And at some point it has to be about the money. If you’re building a plugin because you love it and you’re selling it because people need it, that’s cool. If you’re running a business and people are depending on you for their livelihoods, you have to make the decisions. You have to do some hard things sometimes. And it’s never going to be comfortable. And at some point it’s going to look like you’re just another company. I’ve never been in this position, but I think it can be incredibly difficult to maintain a culture that we associate with the stereotype of WordPress community, in a full on company.

\n\n\n\n

[00:27:27] Nathan Wrigley: Yeah, I do know exactly what you mean. I think we, let’s say for example, let’s go back to Cisco. I used that example a minute ago. Let’s say that I work for Cisco. It’s pretty obvious what the goal there is. The goal is to ship loads of units of networking hardware all over the world, and then next year ship more than we ship this year and innovate more and.

\n\n\n\n

[00:27:45] Topher DeRosia: And you have investors that are going to hold your feet to the fire.

\n\n\n\n

[00:27:47] Nathan Wrigley: Right. Okay, so make money, make the investors happy, make the shareholders happy, and so on. That is so straightforward a bargain. But we in our community have this extra layer underpinning it of this philanthropic bit, which forms the basis of it. It’s literally the bedrock of it.

\n\n\n\n

And so that whole thing is propping everything else up on top of it, which I genuinely don’t know how the shifting sands of that all work. We’ve managed to get through 22 years plus, of that building up slowly over time, there being arguments here, there and everywhere. Minor arguments, some bigger arguments. We’ve somehow worked it through.

\n\n\n\n

But I don’t suppose that will ever get perfectly resolved. It’s going to be just part of the understanding that if you’re in open source, there’s a commercial bit. And if you can’t cope with that, well, that’s something you’re going to have to think about and look at. But also there’s going to be this whole philanthropic side, and that has to carry on and has to be funded, and figured out, and made important and advertised and all of that. I don’t have the brain to figure all that out, but it’s part of the jigsaw puzzle.

\n\n\n\n

[00:28:52] Topher DeRosia: Yeah. It’s truly something I’ve never had to deal with, and I hope I don’t, the scales of money. I had a job once when I was very young. We’re at home, we were newly married and money was tight, and we were talking about where to get $20 for groceries and things like that.

\n\n\n\n

And at work I was allocating hardware for new employees and, oh, let’s pick up two or three extra computers at $4,000 each because we might need them. That scale of money is, it’s something I’ve tried to be aware of.

\n\n\n\n

I look at a WordPress plugin company that has employees and I think, oh man, you have so much more money than I do, so much more. And maybe they do, but they also have so many more bills than I do. Just because they have several employees, and they’re doing well and things look great on Black Friday, doesn’t mean that they’re super wealthy or anything.

\n\n\n\n

[00:29:42] Nathan Wrigley: Yeah. I genuinely struggle with this component. I don’t think I’ll ever resolve it. I’m just aware that it exists. I’m aware that there’s people who are very polemic about it. There are people on the far this side, and there’s people on the opposite side who maybe are kind of struggling to shout across the gap. But then there’s people sitting in the middle who are somehow managing to figure it all out, or at least be sanguine about it, and not worrying too much about it. Time will tell. In the year 2026, I’m sure that it won’t get figured out, but it will probably carry on.

\n\n\n\n

I’ve got every hope that WordPress is exciting enough to carry on and that people will continue to use it. So I don’t worry too much about that. It’s just more whether or not the two sides of the argument, in an increasingly polemic world, whether the commercial side of WordPress and the non-commercial side of WordPress can figure out some way to walk upon the same path.

\n\n\n\n

[00:30:28] Topher DeRosia: There’s an element to WordPress that I think will carry on, even if it looks like WordPress is starting to fail. And that’s going to be the earliest people, the smallest contributors. Things have been really shaken up in WordPress in the last year or two, and I have friends who’ve left the community. And business is getting bigger and WordPress itself is changing. Gutenberg is a big thing now and AI is moving in and all that. So much is changing.

\n\n\n\n

And I have people say, why do you stay? Why do you keep doing WordPress? Specifically, why do I keep doing HeroPress? And I think my experience tells me that there will always be a 17-year-old picking up a computer at the library for the first time and discovering WordPress and starting a new life. And I want to be there for that person.

\n\n\n\n

[00:31:18] Nathan Wrigley: Yeah. So it’s going back to the 17-year-old you as well. You know, that bit that we had earlier where you figured out you had this intuition that there were some things in life which mattered more.

\n\n\n\n

One of the things that I think is really, like it’s so difficult to square this argument though, the whole thing where you see incredible wealth being generated by WordPress and you see incredible endeavors being put into WordPress by people who are really struggling to make ends meet. And I simply don’t have the capacity to figure out the solution to that. I cannot square that circle. But that is such a bit of cognitive dissonance that so much wealth is generated, on the one hand, and yet so much of the foundational work is created by people who may be struggling to put food on the table and what have you. And that is really challenging.

\n\n\n\n

[00:32:12] Topher DeRosia: Yeah, it is challenging. I don’t think it’ll ever be solved. I think it’s a universal problem of humanity. But similar to other areas, I think WordPress does better than other communities. There have been a bunch of discussions in the past about inclusivity, diversity in the WordPress community. And even people who point out the problems and say, look, we messed up here, this is bad, we need to change it, will say WordPress is probably the best of the IT world. There are problems. It’s bad. There are things we need to change, but we’re way ahead.

\n\n\n\n

[00:32:47] Nathan Wrigley: Okay, so that’s a really, sorry to interrupt. I got really caught up in what you just said then. I wasn’t expecting that to hit me quite as hard as it did. That was really interesting. That sort of sanguine approach to it. It’s never going to be perfect. We’re probably going to have division and factional fighting, I’m going to do air quotes around the word fighting, but you know what I mean, like infighting and what have you. But we do all right. Given how it could be, it’s okay. These things are just a part of the evolution of it. It’s a journey, not a destination. Yeah, that was interesting.

\n\n\n\n

[00:33:18] Topher DeRosia: We do have to take care though to not rest on our laurels, as it were. To say, oh, you know what? It’s okay, we’re better than everybody else, and so we don’t need to work on it. As soon as we do that, then we will not be better than everybody else.

\n\n\n\n

[00:33:30] Nathan Wrigley: And it’s curious because I think the people that I end up talking to when I attend things like WordCamps have that intuition. I think some, on some innate level, they get the bit that you just said. They know that it’s not perfect. And they know that work needs to be done. And they’re there for that thing. They want to fight the good fight, and make it so that this platform is available to the 17-year-old that you just described, so that they can pick this stuff up and publish their own stuff online, and have their own voice, and create their own identity and all of that. And it’s, yeah, really interesting.

\n\n\n\n

I think I have one more question. So we were talking about the impact of you doing stuff in the open. You obviously did all of that stuff in the open. You did everything, you put everything online, you got HeroPress and all of that kind of stuff. Would you still advocate that in the year 2025, 2026? Do you still think that’s probably the best way forward?

\n\n\n\n

The reason I’m asking that is because we see so much out there in the world, beguiling stuff. TikTok, YouTube, all these people getting YouTube famous, making giant amounts of money and all of that kind stuff. They’re doing it kind of purposefully in order to gain wealth. So it’s less that philanthropic side.

\n\n\n\n

If you could replay your life, would you do that? Is there any part of you which thinks you’d go down that route of being the kind of influencer, or are you happy that your life would replay in, if you were the youngster that you were many, many years ago and you were now that youngster, would you still do it the same way, do you think?

\n\n\n\n

[00:35:00] Topher DeRosia: I think I would. A couple years ago I did a video tip of the week on HeroPress. It was a video on YouTube. And people would say to me, you know what? It’s good that you offer this free stuff. You should put something behind a paywall and make money off it. And I think, oh, you know, that’d be cool. I could make money and pay the bills. But then I think, anything I put behind a paywall is not going to be able to help a 17-year-old who’s making a dollar a week. And that’s where my heart is. And I struggle.

\n\n\n\n

I’m doing a project right now that I would love to tell you about. Over the years, I’ve done support a lot. And I, early on, made a rule, if I get asked a question more than three times, I’m making documentation. And so I can just say, oh, here, go check this out. And over the years I’ve had many clients come back to me three months after I built a site and say, you know, you taught me how to use the WordPress admin and I don’t remember, can you show me again?

\n\n\n\n

So, I don’t know, a year ago I thought, I’m going to make a course for beginners, and it’s going to have videos that are one minute long about how to make a link, how to put in a picture, how to edit your form. Stuff that we all take for granted every day. But somebody who just got a website three months ago and used it once, they don’t remember.

\n\n\n\n

So I started down that road. I got MemberPress, I set up a site, and I made a list of videos to make. I was going to sell it to my clients as part of, you know, you bought a website, for an extra X dollars, here’s all this documentation you can have. A WordPresser at that educational conference said to me, I want to sponsor you to make those videos. You pick the topic, but do it on our hosting platform, just so that our name is there.

\n\n\n\n

And she gave me some money to do it. And she said, I want you to put them on your own YouTube channel. I didn’t have one. All these years, I didn’t have my own YouTube channel for my own videos. I want you to put them on your own YouTube channel, and once you get 2000 subscribers, I will pay you for every video you make. Just to put them on my own YouTube channel. I get to pick the topics. It’s just to get their name out. And I thought, wow, okay.

\n\n\n\n

So I pivoted, rather than make a course behind a paywall, I am doing this thing, but they’re all going on YouTube. And I started three weeks ago, and I’m putting up a video Monday, Wednesday, Friday, and I have 57 subscribers.

\n\n\n\n

[00:37:19] Nathan Wrigley: There’s a little road to go. That’s so nice.

\n\n\n\n

[00:37:23] Topher DeRosia: But this goes back to doing stuff in public so that it’s more significant later. Maybe in a year or two or five, I’ll have thousands of subscribers. And life experience has shown me that I need to not assume that I’m going to have thousands of subscribers within a month. That’s not how this works. You do stuff now, you build your foundation and you grow it. And eventually it gets big.

\n\n\n\n

HeroPress happened that way. You know, I did a few essays, and I did a few more and I did a few more. And then one day I thought, oh, I have 200 essays, and now I have 300. I never set a goal of how many or anything like that. I just did one at a time, and then suddenly there’s this big site full of stuff.

\n\n\n\n

And so that’s my current project is to make these videos, helping people figure out how to use WordPress. It’s not going to be just the beginners, it’s going to be, well, have a heart for beginners in any area, so I’m going to do some beginning programming stuff. I’ve built some cool stuff like WP Podcasts, aggregates podcasts. It wasn’t hard. It’s WP All Import, pulling them into the posts type. It’s not that big a deal. But I can make a 10 minute video on how I did that, and some developer’s going to go, wow, I never realised you can do this kind of stuff. So I’m pretty excited about it.

\n\n\n\n

[00:38:40] Nathan Wrigley: Yeah, your life seems to represent that kind of long term approach, and I can completely empathise with that. Obviously my thing is podcasting, and I have the same sort of story that I just began it and kept doing it and kept doing it, and people obviously, you know, found that there was something there for them, or they didn’t.

\n\n\n\n

But there was something that kept that propelled. And now I look back and there’s a few episodes that I can look back to and, it’s pretty amazing what that brought in its train. Most of it completely unexpected, most of it never intended, and now podcasting in the WordPress space is kind of what I do.

\n\n\n\n

And it just goes to show, if you do things with the right intention, and you do things for the long game, there is a way to make it work. You know, obviously you’ve got to keep the wolf from the door, and if you live in a part of the world where it’s incredibly important that you earn lots of money in order to just meet the bare essentials, then you’ve obviously got to take care of that at the beginning. But then after that, there’s these opportunities on top of that to sort of grow who you are, grow the community that we’re in. And maybe in the long term, over 2, 3, 5, 10, in your case, probably approaching 20 years in the WordPress space, it has an impact. It’s slowly but surely. Slow and steady wins the game, as they say.

\n\n\n\n

[00:39:57] Topher DeRosia: It does, yep.

\n\n\n\n

[00:39:58] Nathan Wrigley: In which case, I will say thank you for that conversation. It was very unexpected and really, really powerful in some regard there. You really made me think on a couple of occasions as we were chatting there, and I really appreciate that.

\n\n\n\n

So, Topher, where can we find you if somebody wants to see some of the stuff? You’ve already mentioned one. It’s probably topher.how. I don’t know if that’s the one you want to drop again.

\n\n\n\n

[00:40:17] Topher DeRosia: Yeah, let’s say topher.how. But if you search Google for Topher1Kenobi, you’ll find me pretty much everywhere.

\n\n\n\n

[00:40:24] Nathan Wrigley: Love that.

\n\n\n\n

[00:40:25] Topher DeRosia: I’ve never found anyone else use that name.

\n\n\n\n

[00:40:26] Nathan Wrigley: And it’s the number one, like the numeral one.

\n\n\n\n

[00:40:29] Topher DeRosia: Yeah.

\n\n\n\n

[00:40:30] Nathan Wrigley: Not the wan.

\n\n\n\n

[00:40:31] Topher DeRosia: My personal blog is at topher1kenobi.com. There’s HeroPress. I did an episode the other day with Christos Paloukas, and he said, hey, send me your links.

\n\n\n\n

[00:40:40] Nathan Wrigley: An essay.

\n\n\n\n

[00:40:40] Topher DeRosia: I sent him 15 links.

\n\n\n\n

[00:40:44] Nathan Wrigley: Do that to me as well. Whatever you do send me, then I will put them into the show notes. wptavern.com, search for the episode with Topher. It’s T-O-P-H-E-R. If you just look for that, you’ll probably find it. And thank you so much for chatting to me today. It was very pleasurable. Thank you.

\n\n\n\n

[00:40:59] Topher DeRosia: Yeah, I had a really good time too. Thanks.

\n
\n\n\n\n

On the podcast today we have Topher DeRosia.

\n\n\n\n

Topher is a web developer with over 30 years of experience, and he’s been deeply involved in the WordPress community for the past 15 years. He’s attended nearly 80 WordCamps around the world, contributed to projects like HeroPress, and has made it his mission to highlight the power and value of open source and remote work, especially in the WordPress ecosystem.

\n\n\n\n

In this episode, Topher joins me to talk about the value of working in public, and how sharing your work openly can create unexpected and lasting opportunities, whether that’s boosting your career, finding a sense of purpose, or building connections across the globe.

\n\n\n\n

We start with Topher’s personal journey, discovering the WordPress community and the profound impact it had on his life and family. The conversation explores what makes open source communities, like WordPress, so unique, and why working transparently can lead to moments of serendipity, and even job offers from people who have seen your contributions many years before.

\n\n\n\n

Topher shares stories about giving back, the motivation that comes from helping others, and the long-term satisfaction that comes from being generous with your time and expertise.

\n\n\n\n

We also discuss the tension between the philanthropic and commercial aspects of WordPress, and how individuals and companies navigate that balance.

\n\n\n\n

Towards the end, Topher reflects on building a body of work over time, trusting in the slow and organic process instead of seeking instant ‘influencer’ success. He explains why he still chooses to create and share resources for free, motivated by the hope of helping the next person just starting out.

\n\n\n\n

If you’ve ever wondered about the power of sharing your work, finding meaning in open communities, or how to make a difference over the long term, this episode is for you.

\n\n\n\n

Useful links

\n\n\n\n

Topher.How

\n\n\n\n

Media Forge Productions

\n\n\n\n

HeroPress

\n\n\n\n

Hallway Chats

\n\n\n\n

WP Photos Info

\n\n\n\n

WP Wallpaper

\n\n\n\n

topher1kenobe.com

\n\n\n\n

YouTube

\n\n\n\n

LinkedIn

\n\n\n\n

Mastodon

\n\n\n\n

Bluesky

\n\n\n\n

Facebook

\n\n\n\n

Last.fm

\";s: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, 03 Dec 2025 15: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:1;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:118:\"Open Channels FM: Empowering WordPress Accessibility with Community, Practical Tools, Education, and Real-World Impact\";s: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:33:\"https://openchannels.fm/?p=112396\";s: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:122:\"https://openchannels.fm/empowering-wordpress-accessibility-with-community-practical-tools-education-and-real-world-impact/\";s: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:364:\"In this episode, host Anne Bovelett sits down with Troy Chaplin, a well-known figure in the WordPress community and an advocate for web accessibility. Together, they dive into the importance of accessibility in web development, sharing personal stories about what sparked their passion for the topic and how it has influenced their careers. You’ll hear […]\";s: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, 03 Dec 2025 10:12:39 +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:2;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"Matt: State of the Word\";s: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=150742\";s: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:42:\"https://ma.tt/2025/12/state-of-the-word-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:461:\"

Though the stream didn’t work as we hoped, the recording of this year’s State of the Word, which in many ways was our best one yet, is up now.

\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:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 03 Dec 2025 07:54:56 +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:3;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:44:\"WordPress.org blog: WordPress 6.9 “Gene”\";s: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=19398\";s: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:40:\"https://wordpress.org/news/2025/12/gene/\";s: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:76596:\"
\"WordPress
\n\n\n\n

Each WordPress release celebrates an artist who has made an indelible mark on the world of music. WordPress 6.9, code-named “Gene,” honors the American Jazz pianist Gene Harris.

\n\n\n\n

A piano veteran, self taught at the age of six, Harris infused mainstream jazz with elements of soul, blues, and gospel, creating a warm, signature sound that is both elegant and iconic. Harris’ bluesy jazz lived at the intersection of worlds, weaving a rich landscape of texture and mood, with a thread of soulfulness that ignited listeners.

\n\n\n\n

Welcome to WordPress 6.9

\n\n\n\n

WordPress 6.9 brings major upgrades to how teams collaborate and create. The new Notes feature introduces block-level commenting when writing posts and pages that streamlines reviews, while the expanded Command Palette makes it faster for power users to navigate and operate across the entire dashboard. The new Abilities API provides a standardized, machine-readable permissions system that opens the door for next generation AI-powered and automated workflows. This release also delivers notable performance improvements for faster page loads and adds several practical new blocks alongside a more visual drag and drop to help creators build richer, more dynamic content.

\n\n\n\n

Download WordPress 6.9 “Gene”

\n\n\n\n

Introducing Notes: Seamless, Block-Level Collaboration

\n\n\n\n

Collaborate Smarter : Leave Feedback Right Where You’re Working

\n\n\n\n

With notes attached directly to blocks in the post editor, your team can stay aligned, track changes, and turn feedback into action all in one place. Whether you’re working on copy or refining design in your posts or pages, collaboration happens seamlessly on the canvas itself.

\n\n\n\n
\"View
\n\n\n\n

Command Palette Throughout the Dashboard

\n\n\n\n

Your tools are always at hand.

\n\n\n\n

Access the Command Palette from any part of the dashboard, whether you’re writing your latest post, deep in design in the Site Editor, or browsing your plugins. Everything you need, just a few keystrokes away.

\n\n\n\n
\"Command
\n\n\n\n

Fit text to container

\n\n\n\n

Content that adapts.

\n\n\n\n

There’s a new typography option for text-based blocks that’s been added to the Paragraph and Heading blocks. This new option automatically adjusts font size to fill its container perfectly, making it ideal for banners, callouts, and standout moments in your design.

\n\n\n\n
\""Novem"
\n\n\n\n

The Abilities API

\n\n\n\n

Unlocking the next generation of site interactions.

\n\n\n\n

WordPress 6.9 lays the groundwork for the future of automation with the unified Abilities API. By creating a standardized registry for site functionality, developers can now register, validate, and execute actions consistently across any context—from PHP and REST endpoints to AI agents—paving the way for smarter, more connected WordPress experiences.

\n\n\n\n
\"Abstract
\n\n\n\n

Accessibility Improvements

\n\n\n\n

More than 30 accessibility fixes sharpen the core WordPress experience. These updates improve screen reader announcements, hide unnecessary CSS-generated content from assistive tech, fix cursor placement issues, and make sure typing focus stays put even when users click an autocomplete suggestion.

\n\n\n\n

Performance enhancements

\n\n\n\n

WordPress 6.9 delivers significant frontend performance enhancements, optimizing the site loading experience for visitors. 6.9 boasts an improved LCP (Largest Contentful Paint) through on-demand block styles for classic themes, minifying block theme styles, and increasing the limit for inline styles – removing blockages to page rendering and clearing the rendering path by deprioritizing non-critical scripts. This release comes with many more performance boosts, including optimized database queries, refined caching, improved spawning of WP Cron, and a new template enhancement output buffer that opens the door for more future optimizations.

\n\n\n\n

And much more

\n\n\n\n

For a comprehensive overview of all the new features and enhancements in WordPress 6.9, please visit the feature-showcase website.

\n\n\n\n

Check out What’s New

\n\n\n\n

Learn more about WordPress 6.9

\n\n\n\n

Learn WordPress is a free resource for new and experienced WordPress users. Learn is stocked with how-to videos on using various features in WordPress, interactive workshops for exploring topics in-depth, and lesson plans for diving deep into specific areas of WordPress.

\n\n\n\n

Read the WordPress 6.9 Release Notes for information on installation, enhancements, fixed issues, release contributors, learning resources, and the list of file changes.

\n\n\n\n

Explore the WordPress 6.9 Field Guide. Learn about the changes in this release with detailed developer notes to help you build with WordPress.

\n\n\n\n

The 6.9 release squad

\n\n\n\n

Every release comes to you from a dedicated team of enthusiastic contributors who help keep things on track and moving smoothly. The team that has led 6.9 is a cross-functional group of contributors who are always ready to champion ideas, remove blockers, and resolve issues.

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

Thank you, contributors

\n\n\n\n

The mission of WordPress is to democratize publishing and embody the freedoms that come with open source. A global and diverse community of people collaborating to strengthen the software supports this effort.

\n\n\n\n

WordPress 6.9 reflects the tireless efforts and passion of more than 900+ contributors in countries all over the world. This release also welcomed over 279 first-time contributors!

\n\n\n\n

Their collaboration delivered more than 340 enhancements and fixes, ensuring a stable release for all – a testament to the power and capability of the WordPress open source community.

\n\n\n\n

2046 · Aakash Verma · Aaron Jorbin · Aaron Robertshaw · Aarti Chauhan · Aashish Sharma · aatospaja · Abdur Rahman Emon · Abu Hurayra · Adam Harley (Kawauso) · Adam Silverstein · Adam Zieliński · Aditya Bansode · Aditya Dhade · aditya shah · Aditya Singh · aduth · agulbra · Ahmed · ajaxStardust · Ajit Bohra · Akanshu Singh · Akeda Bagus · Aki Hamano · Akira Tachibana · Akramul Hasan · Akshat Kakkad · Akshay Dhere · Akshaya Rane · Albert Juhé Lluveras · alejandrogonzalvo · Alex Cuadra · Alex Lende · Alex Lion (阿力獅) · Alex Stine · Alexandre Buffet · Alexei Samarschi · Alexis Pandaan · alordiel · Alvaro Gómez · Amber Hinds · Amin · Aminul Islam · Aminul Islam Alvi · Amit Bhosale · Amy Kamala · Anatol Broder · Anders Norén · Andrea Fercia · Andrea Roenning · Andrei Draganescu · Andrew Hoyer · Andrew Nacin · Andrew Ozz · Andrew Serong · André Maneiro · Andy Fragen · Anita C · Ankit K Gupta · Ankit Kumar Shah · Ankit Panchal · Anne McCarthy · Anne-Mieke Bovelett · Anton Vlasenko · Antonio Sejas · Anuj Singh · Anveshika Srivastava · apmeyer · Ari Stathopoulos · Arkadiusz Rzadkowolski · Armando · Artemio Morales · Arthur Chu · Artur Piszek · ArtZ91 · asafm7 · asdofindia · Ashish Kumar (Ashfame) · Ashraful Haque Akash · askapache · Aslam Doctor · Aurooba Ahmed · aut0poietic · Axel DUCORON · Ayesh Karunaratne · Azhar Deraiya · Béryl de La Grandière · bartnv · bchecketts · Beee · Ben Dwyer · Benazeer · Benjamin Denis · Benjamin Zekavica · Benny · Benoit Chantre · Bernhard Kau · Bernhard Reiter · bernhard-reiter · bgermann · bhattaganesh · Bhavesh Desai · BiDbMAK · Bigul Malayi · Birgir Erlendsson (birgire) · Birgit Pauli-Haack · Bishal Shrestha · bobbyleenoblestudios · BogdanUngureanu · bonger · Boro Sitnikovski · Brad Griffin · brad hogan · Brad Jorsch · bradshawtm · Brandon Hubbard · Brandon Kraft · Brandon Zhang · Brennan Goewert · brhodes · Brian Alexander · Brian Coords · Brian Gardner · Brian Haas · brumack · Bryan Schneidewind · bshuchter · burnuser · byteninjaa0 · Cédric Chevillard · Callum Bridgford-Whittick · Calvin Alkan · Carlo Cannas · Carlos Bravo · Carlos G. P. · CarlSteffen · Carolina Nymark · Carolina Romo · Catalin Ciobanu · catgofire · cbirdsong · ccharel · Chad Butler · Chad Chadbourne · Chakrapani Gautam · Chi-Hsuan Huang · Chillifish · ChloeD · Chouby · Chris Zarate · chriscct7 · chrisdotdotdot · chrismattix · christinecooper · Christoph Daum · Christy Nyiri · cikrimcin · Ciprian Popescu · cjhaas · ckoerner · claimableperch · Code Amp · codebuddy · coleatkinson1 · Colin Stewart · ColinD · Cooper Dalrymple · Coralie Tixeront · Corey Salzano · Corey Worrell · Cornwell · Cory Hughart · Courtney Robertson · cucocreative · Cullen Whitmore · Cyrille37 · Daan van den Bergh · Dakota Chichester · damchtlv · Damir · Damon Cook · Dan Cameron · Dan Waldschmidt · Daniel Bachhuber · Daniel Iser · Daniel Richards · Daniele Scasciafratte · daniellacatus · danielmorell · Danny Schmarsel · dannyreaktiv · Darren Ethier (nerrad) · Darshit Rajyaguru · Dave Ryan · daveguitaruno · David Aguilera · David Arenas · David Artiss · David Baumwald · David Calhoun · David Herrera · David Levine · David Perez · David Riviera · David Smith · DavidB · dawidadach · Dean Sas · Debabrata Karfa · DEBARGHYA BANERJEE · Denis de Bernardy · Denis Žoljom · Dennis Ploetner · Dennis Snell · Dennys Dionigi · Densi Nakum · derekherman · Devasheesh Kaul · Dhananjay Kuber · Dhrumil Kumbhani · Dhruval Shah · Dhruvang21 · Dhruvik Malaviya · diebombe · Dilip Bheda · Dilip Modhavadiya · Dion Hulse · divinenephron · dj.cowan · Dominik Schilling · dominiquepijnenburg · donalirl · doughamlin · DougMelvin · drawcard · dretzlaff · Drew Jaynes · Drivingralle · dsawyers · dustintechsmith · eclev91 · eduwass · Ehti · elialum · Eliezer Peña · Ella van Durpe · Elvis Morales · emaildano · Emerson Maningo · Emilie LEBRUN · Emran Ahmed · Enaan Farhan · Enrico Battocchi · Enrique Sánchez · epeicher · Eric · Eric Andrew Lewis · Erick Hitter · Erik · Erik Joling · Eshaan Dabasiya · ethanscorey · Evan Mullins · Even Tobiesen · Fabian Kägy · Fabian Todt · Faisal Ahammad · Faisal Alvi · fakhriaz · Falguni Desai · Felix Arntz · Felix Renicks · Fellyph Cintra · Florian TIAR · Francisco Vera · FrogDesk Strategy · Fumiki Takahashi · Gael Denysiak · Gajendra Singh · Gan Eng Chin · Garrett Hyder · Gary Jones · Gary Pendergast · Gaurang Dabhi · Gautam Mehta · Gennady Kovshenin · George Mamadashvili · George Stephanis · Georgi Stoyanov · gernberg · giuliorubelli · Glen Davies · Gopal Krishnan · Grant M. Kinney · Greg Ziółkowski · Guido · Guido Scialfa · Guillaume TURPIN · Gulamdastgir Momin · H. Adam Lenz · H. Kabir · hanimbarek · hanneslsm · Hans-Gerd Gerhards · Hardik Raval · Hareesh S · Harsh Gajipara · Harshal Kadu · harshbhonsle08 · harshdeepgill · Harun · Helen Hou-Sandi · HelgaTheViking · Hidenori ISHIKAWA · Hilay Trivedi · Himani Panchal · Himanshu Pathak · Hiroshi Sato · Hit Bhalodia · Hitendra Chopda · Hitesh Talpada · Hozefa Saleh · Hrohh · hugod · hugosolar · humanify · huubl · Huzaifa Al Mesbah · Héctor Prieto · Ian Dunn · ignatiusjeroe · Igor Radovanov · ikriv · imokweb · Imran · Indira Biswas · Ipstenu (Mika Epstein) · Iqbal Hossain · Isabel Brison · Ishika Bansal · Ivan Ottinger · Jabe · Jacob Cassidy · Jagir Bahesh · Jaimin Prajapati · Jakaria Istauk · Jake Spurlock · jakeparis · James Koster · James LePage · James Monroe · James Sansbury · James Titus · Jamie · Jamie Burchell · Jamie Marsland · janthiel · Jarda Snajdr · jarekmorawski · Jarkko Saltiola · Jason Adams · Jason LeMahieu (MadtownLems) · Jason Sauerwald · Javier Casares · Jay McPartland · Jayaram · Jaydip · Jean-Baptiste Audras · Jeff Chi · Jeff Matson · Jeff Ong · Jeff Paul · Jeffrey de Wit · Jeffro · jeflopo · Jenny Dupuy · Jeremiah Bratton · Jeremy Felt · Jeremy Massel · Jeroen Schmit · jeryj · Jesin A · jessedyck · Jessica Lyschik · Jigar Bhanushali · Jigar Panchal · jikamens · jnweaver · Joan Namunina · JoAnne Obata · JochenT · jodamo5 · Joe Dolson · Joe Hoyle · Joe McGill · Joen Asmussen · Johannes Jülg · John Blackbourn · John Brand · John Godley · John James Jacoby · John Parris · John Regan · JohnVieth · Jon Surrell · Jonathan Bossenger · Jonathan Champ · Jonathan Desrosiers · Joni Erkkilä · Jonny Harris · Jono Alderson · jordesign · Jorge Costa · Jos Velasco · Joseph Scott · Josh Habdas · Joshua Goode · jrmd · Juan Aldasoro · Juan Cook · JuanMa Garrido · juliengardair · Juliette Reinders Folmer · Justin Ahinon · Justin Tadlock · Jyotirmoy Roy · K. Adam White · Kai Hao · Kailey (trepmal) · Kaito Hanamori · Kakoma · Kalpesh · Karin Christen · Karol Manijak · Karthick Murugan · Karthikeya Bethu · Kaspars · Kat Hagan · Kateryna K. a11n · Kathryn Presner · Katrina Massey · Kausar Alam · Kaushik Domadiya · Kawshar Ahmed · kaygee79 · Kazuto Takeshita · Kelly Choyce-Dwan · Kelly Hoffman · Kelly Mears · Kerfred · Kerry Liu · kesselb · Kevin Leary · kgagne · Khoi Pro · Khushi Patel · killerbishop · Kingsley Felix · Kira Schroder · Kishan Jasani · kitchin · Kjell Reigstad · kkmuffme · Kleor · Knut Sparhell · Konstantin Obenland · Konstantinos Xenos · kpapazov · kprocyszyn · krishaamer · Krunal Bhimajiyani · Krupa Nanda · kshaner · kub1x · kubiq · kunalpuri123 · Kush Sharma · Kushagra Goyal · Lachezar Gadzhev · lakrisgubben · Lakshyajeet Singh Goyal · Lalit Kumawat · Lance Willett · Laura Byrne · Lauri Saarni · ldanielgiuliani · Lee Willis · leedxw · leemon · Lena Morita · Leonidas Milosis · Levin Baria · lgseo · LilGames · liviopv · logiclink · LogicRays Technologies · lordandy1984 · Lovro Hrust · Lucas Martins · Luigi Teschio · luisherranz · LukasFritzeDev · Lukasz · Luke Cavanagh · maccyd · Madhavi Shah · Madhu Dollu · Maggie Cabrera · Maikuolan · manfcarlo · manhatthien98 · Manuel Camargo · Manzoor Wani · maorb · Marc · Marc Armengou · Marcio Duarte · Marco Ciampini · Marcus · Marcus Kazmierczak · marian1 · Marie · Marin Atanasov · Mario Santos · mariohamann · mariushosting · Marty · MartyThornley · Mary Baum · Mary Hubbard · Mat Lipe · mathiscode · Matias Benedetto · Matias Ventura · Matt Mullenweg · Matt Robinson · Matt West · Matteo Enna · Matthias Pfefferle · mattryanwalker · Max Schmeling · Maxime Pertici · Mayank Tripathi · Mayur Prajapati · Md Abdullah Al Arif · Md Abdullah Al Fahad · Md Abul Bashar · MD ISMAIL · MD Kawsar Chowdhury · Md Masum Molla Alhaz · Md Obidullah (obiPlabon) · Md Rashed Hossain · Md Sabbir Hossain · Md. Najmul Islam · Md.Mehedi Hasan · mdmoreau · mdviralsampat · Meet Makadia · megane9988 · Meher Bala · Mel Choyce-Dwan · Micha Krapp · Michael Burridge · Michael Keck · Michael Nelson · Michael Sumner · michaelreetz · Michal Czaplinski · Michelle Schulp Hunt · Miguel Fonseca · Miguel Lezama · Mikael Korpela · Mike · Mike Fitzpatrick · Mike Hansen · Mike Jolley · Mike McAlister · Mike Ritter · Mikin Chauhan · Milan Ricoul · Minal Diwan · Miroku · missveronica · Mitchell Austin · mkeck · mlaetitia1986 · mleray · mleraygp · Mobarak Ali · Mohammad Rockeybul Alam · Mohammed Kateregga · Moses Cursor Ssebunya · mrwweb · mtg169 · mujuonly · Mukesh Panchal · Mukul Singh · Mumtahina Faguni · Núria Nadal i Rovira · n8finch · Naman Vyas · NANI SAMIREDDY · Narendra Sishodiya · Naresh Bheda · Nasim Miah · Naveen Dwivedi · Navneet Kaur · Nazar Hotsa · Nazmul Hosen · Ned Zimmerman · nexbridge · Nextendweb · Neycho Kalaydzhiev · Nick · Nick · Nick Diego · Nick Halsey · nickbrazilian · nickjbedford · nickpagz · nickwilmot · Nico · nidhidhandhukiya · Niels Lange · nigelnelles · Nik Tsekouras · Nikan Radan · Nikunj Hatkar · Nimesh · Nino Mihovilic · Ninos · Noah Allen · Noel Santos · Noruzzaman · nosilver4u · oceantober · oferlaor · okat · Okawa Yasuno · Olga Gleckler · Oliver Campion · Omar Alshaker · Ophelia Rose · Optimizing Matters · owi · Paal Joachim Romdahl · Pablo Honey · Palak Patel · Paragon Initiative Enterprises · Parin Panjari · Parth vataliya · Partho Hore · Pascal Birchler · Patel Jaymin · Patricia BT · Patrick Lumumba · Patrick Piwowarczyk · Paul · Paul Bearne · Paul Biron · Paul Bonneau · Paul Kevan · Paulo Trentin · paulstanos · pcarvalho · Pedro Figueroa · Per Egil Roksvaag · Peter Ingersoll · Peter Westwood · Peter Wilson · petitphp · Philip John · Philip Sola · Philipp Bammes · Phill · piskvorky · Pooja Bhimani · poojapadamad · porg · prab18hat · Praful Patel · Pranjal Pratap Singh · Prasad Karmalkar · prasadgupte · Prashant Baldha · Pratik Londhe · Presskopp · prettyboymp · puggan · quentinr64600 · Rachel Baker · Rafiqul Islam · Raluca · Ramanan · Rami Yushuvaev · Ramon Ahnert · Ramon Corrales · Ramon James · Ravi Chudasama · Ravi Gadhiya · rcrdortiz · Rehan Ali · Rejaul Alom Khan · Remy Perona · Renato Alves · renishsurani · retrofox · Rezwan Shiblu · Riad Benguella · riadev · Rich Tabor · Richard Korthuis · Riddhi Dave · Rinat · Rinkal Pagdar · Rishabh Gupta · Rishav Dutta · Rishit Gupta · Risto Jovanovic · Ritoban · Robert Anderson · Robert Chapin · Robert Ghetau · Robert O\'Rourke · Robmcclel · Rodrigo Primo · roelof · Rolly Bueno · Ronak prajapati · room34 · Rostislav Wolný · Rotem Gelbart · Rufaro Madamombe · Rutvik Bhambhi · Ryan McCue · Ryan Welcher · S Page · Sören Wünsch · Sabbir Ahmed · Sabbir Sam · SACHINRAJ CP · Sahil Jadhav · Sainath Poojary · Sajjad Hossain Sagor · sakibmoon · Sam · sam_a · Samir Malpande · Sampat Viral · Samuel Paget · Samuel Wood (Otto) · Sandeep Dahiya · Sandip Sinh · Sandy McFadden · Sarah Norris · sarah semark · Sarthak Nagoshe · Satish Prajapati · saurabh.dhariwal · Saxon Fletcher · scholdstrom · Scott Buscemi · Scott Kingsley Clark · Scott Taylor · scribu · Sebastian Pisula · Seif Radwane · Sergey Biryukov · Seth Rubenstein · SH Sajal Chowdhury · Shadi G شادي جـ · Shail Mehta · Shalin Shah · Shane Muirhead · Shashank Jain · Shashank Shekhar · Shazzad Hossain Khan · Sheri Grey · Shipon Karmakar · Shreya Shrivastava · Shubham Patil · Shyamsundar Gadde · sidharthpandita · siliconforks · Silpa TA · simonefontana · Slava Abakumov · smerriman · Sneha Patil · Sophie Dimitrov · Sourabh Jain · Sourav Pahwa · Soyeb Salar · Spenser Hale · spstrap · Sridhar Katakam · stankea · Stanko Metodiev · staurand · Stefan Pasch · Stefan Velthuys · Stephen Bernhardt · Stephen Harris · Steve Dufresne · strarsis · Subrata Sarkar · Sudip Dadhaniya · Sujan Sarkar · Sukhendu Sekhar Guria · Sumit Bagthariya · SunilPrajapati · sunnykasera · sunyatasattva (a11n) · supernovia · SuzuKube · svedish · Svetoslav Marinov · Sybre Waaijer · syhussaini · T4ng · Taco Verdonschot · Takashi Irie · Takuro · Tammie Lister · tatof · tecnogaming · Tetsuro Higuchi · tharsheblows · thelmachido a11n · ThemeAWESOME · theMikeD · Thomas Kräftner · Thorsten Frommen · Till Krüss · Tim Havinga · Tim Sheehan · Timo Tijhof · Timothée Brosille · Timothée Moulin · Timothy Jacobs · TJarrett · Tobias Bäthge · Tobias Zimpel · tobifjellner (Tor-Bjorn “Tobi” Fjellner) · Tom de Visser · Tom J Nowell · Tomoki Shimomura · Toni Viemerö · Tonya Mork · Toro_Unit (Hiroshi Urabe) · Torsten Landsiedel · Travis Smith · traxus · Trevor Mills · tristanleboss · Troy Chaplin · Trupti Kanzariya · tsteel · Tung Du · Tushar Bharti · Tushar Patel · Tussendoor B.V. · Ugyen Dorji · Umesh Nevase · Umesh Singh · Unsal Korkmaz · upadalavipul · Utsav Ladani · Utsav tilava · Valentin Grenier · Vape tsimshatsui · vbbp · Vedansh Mishra · Vegard S. · vgnavada · Vicente Canales · vidugupta · Vijendra Jat · Viktor Szépe · Vinit · Vipul Ghori · Vipul Gupta · Vipul Patil · Vishit Shah · vladimiraus · vortfu · Vrishabh Jasani · Walter Ebert · WebMan Design | Oliver Juhas · websupporter · webwrotter · Weston Ruter · whaze · widhy980 · Will Skora · wplmillet · xate · xavilc · xerpa43 · xipasduarte · Yagnik Sangani · Yash · Yash B · Yash Jawale · Yogesh Bhutkar · YogieAnamCara · Yui · Zebulan Stanphill · Zeel Thakkar · Zunaid Amin · Łukasz Strączyński · 耗子

\n\n\n\n

More than 71 locales have fully translated WordPress 6.9 into their language. Community translators are working hard to ensure more translations are on their way. Thank you to everyone who helps make WordPress available in 200+ languages.

\n\n\n\n

Last but not least, thanks to the volunteers who contribute to the support forums by answering questions from WordPress users worldwide.

\n\n\n\n

Get involved

\n\n\n\n

Participation in WordPress goes far beyond coding. And learning more and getting involved is easy. Discover the teams that come together to Make WordPress and use this interactive tool to help you decide which is right for you.

\";s: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, 02 Dec 2025 20:12: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: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:\"\";}}}}}i:4;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:14:\"Matt: SoTW Eve\";s: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=150730\";s: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:31:\"https://ma.tt/2025/12/sotw-eve/\";s: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:1939:\"
\"\"
\n\n\n\n

The State of the Word is tomorrow, and it’s so fun to see SF abuzz with WordPress open source energy. We’re doing a lot of firsts tomorrow, including the first release timed to the State of the Word, and we’ll have a good chunk of the release team there to push the button and bring WordPress 6.9 to the world.

\n\n\n\n

We’ll also be crossing streams with another community: in the last ten minutes, we’ll join TBPN, the new must-watch daily tech show.

\n\n\n\n

The art and activations are looking so good; it’s fun to see how everything evolves. Tokyo was so beautiful last year; I wasn’t sure how we’d top it, but the creativity of everyone coming together has sparked something new this year that I think is quite cool. We’re trying to honor our mission of democratizing publishing, making things that are powerful and capable, but also retain the flicker of art.

\n\n\n\n

We’re also opening up TinkerTendo to the community. I was just there with a few dozen of the crew, and the vibes are so fun. If you’re in SF, definitely swing by and connect with the folks building the most open internet we can all enjoy.

\n\n\n\n

Check out the livestream tomorrow, it’ll be a nice capstone to all we’ve built together this year.

\";s: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, 02 Dec 2025 05:24: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: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:5;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:73:\"Open Channels FM: The Modern Quest for the Perfect Tab Management Browser\";s: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:33:\"https://openchannels.fm/?p=112370\";s: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://openchannels.fm/the-modern-quest-for-the-perfect-tab-management-browser/\";s: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:141:\"Tab wars: Wrigley’s drowning in 45 tabs while BobWP casually guards two; they chat about browsers and the beauty of hitting “clear all”\";s: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, 02 Dec 2025 02:15:08 +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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:78:\"Jake Spurlock: Introducing Placeholders: A WordPress Plugin for Ad Wireframing\";s: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:33:\"https://jakespurlock.com/?p=52207\";s: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:61:\"https://jakespurlock.com/2025/12/placeholders-ad-wireframing/\";s: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:6886:\"

I’m excited to announce the release of Placeholders, a new WordPress plugin that makes wireframing and prototyping ad layouts easier than ever. The plugin is now available on WordPress.org and ready for production use.

\n\n\n\n

The Problem

\n\n\n\n

If you’ve ever worked on a WordPress site that displays advertising, you know the challenge: during the design and development phase, you need placeholder blocks that accurately represent where ads will appear. You want them to match real ad dimensions, but you don’t want to set up actual ad serving just to see if your layout works.

\n\n\n\n

I found myself repeatedly creating custom HTML blocks or CSS to mock up ad placements while working on various projects. Each time, I’d have to look up IAB standard ad sizes, write the markup, and style the placeholders. It was tedious and repetitive work that felt like it should be solved once and reused everywhere.

\n\n\n\n

The Solution

\n\n\n\n

Placeholders solves this by providing 14 Gutenberg blocks for the most common advertising sizes. Each block is pre-configured with the correct dimensions and provides a clean, wireframe-style placeholder that clearly indicates the ad size and space it will occupy.

\n\n\n\n

Supported Ad Sizes

\n\n\n\n

The plugin includes blocks for all the standard IAB ad sizes:

\n\n\n\n
    \n
  • Leaderboard (728×90px)
  • \n\n\n\n
  • Medium Rectangle (300×250px)
  • \n\n\n\n
  • Wide Skyscraper (160×600px)
  • \n\n\n\n
  • Mobile Banner (320×50px)
  • \n\n\n\n
  • Billboard (970×250px)
  • \n\n\n\n
  • Large Rectangle (336×280px)
  • \n\n\n\n
  • Half Page (300×600px)
  • \n\n\n\n
  • Small Square (200×200px)
  • \n\n\n\n
  • Square (250×250px)
  • \n\n\n\n
  • Small Rectangle (180×150px)
  • \n\n\n\n
  • Vertical Rectangle (240×400px)
  • \n\n\n\n
  • Large Leaderboard (970×90px)
  • \n\n\n\n
  • Portrait (300×1050px)
  • \n\n\n\n
  • Netboard (580×400px)
  • \n
\n\n\n\n

Key Features

\n\n\n\n

Simple to Use

\n\n\n\n

Just search for any ad size in the block inserter (e.g., “leaderboard” or “medium rectangle”), insert the block, and you’re done. No configuration required.

\n\n\n\n

Customizable

\n\n\n\n

Each placeholder supports:

\n\n\n\n
    \n
  • Background color customization
  • \n\n\n\n
  • Text color customization
  • \n\n\n\n
  • Alignment options (wide and full alignment)
  • \n\n\n\n
  • Responsive design that works on all screen sizes
  • \n
\n\n\n\n

Clean Design

\n\n\n\n

The placeholders feature a minimalist design that clearly shows:

\n\n\n\n
    \n
  • The ad size name
  • \n\n\n\n
  • Exact pixel dimensions
  • \n\n\n\n
  • A subtle border to indicate the space
  • \n
\n\n\n\n

This makes it easy to visualize your layout without the placeholders dominating the design.

\n\n\n\n

Use Cases

\n\n\n\n

Placeholders is perfect for:

\n\n\n\n
    \n
  1. Wireframing: Quickly mock up ad placements during the design phase
  2. \n\n\n\n
  3. Development: Reserve space for ads while building the site
  4. \n\n\n\n
  5. Client Presentations: Show clients where ads will appear without setting up ad serving
  6. \n\n\n\n
  7. Testing Layouts: Experiment with different ad placements and sizes
  8. \n\n\n\n
  9. Documentation: Create visual guides showing ad placement options
  10. \n
\n\n\n\n

Technical Details

\n\n\n\n

The plugin is built with modern WordPress development practices:

\n\n\n\n
    \n
  • 100% Gutenberg native – Works seamlessly with the block editor
  • \n\n\n\n
  • No dependencies – Pure PHP, CSS, and JavaScript
  • \n\n\n\n
  • Lightweight – Minimal performance impact
  • \n\n\n\n
  • Well-tested – Includes comprehensive unit tests
  • \n\n\n\n
  • GPL licensed – Free and open source
  • \n
\n\n\n\n

All blocks are grouped in a dedicated “Placeholders” category in the block inserter, making them easy to find and use.

\n\n\n\n

Installation

\n\n\n\n

You can install Placeholders in three ways:

\n\n\n\n

From WordPress.org (Recommended)

\n\n\n\n
    \n
  1. Go to Plugins → Add New in your WordPress admin
  2. \n\n\n\n
  3. Search for “Placeholders”
  4. \n\n\n\n
  5. Click Install Now, then Activate
  6. \n
\n\n\n\n

From the Plugin Directory Download directly from wordpress.org/plugins/placeholders

\n\n\n\n

From GitHub Clone or download from github.com/whyisjake/placeholders

\n\n\n\n

What’s Next

\n\n\n\n

This is the 1.0 release, and I’ve kept the scope focused on solving one problem well. However, I have ideas for future enhancements:

\n\n\n\n
    \n
  • Custom ad size support
  • \n\n\n\n
  • Templates for common ad layout patterns
  • \n\n\n\n
  • Integration with popular ad management plugins
  • \n\n\n\n
  • Dark mode styling options
  • \n
\n\n\n\n

If you have feature requests or find bugs, please open an issue on GitHub.

\n\n\n\n

Try It Out

\n\n\n\n

The plugin is available now on WordPress.org. If you work with ad layouts in WordPress, give it a try and let me know what you think!

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

Happy wireframing!

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

Placeholders is free and open source software, released under the GPL v2 license.

\";s: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, 01 Dec 2025 17: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:13:\"Jake Spurlock\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:51:\"Open Channels FM: Tech Doesn’t Die, It Transforms\";s: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:33:\"https://openchannels.fm/?p=113128\";s: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:54:\"https://openchannels.fm/tech-doesnt-die-it-transforms/\";s: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:89:\"Think about it, most ideas behind any tech never really went away, they have transformed.\";s: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, 01 Dec 2025 13:48: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: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:8;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"Jonathan Desrosiers: Seven Years a Committer: My WordPress Commit-iversary\";s: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:38:\"https://jonathandesrosiers.com/?p=8542\";s: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://jonathandesrosiers.com/2025/11/seven-years-a-committer-my-wordpress-commit-iversary/\";s: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:8020:\"

Today officially marks 7 years since my first changeset was committed to the WordPress open source project.

\n\n\n\n

Within WordPress, a committer is a contributor who has the ability to modify the main WordPress source repository. Since 2004, roughly 117 people have been given commit access, and 111 have made at least one commit.

\n\n\n\n

In previous years, I linked to posts from other contributors about what it means to be a great participant in open source. Over the past year, though, I have spent a lot of time thinking about what being a great contributor means to me and how decisions are made at scale in open source projects.

\n\n\n\n

This year, instead of pointing to others, I am proud to share an essay of my own. It is a piece I drafted for the Maintaine.rs book, inspired by my talk at WordCamp Europe, where I explored how Core Committers think and how decisions take shape within the WordPress project.

\n\n\n\n

I also started drafting a few other posts on related topics, so stay tuned for those in the coming weeks. I hope to use the quieter days of December to get those over the finish line.

\n\n\n\n

Lucky Number Seven

\n\n\n\n

Each year I try to give this anniversary post a theme. Since seven is considered a lucky number by many people (especially those on the pass line), this year’s theme is luck.

\n\n\n\n

I am writing this while on a plane to San Francisco for the 2025 State of the Word. This year took me to two countries I had never visited before. I spoke at several conferences and events, and I had the chance to mentor many contributors in different ways.

\n\n\n\n

I feel incredibly lucky not only to have a job that allows me to help maintain open source software that powers more than 43% percent of the web, but also to have the trust of the community that maintains it right along side me.

\n\n\n\n

Commits by the numbers (2024-2025)

\n\n\n\n

Here are some commit stats from November 30, 2024 through November 29, 2025:

\n\n\n\n
    \n
  • 365 total commits (up ~42% from the previous year)
  • \n\n\n\n
  • 123 commits to trunk (down ~5%)
  • \n\n\n\n
  • 21 version bumps (up 320%)
  • \n\n\n\n
  • 5 reverts (down ~44%)
  • \n\n\n\n
  • 4 “unprops” (no change)
  • \n\n\n\n
  • 22 tags created (up 2,100%)
  • \n\n\n\n
  • 162 total props given out in my commits (down 42%)
  • \n\n\n\n
  • 66 unique contributors given props in my commits (down ~59%)
  • \n\n\n\n
  • Of those 66 contributors, 8 were receiving props for the first time (down ~70%)
  • \n
\n\n\n\n

Roughly grouped, here are my commits organized by component (* designates a component that I help maintain):

\n\n\n\n
    \n
  • Administration: 1
  • \n\n\n\n
  • Build/Test Tools: 175*
  • \n\n\n\n
  • Bundled Themes: 7*
  • \n\n\n\n
  • Coding Standards: 3 (focus, not a component)
  • \n\n\n\n
  • Date/Time: 1
  • \n\n\n\n
  • Database: 1
  • \n\n\n\n
  • Docs: 1 (focus, not a component)
  • \n\n\n\n
  • Editor: 3
  • \n\n\n\n
  • Emoji: 2
  • \n\n\n\n
  • External Libraries: 4*
  • \n\n\n\n
  • General: 4*
  • \n\n\n\n
  • HTML API: 2
  • \n\n\n\n
  • Import: 1
  • \n\n\n\n
  • Media: 2*
  • \n\n\n\n
  • Press This: 1 (retired component
  • \n\n\n\n
  • Security: 83
  • \n\n\n\n
  • Site Health: 1
  • \n\n\n\n
  • Tests: 5 (focus, not a component)
  • \n\n\n\n
  • Toolbar: 1
  • \n\n\n\n
  • Upgrade/Install: 1*
  • \n
\n\n\n\n

Add it up: All Seven Years

\n\n\n\n

Here are stats for all seven years of being a WordPress Core Committer (November 30, 2018 through today):

\n\n\n\n
    \n
  • 2,552 total commits
  • \n\n\n\n
  • 1,201 commits to trunk
  • \n\n\n\n
  • 265 version bumps
  • \n\n\n\n
  • 174 version tags created
  • \n\n\n\n
  • 4 branches created
  • \n\n\n\n
  • 58 reverts
  • \n\n\n\n
  • 24 “unprops”
  • \n\n\n\n
  • 11 commits with hidden song lyrics
  • \n\n\n\n
  • 4,846 total props given out in my commits
  • \n\n\n\n
  • 747 unique contributors given props in my commits
  • \n
\n\n\n\n

I have also now entered into the top 5 list of contributors with the most commits to the code base across all branches:

\n\n\n\n
    \n
  1. Ryan Boren (9,081)
  2. \n\n\n\n
  3. Sergey Biryukov (8,342)
  4. \n\n\n\n
  5. Andrew Nacin (5,418)
  6. \n\n\n\n
  7. Andrew Ozz (3,366)
  8. \n\n\n\n
  9. Me (2,552)
  10. \n
\n\n\n\n

A Few Other Observations

\n\n\n\n

I realized while writing this year’s anniversary post that my first commit falls on Blue Beanie Day. I may have to get a WordPress logo blue beanie for next year.

\n\n\n\n

And hat tip to Simon Willison for pointing out that ChatGPT was launched on November 30th, 2022.

\n\n\n\n

As Always: Thank YOU! \"🫵\"

\n\n\n\n

Being a WordPress committer would not be nearly as meaningful without the countless contributions from people across the community who choose to support and maintain this free software in so many different ways. So thank you to every single one of you. \"❤\"

\n\n\n\n

Previous Commit-iversaries

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

Featured image credit: CC0 licensed photo by CCC from the WordPress Photo Directory.

\n\n\n\n

\n

The post Seven Years a Committer: My WordPress Commit-iversary appeared first on Jonathan Desrosiers.

\";s: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, 01 Dec 2025 04:51: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:19:\"Jonathan Desrosiers\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:25:\"Matt: Thanksgiving Sunday\";s: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=150717\";s: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:42:\"https://ma.tt/2025/11/thanksgiving-sunday/\";s: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:876:\"

It’s an interesting cultural moment right now: I think Bryan tweeted, many people are watching people catching balls, while others are watching Bryan Johnson tripping balls. Bryan Johnson, of Blueprint fame, is livestreaming taking a heroic dose of mushrooms. It’s been an interesting journey with the journalist Ashlee Vance, Naval Ravikant, David Friedberg, Marc Benioff, Genevieve Jurvetson, and now a DJ set by Grimes. I was hoping he’d be talking/interacting more with the guests, but it’s been more of a live commentary. Glad all the work Bryan is doing, as Genevieve said, to broaden the Overton window on this, really re-opening a lot of research originially started by the government and pharmacutical companies 50-60 years ago.

\";s: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, 30 Nov 2025 22:32:03 +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:10;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"Gutenberg Times: Gutenberg Changelog #125 – WordPress 6.9, Gutenberg 22.1 and Gutenberg 22.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:53:\"https://gutenbergtimes.com/?post_type=podcast&p=43300\";s: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:107:\"https://gutenbergtimes.com/podcast/gutenberg-changelog-125-wordpress-6-9-gutenberg-22-1-and-gutenberg-22-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:58545:\"

The newest episode of the Gutenberg Changelog podcast, #125, features hosts Birgit Pauli-Haack and JC Palmes discussing a major trio of releases: WordPress 6.9, Gutenberg 22.1, and Gutenberg 22.2.

\n\n\n\n

JC highlights several exciting features in WordPress 6.9, focusing on significant developer and editor experience improvements, including the full iframe editor, routing, DataViews, the Interactivity API, pattern logic and content-only mode, and the Abilities system. A personal favorite is the new Accordion Block.

\n\n\n\n

The discussion then moves to the latest Gutenberg releases.

\n\n\n\n

Gutenberg 22.1 introduces the new core/tabs block and brings enhancements like JS/CSS editing for the HTML Block, updates to the Twitter/X embed icon, and various improvements to DataViews and Breadcrumbs.

\n\n\n\n

Gutenberg 22.2 focuses on performance, block editor polish, accessibility, and developer experience. Key updates include expanded functionality for the Breadcrumbs block, support for background video embeds in the Cover block, and new controls for text justification and width in the Block Editor. It also refines the block-locking functionality with changes to pattern management, such as replacing the ‘Ungroup’ option with ‘Add edit section’ for specific blocks.

\n\n\n\n

Tune in to get the full rundown on how these releases will shape the future of site building in WordPress.

\n\n\n\n

Show Notes / Transcript

\n\n\n\n

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

Show Notes

\n\n\n\n

JC Palmes, WebDev Studios

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

Announcements

\n\n\n\n

Gutenberg Changelog podcast now also available on YouTube

\n\n\n\n

WordPress 6.9

\n\n\n\n

State of the Word Dec 2, 2025, at 20:00 UTC

\n\n\n\n

Release Candidate 3

\n\n\n\n

Source of Truth is out.

\n\n\n\n

Field Guide

\n\n\n\n

WordPress Importer can now migrate URLs in your content

\n\n\n\n

Gutenberg-Releases

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

\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: Welcome to our 125th episode of the Gutenberg Changelog Podcast. In today’s episode we will talk about WordPress 6.9, Gutenberg 22.1 and Gutenberg 22.2 releases or versions. I’m your host Birgit Pauli-Haack, Curator at the Gutenberg Times and a full-time core contributor for the WordPress open source project sponsored by Automattic. It’s a special delight to have JC Palmes with me on the show today. JC is the principal Technical Manager at WebDev Studios. Welcome back to the show, JC. How are you today?

\n\n\n\n

JC Palmes: I’m doing good, Birgit. I am very busy but still alive. So that’s a win.

\n\n\n\n

Birgit Pauli-Haack: I can imagine.

\n\n\n\n

JC Palmes: Yeah. Happy to be here and talk with President Gutenberg again.

\n\n\n\n

Birgit Pauli-Haack: Super. Yeah. Great to see you have your perspective on all the things. I just want to point out that on WebDev Studios they have just posted a developer’s guide to the future of WordPress with Gutenberg block editor, and in a in a short summary it’s why they switched or why WebDev Studios is so involved in React applications and in block themes and in the block development because it has a lot of advantages, and so there is the code shift to reactive components. I think one of the advantages that I see is that actually WordPress is giving so many components that as a plugin developer or agency developer you don’t have to make those decisions on the UI anymore. You can just follow along with the ideas. Is that accurate when I say that?

\n\n\n\n

JC Palmes: Yeah. So that article I really like that a lot. It reflects what we see on most of our enterprise scale projects where blocks function like React components and they function like react components now. And theme JSON is basically the design system contract. So performance improves massively when you just when you move away from the old page builder stack for multisites and you know, big editorial teams, this kind of structure is really the only way things stay sane long term. So yeah, that piece captured that direction really well and it’s just the performance alone is just massive.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

JC Palmes: Massive performance improvements.

\n\n\n\n

Birgit Pauli-Haack: Yeah. I think we talked about it the last time you were on the show when you already created the starter theme that’s based on block theme for the organization. So that’s what you start out with. And I will share the link to.

\n\n\n\n

JC Palmes: The GitHub repo wsbt. Yeah.

\n\n\n\n

Birgit Pauli-Haack: Yes in the show notes and I think that also encapsulated all the good ideas around it. Have you developed a little bit more on that? What other features kind of went in.

\n\n\n\n

JC Palmes: Not recently but it’s in my list of to do’s. It’s just I’ve been very busy with projects and stuff, so I will need to. Because there are some fixes that moved into Core but we had to do very custom fixes and some of those are already in Core. So we will have to remove those and make sure that it’s aligned with the new version of WordPress and of course fully tested.

\n\n\n\n

Birgit Pauli-Haack: Yeah, I can see that there are always a few things that are not working in WordPress or you have to build a workaround. You know it’s coming but you need something now. You need to build a workaround and then when it comes into Core that they say, oh, okay, that custom code goes away and in comes Core. But it still needs to be backwards compatible also for your clients. So. But I think that’s a pretty good trade off to actually then have WordPress keep updating the part of the code. Yeah.

\n\n\n\n

JC Palmes: And the way that WordPress is kind of moving towards a future proof version, it’s easier to add in fixes now and take it out when Core takes over. I haven’t had any sites break currently. That’s using our base theme.

\n\n\n\n

Birgit Pauli-Haack: That’s awesome.

\n\n\n\n

JC Palmes: Even with the core updates.

\n\n\n\n

Birgit Pauli-Haack: Yeah. It’s all pretty much isolated and you don’t have to worry so much about things. Yeah. Awesome. So, yeah, we will share the article about the developer’s guide on the future of WordPress and Gutenberg block Editor in the show notes. We will also share the starter theme that WebDev Studios has, and I don’t think we talked about it here on the show or maybe with somebody else. That’s the theme switcher plugin that came out from WebDev Studio, which is a way to have different themes, multiple themes.

\n\n\n\n

JC Palmes: Yep. In one site. It’s a really robust plugin and I think a lot of enterprise level companies are going to like it just because they can test, you know, if they’re not ready for Gutenberg blocks and they’re still on the old WordPress computing system, if they want to try this out, then they can have a full site theme and together with their old theme and change it out one page at a time.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah, that’s what I understood. That you can have a gradual migration over to the new system to a block theme and see how your content performs and how your content creators actually work with it before you make the switch for the whole site. I think that’s pretty smart to do, especially when you have thousands and thousands of posts and more than two editors kind of.

\n\n\n\n

JC Palmes: Yeah.

\n\n\n\n

Birgit Pauli-Haack: It’s really helpful to have a gradual shift because we all don’t like change, sudden changes. You know, we like to be in the. Okay. I need to get accustomed to things.

\n\n\n\n

JC Palmes: This thing, that theme switcher is kind of, it’s allowing these people to test the waters first before diving right in.

\n\n\n\n

Birgit Pauli-Haack: Yeah. And you can make the blue block theme that is kind of added to the. The other theme kind of look almost identical like the other one. So you have the shell and then can see how the. The rest of it works. Yeah, it’s pretty nifty. Yeah. So that I will share also with our listeners on the show notes. And I’m glad you’re all doing such a great job in advocating for the block editor and share all your wins with the community.

\n\n\n\n

Announcements

\n\n\n\n

All right, so I have a few announcements, dear listeners.

\n\n\n\n

So the Gutenberg Changelog is now also available as a podcast on YouTube. Last week I uploaded all episodes. Well, I didn’t upload one at a time. So YouTube has this feature where you can point it to an RSS feed and then it gradually kind of uploads them itself on its own. And because Google abandoned their podcast space maybe two years ago and only now I have migrated it, but it was fairly easy to do and the only change I had to make was to allow the RSS feed to actually have all the episodes in there so YouTube could grab them. But I also needed to do that anyway because I also switched over from the seriously simple podcast player on our episodes to the Pocket Cast player. So Pocket Cast also needs all our episodes so we can have the slug or the short link for the embed code in there so that you will see also on the website.

\n\n\n\n

And I also wanted to say hi and welcome to all the new subscribers. We had a lot more listeners in the last month and I would really. Yeah, it’s awesome. I’m so happy that after a period of two years stagnating, kind of always have the same amount of listens and downloads, and now all of a sudden it’s really great to connect with you, dear listeners. And if you want, leave a comment or review on your favorite podcast app, we will read it aloud here and I also want to connect with you and learn about your ideas or what topics you would like us to cover more. So you can also send this all to the email address. The official email address for the podcast is changelogatgutenbergtimes.com so now enough about me. Let’s talk about my book. No, I don’t, I don’t do a book.

\n\n\n\n

JC Palmes: I would read your book.

\n\n\n\n

Birgit Pauli-Haack: Oh, thank you. Yeah, I, I sometimes. Well, I almost did a book. Yeah. For WordPress 6.9. But we will talk about that.

\n\n\n\n

WordPress 6.9 Release

\n\n\n\n

So WordPress 6.9 is coming. We are a few days away, like five days or something away from the WordPress 6.9 release. It’s out as release candidate three. We are recording this on November 28th and the release is scheduled for December 2nd. So today is Friday. For Tuesday, that’s also the date when State of the World will happen out of San Francisco live streamed and probably with a few demos from WordPress 6.9. Also with the Outlook for 2026, but for our listeners, the field guide is out. It came a little later than for other releases, but on the Gutenberg Times I also published the WordPress 6.9 source of truth, which has a whole lot of details about what changed on the block editor for end users and also for theme developers, what they can style and all that. So if you want to read it, it’s 22 to 33 minutes to read through it and it has 5,000 words, over 5,000 words. So that’s half that. It’s not a book, but it’s a book. It’s almost a book.

\n\n\n\n

JC Palmes: It’s a lot of words.

\n\n\n\n

Birgit Pauli-Haack: That’s a lot of words. But also screenshots and videos so you can really learn a little bit more about what’s in the editor. And I also have a ton of links about the developer-related updates. So JC, what are your favorite or exciting updates coming to WordPress 6.9?

\n\n\n\n

JC Palmes: Well, my first, my top one would probably be the terms query improvement. I thought that was still on Gutenberg 22.2. It’s now on 6.9. I mean it’s a big deal for me because I’ve built custom versions of this so many times because you know, the current query block, they’re not strong enough for what we need. So with that coming into Core, that’s kind of big.

\n\n\n\n

Birgit Pauli-Haack: The term query block, it almost works like the query block, but not with posts, but with description tags. Yeah, with the terms and also so you can have the title, you can have the count and you can also. The term description was already available as a block, but now you can also put it in a dynamic page where you can list all the good categories and things that you need. Yeah, and it’s good for filtering I would think, for the huge sites and it also sites.

\n\n\n\n

JC Palmes: Yes.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

JC Palmes: But else the accordion block. I’ve built so many versions of the accordion block as well. So having that in core just means lesser custom blocks. And you know, it’s. It’s going to be consistent markup because it’s core and I’m pretty sure better accessibility and styling, so there’s no surprises.

\n\n\n\n

Birgit Pauli-Haack: Yeah. I think the accordion block really lives from how you’re going to style it. So the style variations are much easier to create than custom blocks. On the developer blog, Justin Tadlock actually did a tutorial on how to style the accordion block, and he also has a snippet on how to add the schema for FAQs to the accordion block. So I will share that in the links in the show notes. He explains how to do the theme JSON styling, also the style sheet, as well as what’s still missing, how you do it in CSS and also how you can do it in a plugin or in a pattern rather. And so it’s a really good tutorial for someone who kind of starts out and hasn’t done so many accordion blocks like you did. Yeah. What else are you going to be?

\n\n\n\n

JC Palmes: So another big one for me is I know it’s not yet in core, it’s in the plugin still, but the preparation is already in core. It’s the full iframe preparation for the integration in the post editor.

\n\n\n\n

Birgit Pauli-Haack: Why is that important for you?

\n\n\n\n

JC Palmes: Because it’s going to mean cleaner isolation, fewer CSS leaks, less theme and admin bleed. Bleed through with styles. Because we’ve been battling that. Yeah. So we’ve had quite a bit of issues with admin CSS sneaking into custom blocks and vice versa. So this direction makes me very happy.

\n\n\n\n

Birgit Pauli-Haack: Oh, good, good. I’m glad. The contributors will be happy to hear that, especially Aki and Ria and Ella, who kind of have been working on that for so long. And thank you. I let him know.

\n\n\n\n

JC Palmes: One other thing, I’m not sure. Did the tiny MCE thing make it into core or will make it into Core?

\n\n\n\n

Birgit Pauli-Haack: No, not yet.

\n\n\n\n

JC Palmes: Oh, not yet.

\n\n\n\n

Birgit Pauli-Haack: I think that it’s not automatically loaded. That part. Yeah, I think that’s slated for 7.0.

\n\n\n\n

JC Palmes: Okay, I’ll wait for 7.0. I’ll be very happy. Well, I’m happy now that there’s ongoing work because in one of my projects, again, I’ve been fighting with a lot. I’ve been fighting with tiny MC issues for months, especially when you have more than 10 classic blocks and ACF with tiny MC on top. Everything just starts lagging or breaking in very strange ways. So please make it happen.

\n\n\n\n

Birgit Pauli-Haack: So what else is there are any APIs that are coming to 6.9 that you are excited about?

\n\n\n\n

JC Palmes: API. Yeah. Abilities API. That one is interesting. Is that in moving Core? Yeah, it’s moving core. Yeah. I know. It’s still kind of experimental. Oh damn. Yeah, I’m sorry. Really excited.

\n\n\n\n

Birgit Pauli-Haack: Yeah. Good.

\n\n\n\n

JC Palmes: Yeah. So what I like about this because it’s now in a kind of unified declarative model with permissions. So plugins are no longer as scatterbrained with capabilities, capability checks everywhere. So this is going to be a cleaner way to define what a user role can do. That’s more of what I need it for. It’s one feature that I’ll probably be playing with a lot more. Data views and routing. Those two.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah. Data views are on NPM. So if you as a plugin developer or agency developer want to use it, they can be included into your REACT apps. And there’s not only the data views but also the data forms where you get validation with it and then you can do your modals. For data entry. It is a whole new design system for the admin and for admin pages. It will not be kind of a switch over right away. Yeah. So from. From the site editor to the whole thing like the command palette. It definitely needs a lot of testing and quite a few plugins. For instance, Jetpack uses it. Some screens at WooCommerce use it now and then. I also know that other plugins are actually working with it to use the data view’s components and design for their plugins.

\n\n\n\n

JC Palmes: Yeah. Because if this becomes a standard for building admin UIs, we can finally stop reinventing these tables every year and you.

\n\n\n\n

Birgit Pauli-Haack: Don’t have to maintain the bulk of the code. So it’s only the business logic pretty much. And to maintain for you. Anything else that you want to talk about?

\n\n\n\n

JC Palmes: Performance improvements are off the charts. On smarter script and style loading, they’re now going to load automatically in the footer. Right?

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

JC Palmes: And then there’s the fetch FOID that I only learned about earlier today. It’s kind of interesting. And yeah, the reducement of the layout shift for videos. Oh, caching is now better cache support, especially for multi sites. The multi site cache is going to be. Can be cleared out for the whole site, not just for per site. Right. Yeah, I think that’s going to be huge. Yeah. We’ve Been having quite a bit of multi site projects lately, so that’s going to be. Yeah.

\n\n\n\n

Birgit Pauli-Haack: So do you see any applications or adoption of the Notes feature, the content top level commenting?

\n\n\n\n

JC Palmes: Well, for content editors that would be a help, I guess. I haven’t really paid a lot of attention to that part. I paid more attention to the developer parts and more of the UI. Yeah, that. I’m not sure if I’ll use it, but probably. Well, I don’t really take notes, so.

\n\n\n\n

Birgit Pauli-Haack: All right, good, good. So I think that’s all we’re going to talk about WordPress 6.9. I talked with Ella about it and I also talked with Sarah about it and with Beth Soderberg. So the last four episodes we have talked about quite a bit about 6.9. So now that it’s here, it’s really kind of. We’re going to be shifting what’s coming to 7.0, but not in this episode except for what’s in Gutenberg plugins.

\n\n\n\n

Before we head into what’s released, I wanted to point out to our listeners that the WordPress importer has received a major upgrade and that came out of the Playground team. The Playground has this blueprint steps called Import WXR, which actually uses the export of a site that is done exporting with the WordPress importer. But the problem was when you import it to Playground, all the links would break and so the team added a URL replacer to the importer plugin and it not only is a very smart replacer, it does not only replace the page links, but also the URLs or the links that are in navigation blocks that are in background image CSS. And so it’s, it’s actually really helping. You don’t need any other plugin to actually import an export from a website. Yeah. So you can put it into Playground and then have a fully functioning site without having trouble. And if the images are still on the original site, it kind of grabs them and puts them in as well like the normal importer does. But it also replaces the URLs to the image. So it’s really a major shift on the WordPress importer. I think I abandoned using the importer about four or five years ago for other plugins when I was moving sites. But this seems to be a much smaller way now because it also streams that. So it’s really fast on the importing part.

\n\n\n\n

JC Palmes: I’ll have to check that and test it out.

\n\n\n\n

Birgit Pauli-Haack: Yeah, it’s released now in 0.9.5, and I’ll share the link in the show Notes to the PR that implemented that URL report. There’s actually a better way. Adam Chylinski, the brilliant programmer of Playground, has actually a post on the Core blog where he kind of lays out how he did it.

\n\n\n\n

What’s Released – Gutenberg 22.1

\n\n\n\n

All right, now we come to the Gutenberg 22.1 release. Do you want to lead us into what’s new and what we’re going to talk about? We start out with a new block. It’s the core tabs.

\n\n\n\n

JC Palmes: Oh, the core tabs. Yep.

\n\n\n\n

Birgit Pauli-Haack: Have you been waiting for that too?

\n\n\n\n

JC Palmes: Hey, yeah, yeah. We do have quite a bit of custom blocks as well that are tabs usually for education sites where they have multiple content that they need to add into tabs. We’ve used the navigation block before to kind of hack it up and use it as a tabs block and sometimes just very custom tabs block. But this is going to be way better because it’s now native and core.

\n\n\n\n

Birgit Pauli-Haack: All right, okay. Yeah, I have seen a lot of tabs on some websites, but I personally. But I also don’t build a whole lot of websites with a lot of content. So I was wondering both for the accordion or the tabs block, but I can see that it’s actually a good use case for vertical navigation where you can then just have use it on the left hand side and then you click on it and opens content on the right hand side and it makes it so much faster because it doesn’t need a reload. It’s already on the website.

\n\n\n\n

JC Palmes: Yeah.

\n\n\n\n

Birgit Pauli-Haack: So yeah, that’s pretty cool. So what else?

\n\n\n\n

Enhancements

\n\n\n\n

There are enhancements to the design system for the admin stuff and also the static and lazy routing for the data views. But that’s all very, very developer-oriented. Okay. So the block library, with this release there comes image prefetching for clicks to expand the images. So if you. If a user or a visitor actually hovers over your gallery or your images and so there is an indication, oh, maybe they want to click on it and so it kind of prefetches the image. So after the click the loading is almost instantaneous. It’s actually somebody called it cheating, but it’s not. It’s kind of anticipating what a visitor wants to do and be helpful. Yeah. The next one is Breadcrumbs. So Breadcrumbs is still in an experimental new block. The same with the tabs block. You have to enable the experiments in the Gutenberg plugin and it now can handle homepage and show the last item attribute and add 404 search and other archive pages to the breadcrumbs if they are in the context of that particular page where it’s loaded.

\n\n\n\n

JC Palmes: Yeah, well, I’ve built a lot of breadcrumbs as well, so this is going to be great once it’s. It lands in Core.

\n\n\n\n

Birgit Pauli-Haack: Yeah, I know. I have used Justin Tadlock’s breadcrumbs block quite a bit and he has also been part of the team who’s kind of looking at how that’s working and if it’s good ready for Core and all that. So yeah, I really like it. Especially if you’re large sites like any other, you need breadcrumbs to guide your visitors back to safety, so to speak. If they get too deep into the site they want to. How they get back to it. Yeah, the next block I’m really excited about. Well, the HTML custom block is already in Core, but what they did now was they added JavaScript and CSS editing to the block. So you can actually.

\n\n\n\n

JC Palmes: That is nice. Yeah.

\n\n\n\n

Birgit Pauli-Haack: Build your own little app in one block kind of thing. So, yeah, it’s pretty cool.

\n\n\n\n

JC Palmes: That’s going to get a lot of use for me just for playing around.

\n\n\n\n

Birgit Pauli-Haack: Yeah. Well, you can do some great prototypes with that and then get the code in the right places. But yeah, it’s really cool. For those who are looking for a Twitter embed, it will be replaced by the X embed icon in text. I think after three years it’s probably time. Yeah.

\n\n\n\n

JC Palmes: Once this hits Core, I’ll have to remove the function that we’ve added for that particular feature.

\n\n\n\n

Birgit Pauli-Haack: Yeah. Do you want to take the next one?

\n\n\n\n

JC Palmes: It’s collaboration of the notes that I don’t use, but. Right, right, definitely interesting. And I see it being used for collaboration for those use notes, but not for me.

\n\n\n\n

Birgit Pauli-Haack: With this release that comes. I need to put it this way. So normally you want to disable things also when there are new features, there are always some people who need it also to be disabled, but it’s also some. You don’t want the notes to show up in distraction free mode or in the code editor. So this release in the Gutenberg 22.1, for those two things, notes are disabled. There’s also keyboard shortcuts and support for tree navigation and form submission shortcuts and all that. But those are the two outstanding changes to the notes that won’t be in 6.9. Well, let me verify that. No, it was backported both of them were backported to the release candidate. So it’s in 6.9.

\n\n\n\n

JC Palmes: Maybe I’ll check it out.

\n\n\n\n

Birgit Pauli-Haack: Yeah, absolutely do. Yeah, you want to know what your customers are doing with it. And there’s also a def. Go ahead.

\n\n\n\n

JC Palmes: Oh, sorry. Go ahead. Yeah. I’m just going to say that it’s good that they also added in a. An ability to disable it.

\n\n\n\n

Birgit Pauli-Haack: Yeah. And there is a dev note by Adam Silverstein, who was one of the instrumental developers there. There were also contributors from Asia there. And so there was a whole team building on that. The team was from the company Multidots and they have been working on it for probably a year. And the developer note by Adam Silverstein is really very specific on how it was implemented. If there are new filters and hooks to figure out more about the dev notes, if you need additional features and how it all kind of came together, what’s the basis of it. And so it’s a really interesting note. If you are a developer and working with WordPress. The next thing is the text area control. I like that you now can add to the text area in. But that’s for the data forms, I think. Yeah, no, it’s in. Yeah, it’s in the components actually. So it can be in the editor as well. If you have a text area that you now can add a minimum height to it. So it can also grow from there. Yeah. Do you want to do the next bolded one?

\n\n\n\n

JC Palmes: Yeah. Okay. So the color picker also got a really nice upgrade. You can now paste an entire color value directly into it and it’s in any format. Right. So Hex, RGB, HSL. Can it do named colors? It can, right?

\n\n\n\n

Birgit Pauli-Haack: No, I don’t think so.

\n\n\n\n

JC Palmes: Oh, that would be awesome.

\n\n\n\n

Birgit Pauli-Haack: That would be awesome.

\n\n\n\n

JC Palmes: Yeah.

\n\n\n\n

Birgit Pauli-Haack: Well, we need to try it out. Yeah. To do. If you can do lime. Lime yellow.

\n\n\n\n

JC Palmes: Yeah, yeah, yeah. I think what’s great is that, you know, you don’t have to click into a specific input, just paste it. Enter inside the picker. Yeah, I had to sometimes because when you do colors, right. For websites and you have not added a specific color to the color picker for the theme, I have this browser extension where I just hover on the color and get the value and then the color picker would not. I do not like the value that I input into it. So having the ability to add the entire color value directly is going to save me a lot of time and doing that.

\n\n\n\n

Birgit Pauli-Haack: Yeah. And also it avoids typos. Yeah, but. Oh, yeah, yeah. I’ll look up colors all the time. Yeah. And then want to just hover the hex value and then post it in. But yeah, you have to. It’s good.

\n\n\n\n

So the term name, the extensibility on the term name, I’m not sure it’s really extensibility, but it adds the level options for the heading levels and I think that was in 6.6 where that actually made around because the extensibility is that you can control the levels that a heading can have. So normally when you use a heading heading block it starts with H2 and you always need to use the drop down to change it to H3. Yeah. And with the level options you can actually control that through theme JSON. Or to only do term level being H3 all the time. Yes. Without having to change it every time you use the heading level.

\n\n\n\n

JC Palmes: A very nice improvement for content only patterns is normally when you’re editing a content only pattern, a lot of the design controls are hidden because you know, the structure is locked. So. And that’s the whole point. One of the annoying parts of it is trying to tweak colors.

\n\n\n\n

Birgit Pauli-Haack: So you can do it now.

\n\n\n\n

JC Palmes: So. Yep, you can do it now. That’s going to be a huge experience for. Well, for content writers.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

JC Palmes: Really.

\n\n\n\n

Birgit Pauli-Haack: And you don’t have to enable it. Yeah. With custom code either.

\n\n\n\n

JC Palmes: Anyone is able. Yeah, exactly.

\n\n\n\n

Bug Fixes

\n\n\n\n

Birgit Pauli-Haack: So we come now to the bug fixes and there are a ton of bug fixes. Yeah. Don’t get me wrong, there are also a ton of them that were backported to WordPress 6.9. And for the accordion block, it adds CSS for the default styles. It also has some font style inheritance for button and inner text blocks. I think that that’s a little bit of a red flag. No, not red flag, but it was a little bit. The benefit from the accordion block in core was that it didn’t have any opinion on style. But the problem was that if you use the accordion block in a classic theme, then it wouldn’t have any styling unless you put it in a classic theme. So there was one idea was to just put some default styling in, but they were so restrictive that they can’t be overwritten by theme JSON values for another theme. So that kind of was a little bit of a problem. I’m not quite sure how they solved it or if they’ve solved it before the next version comes out, before the 6.9 comes out, but that’s kind of part of it. And the inner blocks of buttons or text blocks, they inherit the style of the above accordion block. So it’s kind of that.

\n\n\n\n

JC Palmes: Okay, so right now. Well, prior to this fix, it’s not inheriting the font style from the heading or the other way around.

\n\n\n\n

Birgit Pauli-Haack: Well, it was the font styles for the. The font style from button, accordion header, toggle. That’s the whole heading. It didn’t go to the next header, I think. Yeah. And it’s a typography appearance. Yeah, it’s fixed. Yeah. Okay.

\n\n\n\n

JC Palmes: Yeah. Embeds, there’s beds to go and shrink. That’s going to be helpful.

\n\n\n\n

Birgit Pauli-Haack: Yeah. So the embed blocks, they were pretty restrictive in their styling. And now when they’re inside a flex group block, they can grow and shrink with the size of the group block.

\n\n\n\n

JC Palmes: Together with the group block.

\n\n\n\n

Birgit Pauli-Haack: Yeah. That is really cool.

\n\n\n\n

JC Palmes: Because less CSS.

\n\n\n\n

Birgit Pauli-Haack: Yeah, less CSS and also increased responsiveness. Right. If the group graph gets smaller, then also the embed gets smaller and it doesn’t bleed into the template.

\n\n\n\n

JC Palmes: Yeah. Does it keep the aspect ratio? I hope it does.

\n\n\n\n

Birgit Pauli-Haack: Well, I think that’s something to be tested and kind of figured out. Yeah, I haven’t tried it yet.

\n\n\n\n

JC Palmes: Yeah, me too.

\n\n\n\n

With one of the things that I kind of really hate about. Not hate. Hate is such a strong word. I don’t like about the embed block is you know when you have a video and then you shrink it and it’s not shrinking and it. If it does shrink, it loses the aspect ratio.

\n\n\n\n

Birgit Pauli-Haack: Yeah. So the next thing is more like CSS specificity for the text alignment classes. And also I think that corrects something that was done before that the text alignment and paragraph would go away. And now it kind of. Now it comes back and with a better robust CSS styling. And then for the heading block, the background padding was pretty strong out of the box. Yeah. And now they kind of are more specific to the block. So also more styling freedom for the theme developers. Right.

\n\n\n\n

JC Palmes: Yeah. Those quality of life improvements.

\n\n\n\n

Birgit Pauli-Haack: Absolutely. Yeah. And I think there was a question from Twenty Twenty-Two.1. Yeah. The routing part is still all for the data use is still all in experiments. So you need to enable those. If you want to play around with that, if you want to test it, it’s playing around seems so unserious. Yeah. But if you really want to test it, if you can use it already. So, yeah, that was it.

\n\n\n\n

Gutenberg 22.2

\n\n\n\n

And we come to Gutenberg 22.2. We are talking through the changelog of the release candidate 22.2 will come out on December 3rd, so one day after 6.9, but it’s normally that the release candidate is pretty solid in what’s coming in into the final release, just for testing purposes that they actually do a release candidate one. So this one is big. It has 161 pull requests from 49 contributors, 4 of which are first timers. Congratulations to your first contribution. And the release focuses more on performance and block editor polish and has a series of accessibility developer experience improvements. But it’s intended to test ahead with that.

\n\n\n\n

Enhancements

\n\n\n\n

There were some enhancements again through the breadcrumbs block. It’s kind of really fantastic how that is going to grow and be feature rich when it will come to WordPress 7.0, but you definitely try it out. It now has an archive link if there’s enabled in post and can do attachment handling and post type archive links and support a pagination as well. So it’s kind of really cool. What else is in there?

\n\n\n\n

JC Palmes: The cover now supports background videos from embeds and yeah, that’s a major upgrade for the cover block because until now background videos only work if you uploaded a file directly to the media library. And now with this new update you can use embedded videos like YouTube, Vimeo and other or supported embed sources.

\n\n\n\n

Birgit Pauli-Haack: Yes. That’s huge. Pretty much, yeah.

\n\n\n\n

JC Palmes: Yeah, that’s huge. It used to be a custom block for us and having the ability to do this when it lands on core is going to be really huge.

\n\n\n\n

Birgit Pauli-Haack: Here goes the custom block again out.

\n\n\n\n

JC Palmes: Exactly.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

JC Palmes: And I’m absolutely happy to remove custom blocks and move into native core blocks when it’s there because it just did the improvement and the quality and the markup just consistent and it’s really nice when you know, things work together.

\n\n\n\n

Birgit Pauli-Haack: Yeah. And especially the custom block you don’t want to have. Not every shared hosting has. You can upload videos well or if they’re uploaded, they’re rather pedestrian I would say, because they need to be downloaded and so if you use an embedded one. So the YouTube or the Vimeos of the space are actually hosting your video and it. It doesn’t take all the bandwidth and all that. So it’s a really cool quality of life enhancement as well. For those who don’t have so much oomph on the hosting. Yeah, yeah.

\n\n\n\n

JC Palmes: I mean this should have existed years ago. Then again.

\n\n\n\n

Birgit Pauli-Haack: Well, there are a lot of things that should have been fixed a year or two ago. Yeah. There’s also a new enhancement for the math block so you could style of course the text of it, but not the full block around it. And that has now style options as well. So you can change the background and the dimension and the border and the red border radius. It’s all available now for the math outside the math block. It’s not coming to 6.9. That’s for the future release, but it’s test it out and see how it comes to pass. And the next one you would like, you’d like that.

\n\n\n\n

JC Palmes: Yeah, I like this. A lot less CSS and markup for me. So that button block got a big improvement. And theme builders, you know, theme builders like me, every one of us have been asking for forever because we can now style pseudo states like hover focus active focus invisible directly in theme JSON for the button block and its variations. Because before this, the only reliable way to style hover or focus styles states, I mean, was to either drop in custom CSS into theme JSON or in a custom CSS file. Yeah, style sheet. That kind of great idea of keeping design controls inside theme JSON as much as possible. I would want to keep design controls inside theme JSON. But with this improvement, we can now design these states that the same way that redefine normal button styles and variations. The outline button can now have hover states too.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah, yeah. The next two items are about the data views. There are a lot more in the data views section of the changelog, but there are two things. One is because it points out that you now can insert certain information into the table. So the table column header allows you now to add columns left or right of your location that goes into that. The data view screens are much more customizable out of the box than any admin page in the current WordPress admin would do. But I really like that part where you can say where the columns go and all that. So you have a real more control over it as a user or as a site owner.

\n\n\n\n

JC Palmes: Yeah. I also like the new layout option, the activity layout, because that’s basically a timeline view. Right. It’s similar to the list layout but with styling and behavior tuned for things like say revisions logs, events, audits, anything chronological. Exactly. You get a vertical timeline track on the left, almost smaller media inline primary actions, and really a clearer focus on the event field that anchors each entry is disabled though. But I guess it’s kind of like a timeline view, so it really shouldn’t jump around. And that. That makes sense that the cool part, I think it’s that it’s not just visual. The layout has its own interaction rules. Only the title is clickable. The whole row ssn’t. And the keyboard navigation is handled differently because the UI behaves differently than a list or a table. It’s a timeline. Yeah, it’s, it’s. I think it’s one of those layouts where once you see it, you realize that WordPress has needed it for years, a long time.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah, yeah. It’s definitely for historical data that you would want to have in some kind of a layout. Yeah. So cool. Thank you for pointing that out. We’re coming now to the pattern section and the PR says add edit section to the list view instead of ungroup. So there is. I think it’s still an experiment, I’m not quite sure. But the pattern padding management kind of changes a little bit. If you have a section that is. And we come to add what is a section block in the list view, those section blocks are now available to be edited and not that you have to unravel the pattern if you want to edit it. So that’s pretty cool. So what are section blocks? And I asked some developers who had been working on it about it and I asked and looked at the documentation and then the section is determined by the section block selector. Well, that is kind of if the. What is the is section block selector. Yeah. So it’s a pattern, a template part or a block that has a template lock on it that says content only. And so it moves around and can be edited, not edited, but styled in its whole. The content creator doesn’t have a whole lot of controls about it. It’s a special block that acts actually as a container with specific editing restrictions, primarily used in template and site editing context. So. So that was a new terminology for me to think about.

\n\n\n\n

JC Palmes: It’s new to me too, but with the way that you’ve explained sections, I’ve only really called it lock patterns.

\n\n\n\n

Birgit Pauli-Haack: Oh, okay. Yeah. Locked from. You can edit.

\n\n\n\n

JC Palmes: Yeah, you can edit the content, but not the. The way it looks. Yeah, the design. Yeah. The structure.

\n\n\n\n

Birgit Pauli-Haack: And there’s a whole lot of effort around that content only lock to kind of bleed into other places, be it in pattern, be it in the editor. How can you switch from one to the next? You need to point out that those are actually content only locked ones. So we will see a lot more about that in the coming months for this particular content only modals. You know, so I’m kind of. This is pretty much a preparation for that in terms of what particular PRs will come about that?

\n\n\n\n

JC Palmes: Yeah. I mean it’s, it’s more of a guardrail when you don’t want styled structured patterns to just explode because it gives the option to ungroup it and then clients come back and say that it’s not working. So this is good. It’s more predictable behavior for a section.

\n\n\n\n

Birgit Pauli-Haack: Yeah. Client section now cloning a section now that’s one thing. It also has a, certain pattern endpoint so you could do pattern wide changes to things. We saw it with 6.7 in the zoom view. When you were going through the Twenty Twenty-Five theme and go into Zoom view, you were able to add a pattern but then change the color of it because it would loop through the various color variations of your style variation. That totally. Yeah. I was totally amazed by that. To get new colors in there and you don’t have to worry about things. But that’s kind of the idea about it.

\n\n\n\n

JC Palmes: Yeah.

\n\n\n\n

Birgit Pauli-Haack: So. And then there were really, really small changes to the block editor. It now has a card icon.

\n\n\n\n

JC Palmes: Thank you.

\n\n\n\n

Birgit Pauli-Haack: It also supports the width and the dimensions. So you can control that for padding. Yeah. And also the text also has a justify attribute now or control. So those are really quality of life things. And they were. Yes, until you use them you don’t know you. You miss those things. But. Yeah, but that is how you use them.

\n\n\n\n

JC Palmes: By editing a few thousand pages.

\n\n\n\n

Birgit Pauli-Haack: Yeah. Yeah.

\n\n\n\n

JC Palmes: Thank you.

\n\n\n\n

Birgit Pauli-Haack: And I think that was everything that came. Well, we want to talk about Twenty Twenty-Two.2. Is there anything else that you found?

\n\n\n\n

JC Palmes: I think we’ve talked about the ones that I really find interesting for the other functions, new stuff. They can read the build guide. But those that we’ve talked about are really the ones that jump out to me and I find really interesting or very helpful for my workflow.

\n\n\n\n

Birgit Pauli-Haack: Yeah, wonderful. Excellent. I’m glad that we got that.

\n\n\n\n

So before we end the show, I want to point out that there’s a state of the world coming next week with the keynote. That’s the annual keynote of Matt Mullenweg and it coincides for the first time with a major release of WordPress, the 6.9 release. And it will be live-streamed from San Francisco. I think the tickets for the in-person meeting have already been sold out for a while. But you can follow along on the live stream on YouTube. It starts at 20 or 8pm UTC. So it might be for our AAPAC contributors and WordPress users, it’s a little late in the day. It’s also almost past my bedtime in Europe because San Francisco is nine hours away from me. Yeah. So there’s this time zones quagmire that we always have to deal with. But if you see it on Tuesday or on Wednesday, I don’t think it changes in between. And there’s nothing really urgent in there. So take the time and call it on the rerun.

\n\n\n\n

JC Palmes: Yeah, I’ll probably watch it live because I’m in that time zone.

\n\n\n\n

Birgit Pauli-Haack: Oh, you’re in that time zone. Yeah. Yeah.

\n\n\n\n

As always, our show notes will be published on GutenbergTimes.com podcast this is episode 125 – 125, and if you have questions, suggestions or news or comments. Yeah. If you want us to include them, send them to changelogatgutenburgtimes.com that’s changelogatgutenburgtimes.com, and I say huge thank you to JC Palmes to come on the show and talk through those two releases with me and share what you are looking forward to for 6.9 and also share all the good work that is from WebDev studios that can help other agencies to also streamline their processes.

\n\n\n\n

Thank you so much, JC, I hope you have a wonderful day or night and all the listeners. Thank you for listening.

\n\n\n\n

Bye bye.

\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:\"Sun, 30 Nov 2025 09:19: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: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:11;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:24:\"Matt: Werner Predictions\";s: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=150712\";s: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:41:\"https://ma.tt/2025/11/werner-predictions/\";s: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:985:\"

Werner Vogels, CTO at Amazon, boldly publishes his 2026 tech predictions. While you’re on his blog, take a moment to enjoy his essay, Development gets better with Age. Werner and I first crossed paths almost 20 years ago at tech conferences like GigaOm’s Structure, LeWeb, Future of Web Apps, O’Reilly Etech, and TheNextWeb. Though we don’t see each other often, I have enjoyed following his work and writing over the years, and it delights me that he’s still learning and sharing with the same vim and vigor I remember from when we first met. I think he might have been the first person to introduce me to the works of Richard Feynman through a BBC program.

\";s: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, 30 Nov 2025 02:07: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: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:12;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:121:\"Gutenberg Times: Livestreams on WordPress 6.9, WordPress Importer Improved, MCP Adapter and more — Weekend Edition #351\";s: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=43206\";s: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:125:\"https://gutenbergtimes.com/livestreams-on-wordpress-6-9-wordpress-importer-improved-mcp-adapter-and-more-weekend-edition-351/\";s: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:31139:\"

Hi there,

\n\n\n\n

In case you celebrated it, I hope you had a wonderful Thanksgiving holiday, lots of turkey, sweet potatoes, beans, stuffing, gravy and pumpkin pie. Or any kind of pie really \"🦃\"\"🍁\"\"🥧\". And lots of love and laughter around your family and friends.

\n\n\n\n

I just want to give a huge shoutout to all the WordPress contributors who teamed up to roll out this next big version of WordPress for the hundreds of millions of websites out there and all their users and visitors. Every update is a big deal and only happens because of teamwork, good vibes, honesty, and trust. Not everyone who contributes is a coder; some work on documentation, translate stuff into loads of languages, create tutorials, and so much more. WordPress 6.9 is dropping on Tuesday if everything goes smoothly!

\n\n\n\n

Other contributors have already started on the next version, 7.0. We don’t know yet exactly when it will come out. In their last check-in meeting Core committers discussed a release date in March or April of 2026. They are also thinking of going back to three releases per year.

\n\n\n\n

Have a splendid weekend ahead, and I am so grateful that you are here. Your presence makes me want to write every week. Be well.

\n\n\n\n

Yours, \"💕\"
Birgit

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

My team mate, Jonathan Bossenger and I were on this week’s panel for This Week in WordPress #356 episode, together with Taco Verdonschot and Nathan Wrigley. It includes “Birgit Pauli-Haack gives a whirlwind tour of her epic WordPress 6.9 Source of Truth “. There was a lot more of course.

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

Videos and posts about WordPress 6.9 release

\n\n\n\n

WordPress 6.9 Release Candidate 3 is now available! The WordPress 6.9 Field Guide has arrived, too.

\n\n\n\n

Rae Morey, The Repository has the skinny for you in WordPress 6.9 RC3 Arrives as Field Guide Drops and Final Release Nears.

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

Hector Prieto published the Dev Note Miscellaneous Editor Changes in WordPress 6.9, highlighting various refinements to the block editor. The release improves keyboard navigation, selection, and focus handling, adds small UI polish, and refines patterns and templates behavior. It also updates APIs and deprecations to keep block development consistent, enhances accessibility and stability, and smooths authoring flows, ensuring theme and plugin authors can better integrate with the evolving editor experience.

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

Nick Diego and Ryan Welcher livestreamed their WordPress 6.9 Walkthrough. They guided viewers through the key updates arriving in WordPress 6.9 ahead of its December 2 release.

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

In his livestream this week, Jonathan Bossenger tested the Block Bindings coming to WordPress 6.9. He tested the new enhancements in the date and image blocks, as well as custom source registration. Throughout the stream, Bossenger troubleshot and documented his process, exploring how these updates can lay the foundation for future developments. You can join him as he navigates through the intricacies and potentials of these new WordPress features!

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

In his video WordPress 6.9 New Features, Pascal Claro demonstrates all new features for the Block editor coming to a WordPress instance near you.

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

Maruti Mohanty held a Learn WordPress workshop on How to Prepare Your WordPress Site for WordPress 6.9. The recording is now available on WordPressTV. You will learn how to use the Beta/RC releases to test your site for the upcoming releases. This will be a practical walkthrough to build your staging, test for compatibility, and plan a safe rollout.

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

In his post The Foundation for AI-Powered, Composable, and Editor-Friendly Websites, David Levine covers the WordPress 6.9 release and its focus on incremental yet impactful improvements to the site editor and performance. The post highlights refined pattern management, better style controls, and workflow enhancements for building and editing layouts.

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

The Abilities API will launch with WordPress 6.9. TrewKnowledge has published a simple guide for builders, publishers, and product teams. It explains how “abilities” bring together capabilities and permissions in the editor and admin, allowing for better control over tasks. With examples and clear advice, the article helps agencies and product teams create safer workflows, customize roles, and improve user experiences.

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

Rae Morey, The Repository, reports on how WordPress 6.9 to Introduce Notes, Bringing Asynchronous Collaboration to the Post Editor. Notes let users comment on specific parts of content, reply in threads, and mention teammates without being online together. The feature builds on Blocks and Phase 3 collaboration goals, aiming to replace scattered feedback via email or chat with contextual, in-editor discussions that improve editorial workflows and multi-author content reviews.

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

Codeable Expert James Roberts also covered the release for his co-workers in WordPress 6.9: What To Expect, outlining key updates to the Site Editor, patterns, and design tools that make building full sites more intuitive. The article also explains what agencies and clients should do to prepare, test, and safely adopt the new features.

\n\n\n\n

Gutenberg and other WordPress updates

\n\n\n\n
\n

\"🎙\" The latest episode is Gutenberg Changelog #124 – Gutenberg 22.0 and WordPress 6.9 with Ellen Bauer, project lead at Automattic.

\n\n\n\n
\"Gutenberg
\n\n\n
\n
\n\n
\n
\n\n\n\n

In his video, WordPress 6.9 and More: Key Updates for Developers, Ryan Welcher gives you TL:DR of the latest What’s new for developers? (November 2025) post from the WordPress Developer Blog.

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

Gutenberg 22.2 RC 1 is now available for testing. It comprised 161 Pull Requests by 49 contributors, four of whom are first-timers. The release focuses on performance, block editor polish, and a series of accessibility and developer experience improvements. It is intended for testing ahead of the stable 22.2.0 release on December 3 and is not recommended for production sites.

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

In the next Gutenberg Changelog episode, I had a chat with JC Palmes, the principal technical manager at WebDevStudios, about how their team has totally jumped on the Blocks and block themes bandwagon. It’s been a game changer for their workflow and super helpful for their clients’ editorial teams, too. We also shared favorites features of the upcoming WordPress 6.9 release and the latest Gutenberg updates, 22.1 and 22.2. So, keep an eye out for the episode arriving in your favorite podcast app this weekend!

\n\n\n\n
\"Gutenberg
\n\n\n\n
\n\n\n\n

Have you been avoiding the WordPress Importer when moving sites? It received a major enhancement from Adam Zieliński and other contributors. Zieliński published the announcement on the Core Make Blog: WordPress Importer can now migrate URLs in your content. This enhancement made it feasible to us the WordPress importer for the Playground blueprint step importWxr and it is now also compatible with content built in block themes, as URL in navigation blocks and image references in background-image css are also converted to the new site.

\n\n\n\n

WordPress for #nocode site builders and owners

\n\n\n\n

If you need to add FAQ schema to your Accordion Block, Andrew Viney, developer from Bristol, UK, has you covered with his accordion-faq-schema-toggle plugin.

\n\n\n\n

If you are a developer yourself, you can use Justin Tadlock’s Snippet: Schema.org microdata for Accordion block FAQs

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

Mohammad Shoeb announced that the free WPMozo Blocks Plugin for WordPress just got five new Blocks. The update introduces Hero Heading, Logo Showcase, Notice, Highlight Text, and Flipbox blocks, focused on speed, flexibility, and visual appeal. These blocks support layout and style customization, icons, gradients, hover effects, and responsive controls, enabling users to build standout sections, alerts, logo grids, and interactive content without performance loss or complex configuration.

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

Wes Theron published another nice tutorial for content creators on YouTube: How to add social icons to your WordPress site. He shows “you exactly how to add and customize social icons on your WordPress.com site, making it easy for visitors to connect with you across all your social platforms.”

\n\n\n\n

Designing Block Themes

\n\n\n\n

Bud Kraus wrote a tutorial on Scaling typeface gracefully with fluid typography that explains how to make font sizes adjust smoothly to different screen sizes using CSS functions like clamp(). He elaborates on how to use continuous scaling instead of fixed breakpoints, which helps improve readability and minimizes size jumps. The article provides examples for headings and body text, covers design tips, and shows how to implement fluid typography in WordPress themes.

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

Karol Król mentioned he was inspired by my talk at WordCamp Gdynia to explore the Create Block theme plugin some more. He created this tutorial on how to easily transfer Block Theme changes to another WordPress site

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

Elliot Richmond created a Block Theme Cheat Sheet for WordPress that collects key block theme concepts, file structure, and template examples in one place. It outlines essential theme.json settings, common templates and template parts, and useful block patterns for building modern block themes. The resource is designed as a quick reference for developers who want a practical, copy‑and‑paste style guide while learning or refining their block theme workflow.

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

\n\n

The previous years are also available:
2020 | 2021 | 2022 | 2023 | 2024

\n\n\n

Building Blocks

\n\n\n\n

Bryce Culp of WebDev Studios created A Developer’s Guide: The Future of the WordPress Gutenberg Block Editor. He explains modern block patterns, theme architecture, and tooling, emphasizing best practices for performance, reusability, and accessibility. The guide helps developers transition from classic approaches to a Gutenberg-first mindset, leveraging React-based blocks, block.json configuration, and evolving WordPress APIs to build scalable, future-ready experiences.

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

Jos Velasco, DreamHost, found a way to simplify WordPress Plugin development with Telex and shared his workflow in this post. He has some tips and consideration on how to best work with the AI Block builder.

\n\n\n\n

What’s new with Playground

\n\n\n\n

Fellyph Cintra announced that Debugging with Xdebug is now available in WordPress Playground letting WordPress developers better understand what’s happening when something breaks. Now you can pause WordPress, look at what’s going on, and move through each step of the process in a browser. It works with simple tools or code editors, needs little setup, and is great for learning, testing ideas, and fixing problems more easily.

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

Cintra also published Playground CLI, adds ImageMagick, SOAP, and AVIF support. These additions make it easier to work with images, talk to other online services, and test modern image formats in temporary WordPress sites. Together, they help developers and site builders try more real-world features without complex setup on their own computers.

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

The latest article by Fellyph Cintra reveals that Playground allows developers to create temporary sites with specific Gutenberg branches in their browser. You can use special Playground URLs or blueprints to access nightly or feature branches, test new editor features safely, share consistent environments, and give feedback earlier in the Gutenberg development process.

\n\n\n

Need a plugin .zip from Gutenberg’s trunk 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

AI in WordPress

\n\n\n\n

Jeff Paul announced AI Experiments Plugin v0.1.0 . Team rep in the AI Team, James Le Page wrote on X (former Twitter) “This is a pretty big release. It’s the first time all building blocks are used together and represents a really great reference for developers that surfaces in features that you can use right now.”

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

Ovidiu Galatan posted the Release announcement: MCP Adapter v0.3.0! This update brings official WordPress support for the Model Context Protocol. Version 0.3.0 is all about making things smoother with transport, better observability, and handling errors. They’ve unified the HTTP transport, put together a standard way to deal with WP_Error for MCP error responses, and revamped the observability handlers. Plus, they’ve standardized hook names, rolled out some detailed migration docs, and squashed some bugs, making sure everything works nicely with Abilities API v0.4.0 as part of WordPress’s awesome AI Building Blocks collection!

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

On his blog, James Le Page shared a two-part series about the Abilities API. The posts explain how WordPress “abilities” have changed from old permission systems to a clearer way of defining what users and tools can do. They describe abilities as easy-to-understand labels for capabilities used in core, plugins, and the editor. With examples of AI features, the series shows how abilities help developers provide safe actions, manage access, and create smoother user experiences.

\n\n\n\n\n\n\n\n
\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

Featured Image:

\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:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Sat, 29 Nov 2025 03:30: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:13;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:24:\"Matt: SF WordPress Party\";s: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=150706\";s: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:41:\"https://ma.tt/2025/11/sf-wordpress-party/\";s: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:973:\"

We’ve secured an amazing secret venue for State of the Word on Tuesday, but it has limited capacity in terms of people and has a lot of security hurdles to jump through to get in.

\n\n\n\n

So to open things up to the community more, we’re going to activate my hacker/maker art warehouse, TinkerTendo, in the Dogpatch neighbourhood for a simulcast watch party. There will be some cool art from the Misalignment Museum there, great wifi, lots of power plugs and floor seating, a big projection screen and speakers and I think will be a great spot for WordPress folks to hang and network and co-work while in San Francisco. I’ll swing by after the talk to meet everyone as well.

\n\n\n\n

If you want access, you can register via Meetup here.

\";s: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 Nov 2025 00:20: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: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:14;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Matt: Thanksgiving\";s: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=150701\";s: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:35:\"https://ma.tt/2025/11/thanksgiving/\";s: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:1922:\"

I want to wish everyone a happy Thanksgiving! To me, the holiday is a reminder to be grateful. A gratitude practice is one of the most surefire ways to improve your happiness, as this study covered by Harvard Health explains.

\n\n\n\n

I was part of a leadership coaching cohort with other founders and CEOs, and one of our exercises was to have a weekly 15-minute Zoom call where we’d each take turns saying something we were grateful for. (I think the original assignment was 7 minutes, but Parkinson’s law and Google Calendar’s 15-minute default expanded it.) Like most great coaching, it seems silly on the surface, but when you actually practice it with an open mind, something magical happens.

\n\n\n\n

It really grew on me, and while most of the randomly assigned pods of people that had this assignment for a few weeks dispersed, ours has kept it going now for several years beyond the conclusion of the coaching program. The calls are also a great way to stay in touch with people I love, but we might easily fall into our own universes and not keep up with each other. Wherever we are in the world, whatever is happening, this standing meeting is on everyone’s calendar, and while it has ebbs and flows, the flame has been kept alive.

\n\n\n\n

Consider starting your own pod: pick a time, set a standing Zoom room, and see what happens. We do early mornings before most meetings start. I don’t make it every week, but I do more than not, and the weeks when I do are definitely a bit brighter, both in my own gratitude practice and in the connection with the others in the pod.

\";s: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 Nov 2025 07:08: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: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:15;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"Matt: Austin Meshtastic\";s: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=150697\";s: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:40:\"https://ma.tt/2025/11/austin-meshtastic/\";s: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:\"

We’re celebrating Thanksgiving this year with my sister Charleen in Austin, and it’s no surprise there’s a great Meshtastic community here!

\";s: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 Nov 2025 07:18: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: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:16;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:112:\"WPTavern: #195 – Saumya Majumder on How Cloudflare Outages Impact the Web and WordPress Performance Solutions\";s: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=200950\";s: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:125:\"https://wptavern.com/podcast/195-saumya-majumder-on-how-cloudflare-outages-impact-the-web-and-wordpress-performance-solutions\";s: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:62017:\"
Transcript
\n

[00:00:19] 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, how CloudFlare outages impact the web, and WordPress performance solutions.

\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 Saumya Majumder. Saumya is the lead software engineer at BigScoots with a deep specialization in high performance WordPress engineering and advanced CloudFlare powered architectures. Throughout his career Saumya has built large scale systems ranging from custom caching engines, to migration tools, worker based automations, and edge computing solutions. He’s played a pivotal role at BigScoots overseeing enterprise customers, and developing scalable developer friendly solutions that push the boundaries of hosting for WordPress.

\n\n\n\n

We begin our conversation with a timely discussion about a major CloudFlare outage that recently rippled across the internet. Saumya explains what happened behind the scenes, the nature of these kind of global infrastructure hiccups, and why, even with the most robust systems in place, some downtime is simply inevitable. He offers valuable insights into how BigScoots is able to mitigate these issues for their customers, even automating rapid failovers to keep sites online during outages.

\n\n\n\n

We then move on to explore some of the innovations that the team at BigScoots have been working on. They focus upon site speed and reliability. This includes CDN level page caching, and their close integration with CloudFlare Enterprise. Saumya breaks down how this caching differs from traditional server based caching, and how it ensures that users around the world get fast, local access to website content.

\n\n\n\n

If you’re curious about how hosting companies manage such advanced caching strategies and how CloudFlare might fit into the hosting jigsaw, 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 Saumya Majumder.

\n\n\n\n

I am joined on the podcast by Saumya. Hello, how are you doing?

\n\n\n\n

[00:03:04] Saumya Majumder: Hey, I’m doing well. How are you doing?

\n\n\n\n

[00:03:05] Nathan Wrigley: Yeah, very well, thank you. So this is going to be an interesting conversation. I got put in touch with Saumya via Tammy Lister, who has been communicating with Saumya over the last period of time. I don’t know exactly for how long. But the idea is that we’re going to talk about what they’re doing over at BigScoots and the interesting innovations that they’ve got.

\n\n\n\n

By pure coincidence, the day before we recorded this, the Cloudflare, I’m going to call it fun, the fun that Cloudflare had with the entire internet happened. And so I think we’ll digress for a bit at the beginning of the podcast and talk a little bit about that as well, which was unexpected. But given that you are working heavily based upon Cloudflare, it’ll be interesting to talk that through.

\n\n\n\n

Would you mind just spending a moment though, just introducing yourself. Just tell us who you are, what it is that you do at your current role, that kind of thing, and then we’ll get stuck into our conversation.

\n\n\n\n

[00:03:55] Saumya Majumder: I’m Saumya. I work as a lead software engineer at BigScoots, specialising in high performance WordPress engineering and advanced Cloudflare powered architectures.

\n\n\n\n

I also build large scale systems from custom cache engine to migration tools, worker based automations, edge computing and whatnot.

\n\n\n\n

I also look after our enterprise customers, all of our internal WordPress projects and plugins and IPs. And I also build scalable, developer friendly solutions for our clients to ensure that they are getting the best service product out of it.

\n\n\n\n

[00:04:29] Nathan Wrigley: Thank you very much indeed. Now, I’m just going to dwell on that for a little bit. A lot of that seems extremely technical, but also it kind of feels like that you went very much down a particular road very early on.

\n\n\n\n

How is it that you ended up doing all of that interesting, but quite specific stuff? How is it that that happened? Is it something that you pursued out of college or something like that? How is it that you went down that path?

\n\n\n\n

[00:04:51] Saumya Majumder: It’s an interesting question actually. So I remember, back in my second year of college, I started doing projects, like outside projects. So I started dabbling with PHP, like at the very early days of WordPress. So I get into the WordPress and I was like doing coding, changing things, pushing things to the core, tinkering with the WordPress. That was like way back in the days of the WordPress ecosystem.

\n\n\n\n

From that, I was dabbling with PHP and other stuff. So that was like back in the days when I started, and then slowly I started seeing problems and how to solve the solution. So for example, a lot of the companies today, like CDN page based page caching, in today’s 2025 it’s like a very, pretty much common thing across the world. If you go to any premium hosting or any premium package, you kind of expect like CDN based page caching.

\n\n\n\n

You know that that wasn’t the case, even like a few years back. It’s like this level page caching or RAM level page caching, like it’s all on the server. So me and one of my friends, whom we met online due to the WordPress coding things, we actually invented the CDN level page caching. So it wasn’t a thing before that. So there was a plugin that we created called Super Page Cache for Cloudflare that got later acquired by a different company called Optimal.

\n\n\n\n

In that plugin we actually looked at like, okay, all the current solutions, like if you break down how the request is happening or how internet works, like you make a request from wherever in the world, that request then travels through across optical fiber cable, blah, blah, blah, to the ISP data center. Then from there it goes to the data center, well, then it reaches the server from there on. If you don’t have cache, then the server has to populate the entire thing, get the response, give it back to you, if you have the cache.

\n\n\n\n

So we were saying that, you know, this is adding like a huge amount of latency, especially if you are, like the distance between the server and you is larger. Back then there was like MaxCDN, KeyCDN, and all of this provider who are like focusing on static files being served from the CDN.

\n\n\n\n

So that was like already a thing, but we were like, okay fine. But like if static files coming from CDN, that’s great, but the main leap frog forward is if we can move the page. Like, literally serving the page HTML from the CDN itself. So if you are in Australia, the request doesn’t have to come to the US. Like, if it’s cached, it’s literally coming from your neighborhood.

\n\n\n\n

So caching was one of the most complex problems that I kind of always loved solving because it was one of those unsolvable problems in the computer engineering world. So that’s how I like get into it, and then started. I broke a lot of things and fixed them and it’s like a journey. It’s hard to explain, but it’s like a journey of a lot of failure and a little of success, I guess.

\n\n\n\n

[00:07:37] Nathan Wrigley: Yeah, I can imagine. Do you ever get the sense that you are approaching the destination or is this whole thing just, I’ll do this and then I know that in a week’s time, there’ll be something else that I can optimise. Is there ever a moment where you’ve thought to yourself, okay, that’s it, we cracked it for now? Or is it always just, no, there’s another thing?

\n\n\n\n

[00:07:55] Saumya Majumder: It’s always a process, right? The technology is evolving. There’s way, way more to dig deeper. So one of the things we recently released was end DB protection caching. I’m going to talk about it in a moment and also login user caching. Both of these things were in my bucket list for years, and I have done like R and Ds, and R and Ds, and R and Ds to figure out exactly the way to do things. So again, you know, like it’s a process, right? And it takes time.

\n\n\n\n

[00:08:20] Nathan Wrigley: Yeah, that’s lovely. Like you say, we’ll get into those bits and pieces. But as I said at the top of the show, by pure coincidence, we had this, let’s just call it a real collapse in a sense of what Cloudflare provides to the internet as a whole. And I think, depending on where you were and when you were awake in the world, I think for Europeans and maybe the part of the world where you are, it hit us right at the time when we’re all awake. I think maybe if you’re in North America, especially on the West Coast, you might have missed much of it.

\n\n\n\n

But for most of the day here, everything on Cloudflare just declined to work. And it was really interesting how profound that was. And we’ve all heard this problem before. We’ve seen the little drawing of the great big tower built of Lego bricks, and there’s the one little brick at the bottom holding the whole thing up, and it’s called Cloudflare, or it’s called AWS or what have you.

\n\n\n\n

Can you explain to us what the heck happened yesterday? Are you able to sort of get into, do you understand it at this point?

\n\n\n\n

[00:09:15] Saumya Majumder: Yeah. So internet is a magical thing. It works by magic. If I get into explaining how it works, it’s going to be another thing. But the way it works is, and especially in case of Cloudflare, right? Like, a lot of people look at Cloudflare, that it is a CDN provider, like MaxCDN or Akamai or like any of these providers. But CDN is just one bit of Cloudflare. Cloudflare is like a, such a gigantic service that is like built on top of it.

\n\n\n\n

So as a result, what happens is, when you have such a big system working together, there are lots of critical dependencies that happens. You have all these boxes, but all these boxes are depending on one of these config file, or one of these things that is coming from the layer below that, right?

\n\n\n\n

And if anything happens in that one thing, the things at the top are working fine, but it cannot work because the one thing that is below it is gone.

\n\n\n\n

I would also like to say there is no such thing in the world of internet that just works. Everything is supposed to break at some point in time. There’s no such thing. Be it Google, be it Azure, be it AWS, Cloudflare, anything it is. Even if you have your own data center and everything like that, like we have, there’s no way that, like a lot of things can happen even after you are prepared to mitigate all of those things, like you have follower, and a follower, of follower and all this backup system, still things can go wrong. Maybe that didn’t turn out, maybe that didn’t happen.

\n\n\n\n

I saw a lot of memes yesterday on Twitter, like a lot of people was posting like, hey, I just joined as an internet Cloudflare. I pushed a code and that happened. And I understand that it’s funny, but when you look deeper into it, it is actually not funny. It is really like a code red scenario. And trust me, no one, no company wants to get into that code red scenario. Because you have to understand, all of these companies also dealing with a lot of enterprise customers to whom they have promised like 100% percent SLA or 99.99% SLA. And so when they don’t meet that, they have to pay a hefty amount of credit back to them.

\n\n\n\n

So it’s not just the downtime and bad reputation and marketing and all that, it’s literal money being bled out of the company because of that. And it’s like all of those systems.

\n\n\n\n

But at the same point in time, the way technology works, things can mess up. You can do multiple tiers of review of the code, you’re still going to miss a certain edge case scenario, which will only occur if this happened and that happened. And the probability of that happening is probably 0.00001%. But that 0.00001%, it’s not zero. It can happen.

\n\n\n\n

In the world of engineering, we call certain things that are super low priority, like it’s never going to happen. I’m not saying that it cannot happen, it can happen, but the probability of that is so low that spending engineering hours on that at this moment, where we have much more critical things to do, it doesn’t come up, right?

\n\n\n\n

But sometimes things happen. And as a senior engineer, it happens like this. And in case of Cloudflare, what happened is as this is like a such a big system, even if they identified the root cause, let’s say that takes some amount of time for the engineers to figure out, and they push that. And you have to understand, a lot of people are sending requests, requests are going down, and they figured out the root cause. They’re pushing the fix and then like a boatload of requests is coming to Cloudflare.

\n\n\n\n

So it takes time for everything to stabilise, you know? So it is bad. It is bad, but anyone who is thinking like, oh, Cloudflare is bad, if I move from Cloudflare to, I don’t know, X, Y, or Z, or something like that, it won’t happen. I haven’t seen, like a Tweet yesterday where somebody said, send cold emails to people saying, Cloudflare is down. But we don’t use Cloudflare, we use our own VPS and dedicated server for that. And I was like laughing out loud. I’m like, I understand that, you know, your data center did not go down, but that does not mean that it can never go down.

\n\n\n\n

[00:13:06] Nathan Wrigley: It’s kind of guaranteed. I think one of the interesting things that I saw was in the mitigation, the sort of summing up posts that Cloudflare created, there was this whole thing about this unexpected file which kind of doubled in size. It was supposed to be this size, but it doubled in size, and that got propagated. And then for a period of time, the ripple effect of that was that it looked like a DDoS attack. For a period of time it looked as if it may have been malicious actors.

\n\n\n\n

And so the Cloudflare engineers, I think kind of went off, as it turned out, wrong headedly. They went off in the wrong direction, searching for the problem, which probably added a number of hours to the mitigation, and then kind of figured out what was going on. And then, like you said, the whole ripple effect is, it’s not like you turn off a computer, switch the computer back on, and Cloudflare is restored. There’s this whole propagation thing where you find the problem, mend the problem, the problem mitigates, and that is presumably going to take hours and hours and hours. And then you could just see the sort of downtime reports slowly repairing themselves over the internet.

\n\n\n\n

[00:14:08] Saumya Majumder: And you have to understand that, as I said, Cloudflare, people think of Cloudflare as a, either a security company or a CDN company. But Cloudflare is way, way, way more than that, right? The CDN backbone that they have, it’s literally their backbone, the powerhouse on top of which Cloudflare builds their own thing.

\n\n\n\n

So anytime they find a fix of which they call their control plan, you know, pushed the fix to their control plan, that has to get propagated across all of their end edges. And Cloudflare has the highest number of CDN PoPs, you know? So it has to get pushed across all of these places, rebooted and all of these crazy things has to happen in order for everything to go properly. And then all the burst of traffic that is coming on that it has to handle that. It is a crazy thing.

\n\n\n\n

But one of the things that I liked about Cloudflare is that, it’s not that this is the first time Cloudflare had a global outage. They had global outage before as well. There are two things I really love about Cloudflare.

\n\n\n\n

Number one is that they’re super transparent. So anytime things go wrong or situation like this happens, they always push like a detailed blog article explaining exactly what happened, what they did to fix it, and how they’re making sure that this does not happen again in the future. And it never happens in the future.

\n\n\n\n

So if you look at the previous global outage that they had, I think back in June, it was caused because there’s a thing called Cloudflare KV, which had a dependency on GCP. So when GCP went down, so KV went down and as a result the system went down. And from there on, they’re now working on to remove that dependency, building things internally in house to make sure that doesn’t happen.

\n\n\n\n

Previously, there was another, I think last year or something like that, another global outage where the entire main data center went down. There was like multiple failover but the generator didn’t start and then this didn’t start and that didn’t start. And that caused like a huge failover scenario, I think, if you remember that, right?

\n\n\n\n

And from there on, they make sure that, okay, we now have to make sure that we have multiple, that scenario is never going to come back. So they always work towards to make sure everything that happening never happens the second time. And it really does that. But at the end of the day, in the world of technology, things can go wrong. It’s just how it is.

\n\n\n\n

[00:16:11] Nathan Wrigley: What’s kind of curious though, from an end user’s perspective, and you are going to explain to us some of the complexities of the inner workings of BigScoots and how it combines with Cloudflare in a minute, and that’ll be really interesting. But from a non-technical user’s point of view, it just feels like the sky is falling in because so much of the internet has collapsed, so many things that they’re familiar with.

\n\n\n\n

So just a couple of examples which many people would be familiar with. So for example, if you were a user of the social network X, that completely failed. There must be a dependency on Cloudflare at some point there. Also ChatGPT, which is now becoming almost, it’s just a thing which almost everybody at some point of the day is plugged into, that went away.

\n\n\n\n

But then it just rippled out across so many other things. News organisations go down. The ability to log into a variety of things went down. So it may be that your platform itself worked, but you might have had the the Turnstile sort of capture system, which Cloudflare run, enabled, and nobody could log into the proprietary platform that you got because the Cloudflare portion, the Turnstile wasn’t working and so on.

\n\n\n\n

So it just had this enormous effect. And the sort of chilling effect of that is that people then, erroneously I think, sort of view Cloudflare in some way as a bit of a, I don’t know, a giant that needs to be brought to heal in some way. You know, we can never let this happen again, there’s too much dependencies on these small group of massive organisations and what have you.

\n\n\n\n

But by today, everybody’s forgotten that, you know, they kind of moved on with their lives and we’re back to what it was like on Monday. And so there’s no question in there, but I think there’s some insight that I’m sharing.

\n\n\n\n

[00:17:41] Saumya Majumder: Oh yeah, absolutely. So there are a couple of very important things to understand here, right? So first of all, as you said, the people who talks about these kind of things on the social media, trust me, either they’re not engineers, senior engineers, or they don’t understand the problem.

\n\n\n\n

And so these are the people who talks about this exact same thing where a few weeks back AWS went down, and then a couple of months back, GCP went down. And then they were like, well, Facebook went down, they literally just use this exact same word every single time something goes down. But things can go down. That’s like, you have to accept that and move on.

\n\n\n\n

And that’s why when you get onto these enterprise deals with these big companies, they have this SLA agreement, like where they say, we grant to you, as I told you about earlier, right? So all of these companies, GCP, AWS, Cloudflare, if you are like a big enterprise customers of them, you have like an SLA agreement with them. Where they say, okay, we are going to guarantee that we’re going to give you 100% uptime, or 99.999999% uptime. And anytime they miss that mark, they have to pay back a huge sum of money as a credit to the customers saying, okay, we missed on our contract, so this is that credit back to you.

\n\n\n\n

So you have to understand that anytime situation like this happen, it is not only a bad thing on the companies, on the marketing front of it, but it is also a bad thing on the financial side of things. Because you have to understand like all of these big companies, there are these smaller clients who are dealing with companies like, there are smaller clients and there are like giant clients, the enterprise customer who companies are really worried about. And for these giant clients, they have to pay huge amount of money back as credit because things didn’t come back within time. So it is not something that they are not worried about to fix immediately. They’re literally trying as hard as possible to fix that.

\n\n\n\n

So that being said, now talk about the other points that you brought up, the turnstile, the WAF and the other things, right?

\n\n\n\n

So as I said, Cloudflare is not just a security company. It’s like a huge thing. Cloudflare has a thing called Developer Platform where you can literally deploy your own APIs, your AI workload, your workflows, your entire React or entire application on Cloudflare, which is amazing. I use it. I love that platform.

\n\n\n\n

And then that is one side of using Cloudflare, and then there’s another side of using Cloudflare like, for example, using BigScoots. You have let’s say a WordPress website that is hosted on BigScoots, but it is being proxied via Cloudflare to leverage their CDN, their security and all of those features.

\n\n\n\n

So in a scenario like a WordPress site where you are not using Cloudflare as your host, so your Cloudflare is just there as a proxy, making sure that your origin IP is not there, your site is super protected and performance and CDN and whatnot. In that scenario, anytime this kind of problem happens, you can kind of, when this outage was there, the API was still working and we actually, for all of our customers, we leveraged our API to make sure that any request does not proxy via Cloudflare, but instead it just goes directly to our server just for the moment in time until Cloudflare is back in the game.

\n\n\n\n

[00:20:42] Nathan Wrigley: Oh, so you could turn the proxy off via the API.

\n\n\n\n

[00:20:45] Saumya Majumder: Via the API, yes.

\n\n\n\n

[00:20:46] Nathan Wrigley: Right. So the fact that the rest of us couldn’t log in because Turnstile was down, we couldn’t authenticate into the Cloudflare network on the web. The API was still available, so you could turn the proxy off for a variety of your customers, and the domains and the websites that they had.

\n\n\n\n

Oh, that’s really interesting. So they had a few minutes of downtime. Okay, that’s fascinating.

\n\n\n\n

[00:21:04] Saumya Majumder: So what we did is when we saw this outage happening, anytime requests are coming in, it was a code red scenario on our end as well. All hands on deck. So anytime requests are coming in, like people are having problem, we immediately turned on the proxying API to make sure that this site is up and online.

\n\n\n\n

So that way the request is not going via Cloudflare anymore, it’s coming directly to us for the moment, until CloudFare is back on track. And that helped us to mitigate the downtime as much as possible for the customer, even though Cloudflare was technically down.

\n\n\n\n

But if you would have been hosting your Nuxt or React or Next.js kind of application on Cloudflare, where you are using Cloudflare workers and things like that as your host, in that scenario, you couldn’t push anything.

\n\n\n\n

[00:21:49] Nathan Wrigley: Yeah, the API is not going to help you.

\n\n\n\n

[00:21:51] Saumya Majumder: Yes, yeah. It was bad but it’s going to happen. It can happen.

\n\n\n\n

[00:21:54] Nathan Wrigley: Yeah, I think that’s kind of the message, you know? Nothing that humans create is immutable. Everything has a moment of breaking. But, you know, if you were to cast your mind back until, well, just Monday when everything was, you know, just plain sailing, Cloudflare was working as normal, then everybody was entirely happy. We had this period of time, it was maybe something like 8 hours where everybody’s kind of throwing their arms in the air and, you know, moaning on whatever social networks are still working.

\n\n\n\n

But now we’re onto Wednesday, that whole thing is long behind us. That ship sailed, whatever, move on. Confidence, I think basically what you’re saying is you can be confident in Cloudflare. They’re going to have hiccups because they’re like any other company, things will go wrong.

\n\n\n\n

[00:22:33] Saumya Majumder: Everything can have hiccups. So it’s not just, so you have to understand this, right? Again, I’m saying that Cloudflare is not just a CDN provider, but if you look at Cloudflare and all the things that they do, the complexity of it is like mindbogglingly crazy, you know? Like it’s immense, immensely complex. It makes things super easy for you. Okay, you just toggle this on and it’s done. But if look at under the hood, and all the things and chains it has to go through, and that happens in a blink of milliseconds, it’s crazy complicated.

\n\n\n\n

As I said, right, like I’m not saying that Cloudflare is bad. I think Cloudflare is amazing because two things, they have super transparency, so anytime anything happens, the blog article that you are like referencing here, they didn’t hide behind anything like, oh, it was not my problem, like not doing the blame game thing. No, no, no. Like, it was our problem. This is the problem.

\n\n\n\n

For example, in that blog article, they could have completely, don’t talk about the DDoS thingy, right? They could have just said, oh, this was the configuration file problem. We fix this, it’s done. But no, they actually literally walk you through how exactly they process the problem, which is really great. And then they actually learns from their mistakes to make sure that particular mistake never happens again, while they are like growing rapidly and building things, pushing things like crazy, like always pushing new things, which is like amazing to me.

\n\n\n\n

[00:23:50] Nathan Wrigley: I think the article even started, if it wasn’t the first set of words, it was definitely in the first couple of sentences. It was something like, we let you down. It was full ownership, I think. So bravo to them.

\n\n\n\n

And you’re right, the complexity behind it, you know, like you said earlier, the internet, the fact that anything works on the internet is an utter miracle of engineering, of computer engineering.

\n\n\n\n

You know, the fact that we’re on a platform that we are staring at each other. I can see your image, you can see my image, you can hear my audio, I can hear your audio. You are on the, a different side of the planet, but it’s happening like you’re stood next to me. And the millions of packets of information that have flown during the course of this conversation, it’s insane. And Cloudflare add a whole layer of other stuff on top of that, which makes it even more insane.

\n\n\n\n

[00:24:33] Saumya Majumder: Yeah. And you have to ask the question, like, why all these big companies are using Cloudflare like if it is so bad. Because they are doing things that nobody else even think about doing at a scale. And it’s like mindblogglingly crazy. It’s crazy.

\n\n\n\n

[00:24:46] Nathan Wrigley: Yeah, yeah, it really is. So we’ll leave that for another day. But obviously over at BigScoots, you’ve really attached your wagon, if you like, to Cloudflare. And when you agreed to come on the podcast to talk to me, it became obvious to me that the pay grade that you are at is very different to the pay grade that I’m able to keep up with.

\n\n\n\n

So we’re going to talk about what you’re doing over at BigScoots. I’m going to try to keep up, but if I misunderstand something, or I have to ask you to repeat something, I hope that’s okay with you. But I’m just curious because Tammie Lister, like I said at the beginning of this episode, she’s somebody whose opinion I respect a lot, and she said that you are doing some really innovative, interesting things with your connections to Cloudflare at BigScoots. So just lay out some of the interesting engineering work that you’ve been doing. I’ll try to hold on.

\n\n\n\n

[00:25:30] Saumya Majumder: First I’m to Tammie is great. Tammie is amazing. But yeah, I mean, I think BigScoots have been one of the first to utilise Cloudflare Enterprise in the hosting world. I know we didn’t do any kind of huge marketing like other hosts, but we have been the first to leverage Cloudflare Enterprise in our hosting ecosystem. And it was such early days, like back then, all of these things, this market wasn’t there. So we were building things that people didn’t even test it out.

\n\n\n\n

So as I said in the beginning, like I, along with one of my colleagues, we invented the CDN level page caching. This is way before APU and all of that. So all of those things actually build upon the architecture systems as we build on, including APU and the workers and stuff.

\n\n\n\n

So at BigScoots, the Cloudflare thing, especially the Cloudflare Enterprise thing opens up a whole new door for us because it now allowed us to provide CDN level page caching for every single user at a super high cache hit ratio. I mean it’s like, every time you hit a page, chances of that getting, coming out of cache is much higher, compared to if you are, or like a free plan or any other plan, right?

\n\n\n\n

So that was the beginning. And on top of that, we build our own proprietary plugin called BigScoots Cache, which allows you to not only leverage and take advantage of the Cloudflare page caching, but giving you the ability to fine tune every aspect of page caching that you would like on webpage.

\n\n\n\n

[00:26:56] Nathan Wrigley: I’m going to pause you right there. Firstly, because I’m sure that almost everybody in the audience, because their WordPress aligned, is going to understand what a cache is. They’re going to understand this process of kind of, okay, let’s remember something for next time so that when we need it next time, it’s kind of ready. But they may not understand how Cloudflare does this on their Enterprise plan.

\n\n\n\n

So what is it that’s different? Because we may be familiar with, I don’t know, a WordPress plugin and we’ve got some idea that there’s a cache. It’s sitting on the server somewhere in a file, it’s an HTML file or something like that. You are describing something not in one location, but like really just spread globally so it’s ready at the point of least distance from wherever somebody is. So tell us a bit more about that.

\n\n\n\n

[00:27:35] Saumya Majumder: So let me explain that with like an analogy, right? So before CDN level page caching, I think pretty much everybody would remember, like we used to have caching plugins. I’m not going to name anything, but they were caching plugins. So when you turn them on, what they essentially did was they would create like an advanced-cache.php. You have everything of that file inside your WordPress installation.

\n\n\n\n

What that used to do is, when you send a request, let’s say you are in Australia, right, and your server is in US, so you want to open example.com, and that requests flows through under the ocean, it goes to the data center, it goes to the server, the server receives the request, it started processing that, run all the database queries and all of that, and then it got the HTML to show it to you.

\n\n\n\n

Back then what it used to do is then, advanced-cache.php would kick in, it would create a copy of the HTML, store that locally on the server so the next time if someone requests for that page, instead of asking the server, hey, please process the PHP and database and all of that, it would require much less amount of server resources because it’s just like, WordPress is like warming up. The request goes to advanced-cache.php, then it says oh, I have that cache file, sends that cache response back to you.

\n\n\n\n

But even in this scenario, if you are making this request from Australia and your server is in US, you have to understand that the latency is very high, because the request has to go from Australia to US and then whatever gets there is, you know, response from there and come back from US to Australia. So the traversing time is pretty high.

\n\n\n\n

From there on, and back then we are thinking about MaxCDN, you know, KeyCDN and like putting static files on the CDN so that, yes, the page is being generated by the server, but the static files are being served literally where you are. Like, if you are in Australia, in Sydney, so maybe the CDN PoP in Sydney is like, when you make a request for that, the static file is coming from Sydney.

\n\n\n\n

That’s where we thought about, what if we can put this page HTML, instead of in the server, we can put it on the CDN? There were two benefit out of this. First, it is in insanely fast. Because if this page HTML is across the world, so if you are in Sydney making the request and the request is like, oh, okay, I have this page cache to me, here you go, the response, you get that in like less than 100ms, you know?

\n\n\n\n

Same thing happens for someone sitting in India and Germany and some other places of the world, because it’s cached across the globe. So it’s not just coming from a single place. And anytime it is not cached, the request goes to the server, HTML processed, and by the time the response is sent out, it got cached. It’s cached across the world.

\n\n\n\n

Now, that was the page caching part of it, right? And then there’s other things, the object cache and OPcache, that’s like whole another different level. But I’m not going to get into that. I’m just going to stay with, because then it’s going to get way too long.

\n\n\n\n

So that’s where this object caching and Cloudflare Enterprise came into play, right? Cloudflare Enterprise then allowed us to make sure that we can cache all these pages across the globe with a very high cache hit rate. Cache hit rate means, when something gets cached somewhere, let’s say someone makes a request to that file and that cache is expired from there and it’s not there. So the request, again, has to go to the origin and get processed and come back to you.

\n\n\n\n

So that is generally the case with the lower tier plans with Cloudflare. So with Cloudflare Enterprise you get a very high cache hit ratio. So when it’s getting the cache, it stays on the cache for a very long time. On top of that, we got tiered cache and regional tiered cache and all of those crazy things.

\n\n\n\n

Which that means is, we have tiering systems. So when you make a request, the request first gets cached in the upper tier. And when a lower tier, so let’s say, how can I explain this to you? So let’s say you are in Phoenix, okay? And in Phoenix there’s a data center, or a PoP that is called, in case of CDN, a PoP is there in Phoenix but the upper tier PoP is Chicago.

\n\n\n\n

So let’s say someone made a request from Chicago, the page was cached in Chicago data center, okay? Now, as we have this tiered cache system, when you, from Phoenix, is making the request, instead of that PoP directly sending the request to the origin, it would first internally within the intranet of Cloudflare, not the internet, okay? The intranet of Cloudflare. The internal network like, hey, does anyone in the upper tier has this page cached to you? And if they say yes, they would fetch it from the upper tier, which is like crazy fast because there’s no traffic, and it’s like a internal network of Cloudflare.

\n\n\n\n

And if it does not, then it pass on the request to the upper tier, because the upper tier is the only one who has the power to pull the request from origins. It goes to the upper tier. Upper tier pulls it from the origin, creates a copy, and it’s upper tier, and then send it back to the lower tier. So in that way, in the tiered architecture, it makes sure that the cache hit ratio is insanely high.

\n\n\n\n

[00:32:24] Nathan Wrigley: Let me just sort of read that back to you just to make sure I’ve understood. And I’m imagining that, the simplest way my head is understanding that is a bunch of concentric circles. So in the center is me, and I wish to find something on, let’s say, the outer circle. So the first thing I’m going to do is go to my inner circle, and if the inner circle doesn’t have it, we need to go to the next circle out, and the next circle out, and the next circle out.

\n\n\n\n

Now in the old world, if you like, or the non-enterprise version of Cloudflare, at some point we have to go further out of the circles in order to find what it is that we’re looking for. But what I think you are saying is that on the enterprise level, that outer circle is constantly pushing things towards the inner circle on a much more local basis. So rather than having to go out circle, another one, another one, another one, it can just hop one circle out, get what it needs, and then hop right back. In other words, every single thing is always closer, geographically, than it would be in any other setup.

\n\n\n\n

[00:33:22] Saumya Majumder: Yes, and on top of that, if you look at the opposite architecture of this, right? So imagine you are in Phoenix, Phoenix doesn’t have it in cache. Phoenix sends a request to origin, now someone from Mississippi makes a request, they don’t have it in cache, their PoP makes a request too.. So all these PoPs are making requests to the origin because they don’t have it in their own local cache, which is bad because that would then mean the request to the origin would increase dramatically, which we are trying to reduce.

\n\n\n\n

But in this sense we have, imagine like a fixed set of upper tier data center, then we have like a middle tier and then the lower tier, right? So if lower tier doesn’t have it, it asks the middle tier, middle tier checks if any of the middle tier across the world have it. If they do, immediately send it. And that’s happening within the internal network of Cloudflare and not on the open internet, okay? It’s like crazy fast.

\n\n\n\n

[00:34:11] Nathan Wrigley: Right, okay. So again, forgive me, I’m going to make a leap of faith here, I could have this wrong. I’m guessing that on the Cloudflare side, they have their own bespoke hardware to route all of this stuff. So like you said, you described it as an, it’s like an internet intranet, almost, the scale that they’re on. But they’ve got their own hardware, which will be able to route that information presumably more quickly, and with less, I don’t know, less latency than you and I might have.

\n\n\n\n

[00:34:36] Saumya Majumder: Yeah, it’s a intranet, it’s not internet. It’s a private channel, right? So no one talking there except for Cloudflare. And the best part of that is, so imagine let’s say you are making a request from Mississippi, and there is like a upper tier data center in Mumbai, India, right? So what happens is, even though it’s not cached in US, it’s going to see that, okay, I have it cached in Mumbai, let’s take it from there instead of making a call to the origin, reducing the call origin, yeah.

\n\n\n\n

[00:35:05] Nathan Wrigley: Okay, that bit I didn’t understand. So the entire network is aware of where the closest thing is even before it needs to have it. I got it. Okay. That’s fascinating. And do they own the cables? Do Cloudflare own the cables connecting these things?

\n\n\n\n

[00:35:18] Saumya Majumder: Yes. Yes, they have their own data center, their own backbone, all of that. And on top of that, like at BigScoots we even have direct physical connections to Cloudflare service. That’s called CNI. That’s like a next step. So again, let me kind of paint a picture. This is you as a user, right? This is Cloudflare sitting in the middle, acting as a reverse proxy, and this is origin, okay?

\n\n\n\n

So the way it works is you make a request, right? So let’s say you, a request is received by this in a reverse proxy Cloudflare. Then it process that thing, whether it has to show you a WAF page, whatever the logic is, right? Does it have it in cache and all of that? You know, if it is not being blocked or challenged, do I need to show it in cache? Do I have it in cache? You’re talking to the internal network, all of that. And that’s happening in this middle tier, right?

\n\n\n\n

And this middle tier is now connected to their entire Cloudflare chain, right? So if, let’s say Mumbai has it, and it pulls from Mumbai, give it back to you. So the request never goes to the origin, right?

\n\n\n\n

Now, for whatever reason, you make a request to Cloudflare, Cloudflare checks it’s internal network, it doesn’t have it itself, so it has to make a request to the origin, right?

\n\n\n\n

There’s the interesting part. This bit of connection that is you and the Cloudflare, that’s happening over the open internet, right? Because like you making and the request goes by the open internet and lands to Cloudflare, right? And then this is your origin, so your Cloudflare to origin, right, that also generally happens by open internet. Cloudflare then makes a request, and that request goes by the internet and, you know, lands on the data center.

\n\n\n\n

But here’s the magical part that we have done. As we run and own our own data center, what we have done is we have connected a physical cable, like literally optic fibre cable with super insanely high bandwidth with the Cloudflare servers, with our servers. So what happens is, anytime Cloudflare has to fetch something from our origin, instead of sending that request by the open internet, which could be slow, there could be congestion and whatnot, it then sends via that private network that we have created, that private optical fiber cable and lands directly to our origin. Like, oh, this is hosted on BigScoots. We need to talk to BigScoots. Okay, send via this channel, which is not part of the open internet. And boom, it gets there, comes back, it’s like insanely fast.

\n\n\n\n

[00:37:32] Nathan Wrigley: Okay. How did that happen? Like, is that some sort of agreement that you have struck up directly with Cloudflare so that you can tap, you know, in a sense it feels like you’ve become a third party piece of their network infrastructure almost.

\n\n\n\n

[00:37:47] Saumya Majumder: Think of like, if Cloudflare is like a one gigantic network, our systems are also plugged into their network so that they can use the intranet system to fetch data directly from us, instead of using the open internet, which is much slower, there could be congestion and whatnot. To making that request between the Cloudflare, the proxy and the origin, making that instantly fast.

\n\n\n\n

[00:38:10] Nathan Wrigley: So how did that whole thing come about? How is it that you fell into this agreement? Because I don’t know if many other organisations do this, you know, outside of the web hosting space, maybe this is a typical thing where you could follow a roadmap from another company that had done it. I’ve not heard of this, so that’s kind of interesting. How did that relationship come about?

\n\n\n\n

[00:38:26] Saumya Majumder: If you don’t run your own data center, it is very hard to do this.

\n\n\n\n

[00:38:29] Nathan Wrigley: Yeah, I do not.

\n\n\n\n

[00:38:30] Saumya Majumder: Yeah, because you have to literally connect your servers and routers and everything to the Cloudflare network, you know? So most of the hosting companies out there, they don’t run their own data center on their own space. They actually lease, what I call lease their hardwares and services from other cloud providers. Whereas we run our, you know, our private cloud, our private system, our own data centers, you know?

\n\n\n\n

So like, for example, some company could use AWS or GCP or Azure and then create their own flavor of it and run Cloudflare through it. So they actually don’t have physical access to those data center’s other servers. Whereas we do. If we see something, we can literally pull up the drive, we can do things at our data center, we can change things, we can attach those things physically, which pretty much none of the hosting provider that I know of has access to.

\n\n\n\n

[00:39:19] Nathan Wrigley: It’s so interesting. Honestly, we could go on about this for absolutely ages. But basically, the long and the short of it is, you’re making things as fast as it’s possible for electrons to be. In a distributed network where some things don’t know things, and other things do know things. It’s all an enterprise in trying to figure out how to make it so that everything knows everything as fast as it is possible for electrons to fly around through the optical cables that there are spread throughout the world.

\n\n\n\n

[00:39:47] Saumya Majumder: I haven’t even described the servers.

\n\n\n\n

[00:39:47] Nathan Wrigley: I’m nowhere near finished because I want to get into what it’s like for somebody using, we’re a WordPress podcast, so I guess at some point we need to sort of grind it into that. So how would it benefit just some normal human being who’s got a WordPress website? What does all of this clever technology that you’ve created and that you’ve combined with Cloudflare over at BigScoots, what does it bring?

\n\n\n\n

[00:40:09] Saumya Majumder: It brings insanely fast speed. Insanely fast speed, super improved Core Web Vitals, and super DDoS products and all of that. It brings all of that. And I don’t want to talk about this kind of things, which I know the audience might not be interested about. I want to talk about more other interested things that the users can use.

\n\n\n\n

So I was talking about BigScoots cache, which is our own IP, right? So we created our BigScoots cache plugin, top two are manage this entire Cloudflare caching system to work with that. And not just that, it gives you, if you are an advanced user, it literally gives you the ability to fine tune and manage every aspect of caching system that you want, every aspect of it.

\n\n\n\n

So let’s say for example, we by default set the cache TTL, CDN cache TTL to let’s say X, but you have like a bunch of pages where you want, I want the TTL to be lower. There’s a hooks for that. You can use that.

\n\n\n\n

Or maybe, let’s say whenever we have intelligent cache purging systems. So whenever you push up to create a post or update a post or something like that, what happens is anytime you push that button, like publish or update, behind the scenes the BigScoots cache plugin intelligently, not only clearing cache for that particular page, but it also knows all the other important pages like taxonomy pages, like archive pages and all that, like author pages that are linked to that article, and then clearing cache for those as well.

\n\n\n\n

So you can also use other hooks. So let’s say you have some fake archive pages that we have seen a lot. Let’s say you are using a theme where you are showing list of articles on a page, which is like technically a page where you are using like a short code, which is not like a real archive page. So the system doesn’t recognise it as an archive page, but you want to clear that page cache whenever something of this tag or this category is published. There’s a hook for that. You don’t have to do that yourself. If you come to us and tell us like, this is our problem, this is the problem, we can actually write the code for you and do it for you. Like, we can literally just set that up for you. We provide like fully managed system.

\n\n\n\n

[00:42:10] Nathan Wrigley: So I’m guessing that the level that you’re at there is you’ve got to have a fairly deep understanding of the sort of caching infrastructure, or would what you are offering be available, not necessarily to deploy, but could anybody understand this with a rifle through your documentation or is it fairly, propeller hat, tinfoil hat stuff?

\n\n\n\n

[00:42:28] Saumya Majumder: We have like a proper documentation for every single hook there is. At the very top we talk about, like this is for the advanced audience. And if you don’t know what hooks are and things like that, it is going to be hard for you to understand what’s going on. But if you know, if you are familiar with actions and filters and things like that, it is going to be pretty straightforward for you.

\n\n\n\n

So that’s why I said, if you don’t know, but you have a problem, and that happens a lot of time, people come to us, we just literally just write a snippet and just make that happen for them.

\n\n\n\n

So you don’t have to know all of that crazy things, you know? It’s there if you are an advanced user, the documentation is there, but if you are not, it’s also there. On top of that, BigScoots cache has its own REST API, which you can use to clear cache, like you can literally use BigScoots cache REST API to clear cache. Imagine you have built like a Laravel system, or some backend system where you are adding something to your e-commerce site and you want to clear cache. When that happens, you can literally leverage BigScoots cache REST API to do that. So that’s like the, on the end of BigScoots cache. Then inside our BigScoots portal.

\n\n\n\n

[00:43:34] Nathan Wrigley: Ah, that was where I was going next actually. Go on, yeah.

\n\n\n\n

[00:43:36] Saumya Majumder: Yeah. We have, I think we have the most advanced and fine grain control to Cloudflare Enterprise that no one else in the industry provides. So I don’t know if you got a chance to look at our enterprise settings page. We really allow users to fine tune things exactly the way they want. So for example, let’s say you, do you want to protect your login pages from bad bots and actors, so that they can’t DDoS that? There’s a toggle for that. Turn that on, it’s done.

\n\n\n\n

You want to enable our own advanced hardening production, which is not using Cloudflare hardening production, it’s using our own proprietary algorithm for that. You want to use that, feel free. Turn on, that toggle is there.

\n\n\n\n

You want to change your image optimisation settings, do that. You want to enable Rocket Loader to every single thing starting from cache settings, speed optimisation settings, there are like bunch of things that you can play around with. You want to block AI bots, do that. You want to block bad bots, like manage, challenge bad blocks altogether, just turn a toggle, it’s done.

\n\n\n\n

So we have so many settings there. I think, if you go take a look at just that settings, you would be blown away. Like, all the things that we allow our customers to customise and fine tune.

\n\n\n\n

Let’s say, for example, you want to block requests from certain countries or continents, and now settings is there. Just choose the countries or continents, requests are blocked. You want to manage, challenge, you don’t want to block, you want to challenge the request from certain countries and countries, you can just go to the settings inside our portal, choose the contains and countries from where you want to challenge. So you could have a combination. So you want to block requests from these countries and continents, challenge from these continents and countries and don’t do anything for the rest of them. So you can play around with this to a whole new level, like you can just do anything you want.

\n\n\n\n

[00:45:19] Nathan Wrigley: It’s absolutely fascinating. And it kind of makes me feel that your target audience would not be really the bricks and the mortars shop, the mom and the pop website?

\n\n\n\n

[00:45:27] Saumya Majumder: There actually are. Yeah, like you you won’t believe how many times we have got a request like, hey, you know what? In our analytics, we are seeing that we are getting a lot of requests from Thailand, and that’s like broken our tools like that, so I want to either challenge or block that. So we are like, you go to the settings, choose the Thailand, click save, it’s done. So it’s like as simple as that.

\n\n\n\n

[00:45:45] Nathan Wrigley: Yeah, I’m kind of imagining though, that you are kind of ideal customer, for want of a better word, maybe that’s the wrong wording, but would be kind of agencies, WordPress agencies, that kind of thing, who could obviously make use of this. They’ve probably got teams of people who can dedicate time to figuring out how BigScoots works, and maybe having a constant conversation with you to optimise the websites that they’ve got and, you know, maybe some of their clients are what we might call enterprise clients and things like that.

\n\n\n\n

If that’s the case, there’s always this merry dance of agencies trying to find the perfect host and kind of figure out, okay, which company do we want to go with this year? And all of that. Do you make it straightforward for people to sort of come to you and say, okay, we’ve got 150 websites, it’s really important that we don’t have any downtime? Do you have some sort of onboarding, migration, something along those lines?

\n\n\n\n

[00:46:30] Saumya Majumder: So we have a lot of enterprise customers, and for every single one of them we have a proper systematic onboarding flow. So that’s making sure that they do, we do migrations with zero downtime, have multiple peer reviews. Then if they have taken our performance optimisation packages and things like that, we would actually optimise their performance and speed metrics for them. And then if they have taken our engineering and services projects, then we would actually do all the, like if they have any technical problems, we would actually go on write code for them, solve their problems.

\n\n\n\n

So we go very hand in hand with our enterprise customers doing onboarding call, making sure they’re happy from end to end. And whether that’s agencies or just normal enterprise customers, it’s for all of them.

\n\n\n\n

And I also want to talk about the settings that you just talked about. So we build all of these things, keeping in mind that they are dead simple to use for anyone. But that doesn’t necessarily mean that they have to do it. A lot of the times customers comes to us and like, hey, we want to do this. As we provide managed support, we actually go into the exact same settings and do that. And that actually solves the problem a lot because now anybody can go to the settings and just do this. Be it our own team or, because it doesn’t have to be escalated, it doesn’t have to come to a specific team. Anybody can do that. And we are constantly growing the more things that people can do to leverage that out. And yes, agencies and enterprise are taking huge advantage of that.

\n\n\n\n

[00:47:54] Nathan Wrigley: Yeah, honestly, it’s absolutely fascinating. You never know, hopefully you and I, our paths will cross at some point in the year 2026. Maybe I’ll see you in Mumbai or something like that.

\n\n\n\n

But what I’m going to do is I’m just going to say, if you’re curious about any of this, I will provide links to everything that we talked about. So if you head over to wptavern.com and you search for the episode with Saumya, so S-A-U-M-Y-A, you’ll be able to find it over there. Honestly, I feel like we’ve just scratched the surface. I feel like there’s another 8 hours in the pair of us, really could get into the weeds of it.

\n\n\n\n

But thank you so much for peeling back the curtain a little bit on what you’re doing and how it all works with Cloudflare. Thank you so much.

\n\n\n\n

[00:48:28] Saumya Majumder: No problem. Thanks for having me.

\n
\n\n\n\n

On the podcast today we have Saumya Majumder.

\n\n\n\n

Saumya Majumder is the lead software engineer at BigScoots, with a deep specialisation in high-performance WordPress engineering and advanced Cloudflare-powered architectures. Throughout his career, Saumya has built large-scale systems ranging from custom caching engines to migration tools, worker-based automations, and edge computing solutions. He’s played a pivotal role at BigScoots, overseeing enterprise customers and developing scalable, developer-friendly solutions that push the boundaries of hosting for WordPress.

\n\n\n\n

We begin our conversation with a timely discussion about a major Cloudflare outage that recently rippled across the Internet. Saumya explains what happened behind the scenes, the nature of these kinds of global infrastructure hiccups, and why, even with the most robust systems in place, some downtime is simply inevitable. He offers valuable insights into how BigScoots is able to mitigate these issues for their customers, even automating rapid failovers to keep sites online during outages.

\n\n\n\n

We then move on to explore some of the innovations that the team at BigScoots have been working on. They focus upon site speed and reliability. This includes CDN-level page caching, and their close integration with Cloudflare Enterprise. Saumya breaks down how this caching differs from traditional server-based caching, and how it ensures that users around the world get fast, local access to website content.

\n\n\n\n

If you’re curious about how hosting companies manage such advanced caching strategies, and how Cloudflare might fit into the hosting jigsaw, this episode is for you.

\n\n\n\n

Useful links

\n\n\n\n

BigScoots

\n\n\n\n

Cloudflare

\n\n\n\n

 Super Page Cache plugin

\n\n\n\n

Blog post about recent outage, 18th November 2025

\n\n\n\n

Cloudflare for Enterprise

\n\n\n\n

Introducing BigScoots Cache

\";s: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 Nov 2025 15: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:17;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:65:\"Open Channels FM: Open Channels FM Founder’s Podcast Tech Stack\";s: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:33:\"https://openchannels.fm/?p=112873\";s: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://openchannels.fm/open-channels-fm-founders-podcast-tech-stack/\";s: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:154:\"BobWP is back sharing his podcast gear and software tips for all podcasters, offering insights on mics, interfaces, and AI tools to streamline production.\";s: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 Nov 2025 12:45:53 +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:18;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:85:\"Open Channels FM: Why Diverse Teams and Early Accessibility Matter in Web 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:\"\";}}s:4:\"guid\";a:1:{i:0;a:5:{s:4:\"data\";s:33:\"https://openchannels.fm/?p=112138\";s: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://openchannels.fm/why-diverse-teams-and-early-accessibility-matter-in-web-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:\"\";}}s:11:\"description\";a:1:{i:0;a:5:{s:4:\"data\";s:187:\"Accessibility in web dev shouldn’t be an afterthought. Involving diverse teams from the start uncovers issues early, making products better for all. Early focus on accessibility is key.\";s: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 Nov 2025 11:16: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:19;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:23:\"Matt: 3D Printing Wowza\";s: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=150682\";s: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:40:\"https://ma.tt/2025/11/3d-printing-wowza/\";s: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:915:\"

If you have ever customized your home setup, or done extra work to make the cable just so, it’s impossible not to delight in the very deep rabbit holes this person goes in 3D-printing custom holders for everything in his junk drawer. I’m in awe. It’s an ad for Bambu Lab, but honestly it’s the kind of thing I could watch all day. So satisfying. Scott Yu-Jan is someone to keep an eye on.

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

To me, this embodies the maker / hacker / creator mentality that I try to imbue in all the software I work on. How do you make it your own? One of one, but then open source it and see how it gets better.

\";s: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 Nov 2025 04:03:20 +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:20;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"WordPress.org blog: WordPress 6.9 Release Candidate 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=19373\";s: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/11/wordpress-6-9-release-candidate-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:8009:\"

The third Release Candidate (“RC3”) for WordPress 6.9 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 RC3 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.9 is the highest quality possible.

\n\n\n\n

You can test WordPress 6.9 RC3 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 RC3 version (zip). and install it on a WordPress website.
Command LineUse this WP-CLI command:
wp core update --version=6.9-RC3
WordPress PlaygroundUse the 6.9 WordPress Playground instance to test the software directly in your browser. No setup is required – just click and go!
\n\n\n\n

The scheduled final release date for WordPress 6.9 is December 2, 2025. The full release schedule can be found here. Your help testing RC versions is vital to making this release as stable and powerful as possible.

\n\n\n\n

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

\n\n\n\n

What’s in WordPress 6.9 RC3?

\n\n\n\n

Want to look deeper into the details and technical notes for this release? Take a look at the WordPress 6.9 Field Guide. For technical information related to issues addressed since RC2, you can browse the following links:

\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 get involved with 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 crucial to the development of any software. It’s also a meaningful way for anyone to contribute.

\n\n\n\n

Your help testing the WordPress 6.9 RC3 prerelease is key to ensuring that the final 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.9. 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/RC 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

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.9 prereleases. If you haven’t yet, please conclude your testing and update the “Tested up to” version in your theme and plugin readme files to 6.9.

\n\n\n\n

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

\n\n\n\n

Test on your hosting platforms

\n\n\n\n

Web hosts provide vital infrastructure for supporting WordPress and its users. Testing on hosting systems helps inform the development process while ensuring that WordPress and hosting platforms are fully compatible, free of errors, optimized for the best possible user experience, and that updates roll out to customer sites without issue.

\n\n\n\n

Want to test WordPress on your hosting system? Get started with configuring distributed hosting tests here.

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

\n\n\n\n

An RC3 haiku

\n\n\n\n

Some folks make money,

\n\n\n\n

some folks make time to travel,

\n\n\n\n

and we Make WordPress.

\n\n\n\n

Props to @akshayar, @davidbaumwald, @westonruter, @ellatrix, @mobarak and @tacoverdo for proofreading and review.

\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, 25 Nov 2025 15:33: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:10:\"Amy Kamala\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:28:\"Matt: Jeff Dean AI Club talk\";s: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=150672\";s: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/11/dean-talk/\";s: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:402:\"
\n\n
\n\n\n\n

There’s a new video with Jeff Dean talking at the Stanford AI Club, only 2k views so far, he’s half of the pair I blogged the other day.

\";s: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 Nov 2025 05:05: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: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:22;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:22:\"Matt: Vogelstein on AI\";s: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=150650\";s: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:39:\"https://ma.tt/2025/11/vogelstein-on-ai/\";s: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:580:\"

Fred Vogelstein writes on Crazy Stupid Tech: Boom, bubble, bust, boom. Why should AI be different? “To us what’s happening is obvious. We both covered the internet bubble 25 years ago. We’ve been writing about – and in Om’s case investing in – technology since then. We can both say unequivocally that the conversations we are having now about the future of AI feel exactly like the conversations we had about the future of the internet in 1999. “

\";s: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, 23 Nov 2025 07:55: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:23;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:18:\"Matt: Friday Links\";s: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=150639\";s: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:35:\"https://ma.tt/2025/11/friday-links/\";s: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:1237:\"\";s: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 Nov 2025 07:58: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: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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:99:\"Gutenberg Times: State of the Word, WordPress 6.9, Carousel Block and more — Weekend Edition #350\";s: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=42877\";s: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:103:\"https://gutenbergtimes.com/state-of-the-word-wordpress-6-9-carousel-block-and-more-weekend-edition-350/\";s: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:23227:\"

Hi there,

\n\n\n\n

Munich got hit with the first snow for this Winter. It started slowly on Friday morning, and by the afternoon the flakes got larger and the white started to cover tree branches, roofs and cars. It might all be gone by tomorrow, though, as the weather forecast shows -7 °C (19.4 °F) with sunshine.\"❄\" I am still a Floridian Weather whimp, but I like the snow covering the overcast gray of an Autumn day. I just won’t go outside if I can help it.

\n\n\n\n

WordPress 6.9 is almost there. If you need a full run down of the changes in the block editor, I’ve got you covered with the WordPress 6.9 Source of Truth, with screenshot and videos. It clocks in at 5,200+ words. The table of contents as well as the in-post tags will help you navigate it. And I am always here to answer your questions.

\n\n\n\n

But wait there is more below,

\n\n\n\n

Have a fabulous weekend, and if you are in the Northern Hemisphere, stay warm.

\n\n\n\n

Yours, \"💕\"
Birgit

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

Developing Gutenberg and WordPress

\n\n\n\n

First-time release lead Jonathan Bossenger worked on the Gutenberg 22.1. version. In his release post What’s new in Gutenberg 22.1? (18 November, 2025) he highlighted two major block updates and a performance improvement for the image block.

\n\n\n\n
    \n
  1. New Tabs block
  2. \n\n\n\n
  3. HTML block updates
  4. \n\n\n\n
  5. Image prefetching when expanding images in the editor
  6. \n
\n\n\n\n
\n\n\n\n
\"Highlight
\n\n\n\n

WordPress 6.9 Release Candidate 2 was released this week. December 2 will be here soon enough for the final release.

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

Joe Dolson published a list of all the Accessibility Improvements in WordPress 6.9. More Dev Notes can be perused on the Make Blog

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

Sarim Javaid, Digital Ocean posted WordPress 6.9: What’s new, release date, features, and why it is important for your site on the Cloudways blog. “You’ll get faster load times, more streamlined site management, and new developer tools like APIs and automation features. Also, teams will benefit from block-level commenting for better collaboration” he wrote.

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

In this week’s stream, Jonathan Bossenger dives into testing WordPress 6.9, specifically focusing on the DataViews functionality. He starts by setting up his live stream, organizing processes, and installing necessary updates. Then, he explores the JavaScript packages involved, particularly the React components that power admin pages. Join him as he fumbles around, copy-pastes examples, and strives to get a basic implementation of DataViews working. If you enjoy watching someone learn through trial and error, give this video a like and subscribe.

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

JuanMa Garrido livestreamed about What’s new for Devs in Wp 6.9: Interactivity API

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

Upcoming WordPress 6.9 events

\n\n\n\n

Maruti Mohanty plans a Workshop for November 27 at 10am UTC on How to Prepare Your WordPress Site for WordPress 6.9? via Learn WordPress meetup.

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

Also on November 27 at 12:00 UTC, JuanMa Garrido and Jonathan Bossenger invite you to the Developer Hours: WordPress 6.9 Developer Updates. A second edition, covering updates to Block Bindings and Interactivity API.

\n\n\n\n

If you missed the first edition, it’s now available on WordPressTV: Developer Hours: WordPress 6.9 DataViews/DataForm & Abilities API.

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

The State of the Word, Matt Mullenweg‘s annual keynote will be live streamed from San Francisco on December 2 at 8pm UTC. For the first time, we are celebrating SOTW alongside the official release of WordPress 6.9 on the same day. Expect demos, and even get an early preview of the future beyond for WordPress. All followed by a Q & A with Matt Mullenweg.

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

\"🎙\" The latest episode is Gutenberg Changelog #124 – Gutenberg 22.0 and WordPress 6.9 with Ellen Bauer, project lead at Automattic.

\n\n\n\n
\"Gutenberg
\n\n\n
\n
\n\n
\n
\n\n\n\n
\n\n\n\n

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

\n\n\n\n

Justin Tadlock just dropped his awesome new Media Data WordPress Plugin, which is all about pulling in embedded metadata from your uploaded media files—think EXIF data, ID3 tags, camera settings, dimensions, and a lot more. The plugin comes with two blocks: one to hold everything together and others to showcase specific bits of metadata. Plus, it works seamlessly with WordPress 6.9’s block bindings, so you can easily make custom connections between blocks. It’s up on GitHub while waiting for approval in the directory.

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

Core contributors are getting ready to move the Post Editor into an iframe in WordPress 7.0. This change is all about giving the editing experience a fresh, modern vibe and cutting down on distractions from admin styles and those third-party scripts. Aki Hamano, a core committer, laid out the plans last week in a developer note: Preparing the Post Editor for Full iframe Integration

\n\n\n\n

Rae Morey, The Repository, reports on the various concerns from other contributors in Core Contributors Prepare to iframe the Post Editor in 7.0, Prompting Backward-Compatibility Concerns.

\n\n\n\n

As a follow-up, Aki Hamano started a discussion on GitHub on Documentation to help with the migration to Block API version 3 #73138, with comments from Ella van Durpe and Riad Benguella with ideas on how to navigate the migration.

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

In her post Introducing Accelerate: Redefining Experimentation in WordPress, Gianna Legate, Head of Content at Human Made, explores how the new Accelerate platform bridges WordPress and modern marketing. The plugin enables marketers to run A/B tests, personalize content by geography, and promote high-performing blocks directly within the editor, shifting WordPress from content-centric publishing toward data-driven customer engagement without requiring external tools or custom development work. The premium plugin is free for up to one million monthly page views.

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

Hans-Gerd Gerhards announced an update to his plugin Dynamic Header & Navigation for Block Themes, a lightweight WordPress plugin developed specifically as a navigation solution for most Block Themes. “I am very pleased that my plugin now has more than 100 active installations.” he wrote on LinkedIn.

\n\n\n\n
\n\n\n\n\n\n\n\n
\"Goundwork
\n\n\n\n

Theme Development for Full Site Editing and Blocks

\n\n\n\n

Ellen Bauer‘s talk at WordCamp Kansai is now available on WordPressTV: Building a WooCommerce Store Using Block Themes and AI Site Building. In this hands-on session, you’ll learn how to use a lightweight starter block theme and AI site-building tools to create a fully editable WooCommerce store design that you can refine directly in the WordPress editor.

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

Rich Tabor continues his explorations. The second post is all about the Application Menu. “An application menu would act as a consistent anchor—an always-present spot where you can see the full range of available actions. Not a replacement for other controls, and not a move to strip the interface down.” he wrote.

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

\n\n

The previous years are also available:
2020 | 2021 | 2022 | 2023 | 2024

\n\n\n

Ryan Welcher livestreamed part 3 of his quest to use every Interactivity API feature in one site

\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\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

Featured Image:

\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:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Fri, 21 Nov 2025 23: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: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:25;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:100:\"WordPress Foundation: Recognizing the 2025 WordCamp Asia Kim Parsell Memorial Scholarship Recipients\";s: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:42:\"https://wordpressfoundation.org/?p=1206507\";s: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:121:\"https://wordpressfoundation.org/news/2025/recognizing-the-2025-wordcamp-asia-kim-parsell-memorial-scholarship-recipients/\";s: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:4896:\"

In 2015, the WordPress Foundation established an annual memorial scholarship to honor the memory of Kim Parsell, a beloved and influential contributor to the WordPress community. Kim’s legacy continues to inspire connection, mentorship, and inclusivity across WordPress.

\n\n\n\n

In 2024, the Kim Parsell Memorial Scholarship was expanded to include WordCamp Asia and WordCamp Europe, reflecting Kim’s dedication to inclusivity and empowering more contributors to engage in global collaboration.

\n\n\n\n

This year, the scholarship for WordCamp Asia was awarded to Zeel Thakkar and Pooja Derashri. Two recipients were selected this year because Pooja could not attend WordCamp US in the year she was selected for the scholarship.

\n\n\n\n

Remembering Zeel Thakkar

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

Zeel Thakkar (@zeelthakkar) of Ahmedabad, India, brought energy, leadership, and kindness to everything she did. A talented freelance WordPress developer at Jpadweb, Zeel’s journey began with a simple internship that evolved into a lifelong passion for development and community building.

\n\n\n\n

Within the WordPress Ahmedabad community, Zeel was a tireless organiser, helping lead events including WordCamp Ahmedabad 2023 and Do_Action 2024. Her work united contributors, fostered collaboration through regular meetups, and upheld her belief in empowering women in technology.

\n\n\n\n

Zeel’s technical contributions were equally significant. She played a key role on the WordPress 6.7 Testing Team, helping ensure the platform’s ongoing stability, and contributed to the Training Team to create educational resources for learners across the world. Her dedication to professional growth and commitment to inclusivity continue to inspire those who had the honor of working alongside her. Zeel’s passing is a tremendous loss, and she will be remembered with deep respect and gratitude.

\n\n\n\n

Celebrating Pooja Derashri

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

Pooja Derashri (@webtechpooja), from Ajmer, India, first started using WordPress in 2013 and went on to co-found WPVibes, a WordPress plugin development agency, with her husband Anand. While she began her career as a developer, she has since expanded her expertise into SEO and Content Marketing, helping shape WordPress projects holistically.

\n\n\n\n

Pooja’s contribution journey began in 2017 with the WPTV and Polyglots teams, where she helped localize content and make WordPress more accessible to Hindi speakers. Since 2021, she has served as a Global Translation Editor for Hindi, and in 2019 joined the WordPress Training Team. As a Co-Team Rep, Pooja now helps lead efforts behind LearnWP, creating educational materials that support trainers and learners worldwide.

\n\n\n\n

Both Zeel and Pooja embody the spirit of dedication, generosity, and empowerment that the Kim Parsell Memorial Scholarship was created to celebrate. Their contributions continue to enrich the WordPress community and inspire others to share knowledge and support one another.

\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 Nov 2025 21:07:42 +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:\"Harmony Romo\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:46:\"Gutenberg Times: WordPress 6.9 Source of Truth\";s: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=42536\";s: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/wordpress-6-9-source-of-truth/\";s: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:105398:\"

Welcome to the Source of Truth for WordPress 6.9!

\n\n\n\n

Before you dive headfirst into all the big and small changes and pick your favorites, make sure to read these preliminary thoughts about this post and how to use it. If you have questions, leave a comment or email me at pauli@gutenbergtimes.com.

\n\n\n\n

Huge Thank You to all collaborators on this post: Anne McCarthy, Sarah Norris, Ella van Durpe, Ben Dwyer, Jonathan Bossenger, Justin Tadlock, Dave Smith and a lot more. It’s takes a village…

\n\n\n\n
\n

Estimated reading time

\n\n\n
22–33 minutes
\n\n\n

at

\n\n\n
5,126 words
\n\n\n\n

Table of Contents

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

Changelog

\n\n\n\n

Any changes are cataloged here as the release goes on.

\n\n\n\n
    \n
  • 11/25/2025 \n
      \n
    • Added Dev Note on miscellaneous block editor changes
    • \n\n\n\n
    • Added link to the Field Guide
    • \n
    \n
  • \n\n\n\n
  • 11/24/2025\n
      \n
    • Added Dev Notes on HTML API updates and pn PHP 8.5 Support
    • \n
    \n
  • \n\n\n\n
  • 11/21/2025 \n\n
  • \n\n\n\n
  • 11/20/2025\n\n
  • \n\n\n\n
  • 11/19/2025: \n
      \n
    • Added credits
    • \n\n\n\n
    • Added tags to headings,
    • \n\n\n\n
    • Added Dev Notes on WordPress email, UTF-8 support
    • \n\n\n\n
    • Added horizontal scroll bar feature to Math Block
    • \n\n\n\n
    • Fixed some typos.
    • \n
    \n
  • \n
\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.9.

\n\n\n\n

WordPress 6.9 introduces several new features and performance enhancements.

\n\n\n\n

Key new features include:

\n\n\n\n
    \n
  • Collaborative Feedback and Content Control: Block-level Notes facilitate team feedback, allowed blocks UI, Abilities API, visual drag and drop, binding blocks to external controls.
  • \n\n\n\n
  • New Blocks: Discover Accordion, Terms Query, Math, and Time to Read blocks.
  • \n\n\n\n
  • Typography Enhancements: Benefit from new text-fitting typography.
  • \n\n\n\n
  • Dashboard-wide Command Palette: The Command Palette will help users streamline their workflow across WordPress Admin pages.
  • \n
\n\n\n\n

Performance improvements include:

\n\n\n\n
    \n
  • Optimized Loading: On-demand block-style loading and faster emoji detection.
  • \n\n\n\n
  • Efficient Scheduling: Optimized cron execution.
  • \n
\n\n\n\n

Furthermore, WordPress 6.9 lays the groundwork for future AI integration with the new Abilities API, which enables secure automation through machine-readable WordPress capabilities.

\n\n\n\n

WordPress 6.9 is set to be released on December 2, 2025.

\n\n\n\n

Of note, this release includes Gutenberg plugin versions 20.5 – 21.9.

\n\n\n\n

Important links:

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

Assets

\n\n\n\n

In this Google Drive folder you can view all assets 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
    \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
  • [all]: broad impact to every kind of WordPress user.
  • \n
\n\n\n\n

How can you use these? Use your browser’s Find capability and search for the string including the brackets. Then use the arrows to navigate through the post from one result to the next.

\n\n\n\n
Short video on how to use the tags to navigate the post. \n

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

Command Palette everywhere [all]

\n\n\n\n

A couple of years ago the Command Palette was first released for the Site Editor. It provides content creators and administrators with a quick search and command execution tool. Invoked by Ctrl+K or Cmd+K. It is now available from any admin screen and helps streamline content creation as well as administering a WordPress site. It provides shortcuts to places otherwise only available by navigating multiple menu levels deep.

\n\n\n\n
\"Command
\n\n\n\n

Technically, this change extracts navigation commands from `@wordpress/edit-site` to `@wordpress/core-commands`, making them universally accessible. This architectural shift sets the foundation for admin-wide command integration in WordPress 6.9 and beyond, potentially reducing the need for repetitive clicking through admin menus.

\n\n\n\n
    \n
  • For developers the new useCommands hook was introduced. (71603)
  • \n
\n\n\n\n

Block editor updates

\n\n\n\n

Notes [all]

\n\n\n\n

Asynchronous collaboration comes to WordPress via the new Notes feature and rings in the 3rd Phase of Gutenberg. Site owners, Editors and Authors can collaborate by leaving comment directly on the post or page, attached to the blocks in the editor. The notes are threaded, resolveable, and can be reopened as well. Add an access notes from the Block toolbar and via the sidebar. Post authors will receive email notification when notes are added to the content.

\n\n\n\n
\"Collaborative
\n\n\n\n

Notes are by default enabled for Posts and Pages. They can be enabled also for other content post types via the `register_post_type` function.

\n\n\n\n
PHP
register_post_type( \'book\', array(\n	\'label\' => \'Books\',\n	\'public\' => true,\n	\'show_in_rest\' => true,\n	\'supports\' => array(\n		\'title\',\n		\'editor\' => array( \'notes\' => true ),\n		\'author\',\n	),\n) );\n
\n\n\n\n

More details on handling Notes programmatically can be found in the Dev Note: Notes feature in WordPress 6.9.

\n\n\n\n

Visual Drag & Drop \"🐉\" \"💧\" [end user]

\n\n\n\n

Drag-and-drop just got smarter. Blocks now show live visual feedback as you reposition them, making layout building more intuitive and precise. You’ll see exactly where elements land before releasing, accelerating the creative process. (67470). Currently, this only works for single blocks. Drag and Drop of multiple blocks is slated for WordPress 7.0.

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

UI for managing allowed Blocks in Templates and Patterns. [end user][site admin]

\n\n\n\n

WordPress now makes managing allowed blocks simpler with a new UI tucked in Advanced settings. Previously, developers had to edit block markup directly in code view—not user-friendly. This updates makes things easier for website admins, theme builders, and agencies enforcing specific block rules in patterns and templates. While agencies already handled this via code, the new interface offers a nicer interaction model. It’s part of WordPress’s broader mission: letting users build complex sites without touching code at all. (72191)

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

Hide and Show Blocks [end user][site admin]

\n\n\n\n

WordPress 6.9 introduces long-awaited control to hide blocks in the editor while preserving their structure within templates. This initial implementation provides content creators and designers with the ability to manage blocks that are not always displayed, such as seasonal content or conditional elements.

\n\n\n\n

Instead of deleting and recreating blocks, users can now simply toggle their visibility, retaining all settings. This foundational feature paves the way for more sophisticated conditional display options in future releases, potentially including role-based or time-based visibility controls. (71203)

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

Additional CSS control moved
[end user][site admin] [theme author]

\n\n\n\n

Theme builders might go searching for the Additional CSS controls. They were moved into the ellipsis menu in the header of the Styles page on either side of the screen (71550)

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

Copy Styles keyboard shortcut
[end user][site admin]

\n\n\n\n

A new keyboard shortcut helps with pasting styles from one block to another and can speed up content creation workflows: cmd/ctrl + options/alt + v (69196)

\n\n\n\n

Block Style Variations in Style Book
[end user][site admin] [theme author]

\n\n\n\n

To make the Stylebook even more comprehensive, it now surfaces block styles for core blocks as well as custom blocks. This makes it possible to change block style variations site-wide in one screen (70448).

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

The Starter Patterns modal for all post types. [theme author] [plugin author][enterprise]

\n\n\n\n

With WordPress 6.9, contributors addressed a limitation in the starter pattern modal, which previously appeared exclusively when creating pages. This restriction is now removed from the `StartPageOptions` component, enabling the modal to display across all post types where patterns exist. The fix resolves a regression introduced in earlier pulls, expanding design flexibility for WordPress content creators working with diverse content structures.(69753)

\n\n\n\n

Why iframe the Post Editor?
[plugin author][enterprise]

\n\n\n\n

The process to restructure how the WordPress post editor works started a few years ago. WordPress 6.9 begins transitioning the editor into this isolated iframe, with full completion coming in WordPress 7.0. Think of an iframe like a sandbox—a separate container within a webpage. Currently, the editor runs in the same space as WordPress’s admin interface, causing styling conflicts. This separation prevents admin styles from interfering with content editing, making the editor preview match what readers actually see. Plugin developers need to update older blocks to work with this new setup or they might stop functioning properly.

\n\n\n\n

The Dev note Preparing the Post Editor for Full iframe Integration has more details. And in the comments many immediate questions have been answered.

\n\n\n\n

Relevant bug fixes for backward compatibility checks [theme author] [plugin author][site admin]

\n\n\n\n

Certain bugs have been around for a while and developers often have found work arounds. Now that those bugs are fixed, it might be possible that the work around don’t work any more and it’s feasible to remove it.

\n\n\n\n
    \n
  • Comments Pagination: Remove unwanted bottom margin from links. (70360)
  • \n\n\n\n
  • Remove screencast.com embed block variation. (70480)
  • \n\n\n\n
  • Tag Cloud: Remove unnecessary full-width padding. (69725)
  • \n\n\n\n
  • HTML Block: Remove space below textarea. (70055)
  • \n\n\n\n
  • Fix : Calendar block: Colors do not change between global styles and theme.json. (70184)
  • \n\n\n\n
  • Image Block: Preserve line breaks in media caption. (70476)
  • \n\n\n\n
  • Search Block: Move search setting to inspector. (70144)
  • \n
\n\n\n\n

New Blocks [all]

\n\n\n\n

WordPress 6.9 brings six new blocks to WordPress editor: an Accordion block and its nested InnerBlocks, a Time-to-read block that also can show the word count of a post or page, the Term Query block, and the Math block to display mathematical formulas in science and essay posts. Comment handling also became easier with two more blocks, Comment Count and Comment Link.

\n\n\n\n

Accordion Block

\n\n\n\n

The Accordion Block has been long awaited and it is now available to all WordPress users. It’s a nested structure using Accordion Block, Accordion Item, Accordion Heading and Accordion Panel blocks.

\n\n\n\n

An Accordion block has multiple Accordion Items, each comprising of a Accordion Heading + Icon and an Accordion Panel with the content.

\n\n\n\n

The default styling is minimal and opens a lot of design possibilities for theme builders to cover all the use cases. On the Developer blog you’ll find a tutorial of the various methods for styling an Accordion block, using the example of an FAQ page (64119)(71222)(71388).

\n\n\n\n

The Snippets section of the Developer Blog shows how to add Schema.org microdata for Accordion block FAQs

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

Term Query Block

\n\n\n\n

Traditionally, creating category and tag pages has been complex and required custom queries and workarounds. The new Terms Query block offers a built-in way to display and organize categories and tags, similar to how the Query block manages posts. (70720)

\n\n\n\n

There are also supporting blocks:

\n\n\n\n
    \n
  • Term Template block
  • \n\n\n\n
  • Term Name block
  • \n\n\n\n
  • Term Count block
  • \n
\n\n\n\n

Together with the already existing Term Description block, this additional support for display of categories or tags is particularly useful for directory and magazine sites who provide content filters and subpages for their readers. The interface provides an `order` and `order-by` sorting in a single dropdown. All blocks have the necessary design tools for styling and the Term Count block also has a toggle to make it a link. For those working extensively with taxonomies, the ongoing hierarchy discussion outlines future enhancements to taxonomy handling in WordPress.

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

Time to Read Block

\n\n\n\n

The Time to Read block, available in the Gutenberg plugin for a long time went through an extended accessibility review before it was added to WordPress Core.

\n\n\n\n

It now has a toggle control to display a range of time rather than a fixed average reading time. It also comes with a variation to display a word count for the post or page it’s used on (71606) (71841).

\n\n\n\n
\"\"
\n\n\n\n
\"Time
\n\n\n\n

Math Block

\n\n\n\n

With the Math Block content creators can now add mathematical formulas in LaTeX syntax to their post and pages. The LaTeX syntax can also be used together with the inline Math format.

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

Longer formulas are handled with a horizontal scrollbar.

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

Two new comment blocks help theme builders to handle comment count and comment links separately. Both blocks have been available in the Gutenberg plugin for a few years and only for the Site editor. Earlier this year, they came out of experimentation and were made available for all editor screens. So now a content creator can for instance include a links to the comment section on top of the post and be more deliberate in allowing access to comments only on certain posts.

\n\n\n\n
\"Comment
\n\n\n\n

Updates to existing blocks

\n\n\n\n

For WordPress 6.9, contributors standardized most blocks’ Inspector settings to use the ToolsPanel component, bringing visual consistency across the editor. The shift grants users granular control over displayed settings while simplifying how developers inject additional options into existing groups. The ToolsPanel aligns Inspector controls with the Styles sidebar, already leveraging the component extensively, creating a cohesive authoring experience. (67813)

\n\n\n\n

Stretchy Text for Heading and Paragraph blocks. [all]

\n\n\n\n

Both Heading and Paragraph blocks now support a new “Stretchy” variation that stretches text to the full width of its container. The transform tool from the button tools bar allowing users to convert text into this stretchy format.

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

Content creators can find these variations also in the Block inserter or via the Slash command.

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

Stretchy Text offers designers and content creators an additional creative tool, opening up numerous possibilities for visually appealing text, especially when paired with suitable fonts.

\n\n\n\n

Developers can add support for this feature to any Custom text block via block.json. (73148)(73056) (73067)(72923)

\n\n\n\n
JSON
{\n	"supports":{\n		"typography":{\n				"fitText": true,\n		}\n	}\n}\n
\n\n\n\n
\n \n \n \n
\n \n\n\n

Button Block [end user] [siteadmin]

\n\n\n\n

Button Block now sports HTML element selection in Advanced settings, letting creators choose between semantic <a> links and true <button> elements. This tackles accessibility headaches where users mistakenly treat buttons as links, confusing screen readers. The dropdown educates users about proper usage, empowering developers and non-coders alike to build accessible interfaces without custom code (70139).

\n\n\n\n

Cover Block improved video handling [all]

\n\n\n\n

The Cover Block now supports poster images for videos, enhancing accessibility for users with slow internet or mobile devices. These images can be easily added by dragging and dropping the file onto the Poster Image control, streamlining the post creation process (70816) (71039) (70939).

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

Details Block [end user][site admin][plugin author]

\n\n\n\n

The Formatting features are now enabled for the Details Block, similar to the Paragraph block. Users can now use special formatting like Strikethrough, Sub or Superscript, and highlighting. This also opens up the list to be extended via plugins.

\n\n\n\n

Gallery Block [all]

\n\n\n\n

This next WordPress version adds the support for gallery-wide aspect ratio setting to the Gallery Block. User can now set the same aspect ratio for all images in the gallery with one click from the sidebar. (71116) (72104).

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

Theme developers can control the availability via theme.json. The code snippet shows an example of removing the default choice defaultAspectRatios and only offering two choices in the editor.

\n\n\n\n
JSON
"settings":{\n        "blocks" {\n            "core/gallery":{\n                "dimensions":{\n                    "defaultAspectRatios":false,\n                    "aspectRatios": [\n                        {\n                             "name": "Square - 1:1",\n                             "slug": "square",\n                             "ratio": "1"\n                        },\n                        {\n                             "name": "Wide - 16:9",\n                             "slug": "16-9",\n                             "ratio": "16/9"\n                        }\n                  ]\n             }          \n         }\n    }\n
\n\n\n\n

Heading Block CSS specificity fix [all]

\n\n\n\n

WordPress 6.9 fixes a specificity issue with the Heading block’s background padding. Previously, padding styles applied to headings with backgrounds were affecting other blocks that use heading elements, such as the Accordion Heading block. This fix ensures that background padding is only applied to actual Heading blocks.

\n\n\n\n

The CSS selector for applying padding to headings with backgrounds has been made more specific. The selector now targets .wp-block-heading.has-background instead of just heading element tags (h1, h2, etc) with the .has-background class.

\n\n\n\n

Dev note: Heading Block CSS Specificity Fix in WordPress 6.9

\n\n\n\n

Navigation Block [all]

\n\n\n\n

The Navigation block in this WordPress release has been significantly improved. Builders can now find the create page functionality directly from the link UI dropdown and the process of creating a page is streamlined by an additional “publish immediately” checkbox. (71188)(71487)

\n\n\n
\n
\"navigation
\n
\n\n\n
\"Navigation
\n\n\n\n

Similarly the button block inside the navigation block also has the option to create a new page. It’s a slightly different approach, but it helps with streamlining site building work. (69368)

\n\n\n\n
\"Navigation
\n\n\n\n

Site builders can now customize aria-labels independently of menu titles, which is great for accessibility. The text box is located under Advanced > Menu Name (66935)

\n\n\n\n
\"Customize
\n\n\n\n

The hamburger icon now consists of individual SVG lines, opening up more styling and animation possibilities. Plus, the automatic panel expansion for Navigation options in site editing makes the workflow smoother. (71791)(56346) (69343

\n\n\n\n

To improve the robustness of the Navigation, the Navigation Link Block is now creating the URL dynamically and even if the slug of the page changes the link will be automatically updated.(72422) A similar mechanism also was applied to the Navigation Submenu block.

\n\n\n\n

The submenu control of the background is now much easier. A new slider control for the overlay helps with the design. (69379)

\n\n\n\n
\"Navigation
\n\n\n\n

In template part view, a new button Edit Navigation helps users to update Navigation block settings and menu items directly from this view.

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

Query Loop Blocks [all]

\n\n\n\n

Blocks primarily used in a Query Loop context received a few quality-of-life enhancements and accessibility controls.

\n\n\n
\n
\"content
\n
\n\n\n

Content Block

\n\n\n\n

The Content block in WordPress 6.9 now features a `tagName` selector in its Advanced Settings. This allows theme builders to replace the default div wrapper with semantic HTML elements (like main, section, or article), improving accessibility, SEO, and content structure. This powerful tool enhances how blocks align with web standards. (70698)

\n\n\n\n

Date Block supports custom dates.

\n\n\n\n

The Date block has undergone significant enhancements. It now supports custom dates, and its existing Post Date and Last Modified Date variations have been updated to utilize Block Bindings. This change involved creating a new binding source, core/post-data, which exposes the publish date as date and the last modified date as modified for any given post (70585).

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

Query Title get Post Type label

\n\n\n\n

The Query Loop block now supports a new Post Type Label variation. This feature enables users to display the post type of the current item within the block, which is especially helpful for showcasing the post type name when creating custom post type archive templates. (71167)

\n\n\n\n
\"Query
\n\n\n\n

Query Total

\n\n\n\n

The total number of query results return are displayed via the Query Total block. In WordPress 6.9, this block received color controls for styling. (69500)

\n\n\n\n

RSS Block [end user]

\n\n\n\n

The RSS Block is a block to display another website’s RSS feed in a post or template. This version holds two small updates: An added option to display the links in a new tab or window and to control the `rel` attributes. RSS feeds from third-party sources sometimes include HTML entities in their titles. In a bug fix, the RSS Block now displays titles correctly.

\n\n\n\n

Separator Block
[theme author][site admin][plugin author]

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

A small update to the Separator block opens the styling options for designers: The HTML element can now be changed from a `<hr>` to a `<div/>` tag in not only increasing the range of design option but also accessibility. (70185)

\n\n\n\n

Social Icons Block [developers][enterprise]

\n\n\n\n

The update to the Social Icons Block enables now extenders to register custom Social Icons variations. This way, any group of Social Icons that are relevant to the site owner can be created and used in the content, for instance icons of various Podcast directories, or to add icons for payment systems not available in core.

\n\n\n\n

On the WordPress Developer Block developers will find a tutorial on how to register their own social media icons. Plugin developers can now remove existing icons and register their own. (70261)

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

A bug fix now makes sure the social icons honor theme.json styles for typography. (70380)

\n\n\n\n
JSON
"core/social-links": {\n		"typography": {\n			"fontSize": "var(--wp--preset--font-size--x-large)"\n		}\n},
\n\n\n\n

Table Block [end users][site admin]

\n\n\n\n

The Table block received more robust handling of Markdown table parsing, specifically retaining alignment from a Markdown table.

\n\n\n\n

| A – Left | B – Centered | C – Right | D – None |

\n\n\n\n

| :——- | :———-: | ——–: | ——– |

\n\n\n\n

| 100 | 150 | 200 | 250 |

\n\n\n\n

| 200 | 250 | 300 | 350 |

\n\n\n\n

| 300 | 350 | 400 | 450 |

\n\n\n\n

| 400 | 450 | 500 | 550 |

\n\n\n\n

| 500 | 550 | 600 | 650 |

\n\n\n\n

The above Markdown example parsed into the block editor canvas is automatically converted to the Table block.

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

Video Block [all]

\n\n\n\n

The Video Block can now handle multiple language tracks with the option to set one as the default track. It’s also possible to add a poster image to the video block to improve accessibility for visitors with slow internet connections (71039) (70939)(70227).

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

Theme.json and Global Styles
[developers][enterprise][site admin]

\n\n\n\n

Form elements in theme.json

\n\n\n\n

WordPress theme development reaches new enrichment with theme.json support for form element styling. Developers can now target text-based controls and select/dropdown elements through the styles.elements property, defining colors, borders, and typography directly in Global Styles.

\n\n\n\n

This eliminates custom CSS dependencies, allowing search forms, comment forms, and plugin-generated forms to automatically inherit the site’s design system. (34198) (70378) (70379) Below snippet shows an example for the textInput element.

\n\n\n\n
JSON
"elements": {\n	"textInput": {\n			"border": {\n				"radius": "0",\n				"style": "solid",\n				"width": "1px",\n				"color": "red"\n			},\n			"color": {\n				"text": "var(--wp--preset--color--theme-2)"\n			},\n			"typography": {\n				"fontFamily": "var(--wp--preset--font-family--inter)"\n			}\n		}\n}\n
\n\n\n\n

An additional resource is the tutorial on the WordPress Developer blog: How WordPress 6.9 gives forms a theme.json makeover

\n\n\n\n

Border Radius presets supported

\n\n\n\n

It’s now possible to define border radius presets in the `theme.json` for your theme. The user experience changes slightly with the numbers of presets: up until eight, a user can enable the border radius along a slider. For nine and more present the user uses a drop-down select menu. Users can always access custom value input through the custom button to the right of the control.

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

As an example you can add the following to the `settings` property of your `theme.json` file. (67544). \\

\n\n\n\n
JSON
{ \n"settings"{\n	"border": {\n		"radiusSizes": [\n				{\n					"name": "Small",\n					"slug": "small",\n					"size": "2px"\n				},\n				{\n					"name": "Medium",\n					"slug": "medium",\n					"size": "4px"\n				},\n				{\n					"name": "Large",\n					"slug": "large",\n					"size": "6px"\n				}\n			]\n	}\n}
\n\n\n\n\n\n\n\n

Button element inherits typography

\n\n\n\n

With the release of WordPress 6.9, the button element defined in the default `theme.json` can inherit typographical styles from its parent. (70676)

\n\n\n\n

The full styles for the element now look like this:

\n\n\n\n
JSON
{\n	"styles": {\n		"elements": {\n			"button": {\n				"typography": {\n					"fontSize": "inherit",\n					"fontFamily": "inherit",\n					"fontStyle": "inherit",\n					"fontWeight": "inherit",\n					"letterSpacing": "inherit",\n					"textTransform": "inherit",\n					"lineHeight": "inherit",\n					"textDecoration": "none"\n				}\n			}\n	}\n}
\n\n\n\n

A closer look at performance optimizations
[developers][enterprise]

\n\n\n\n

WordPress 6.9 speeds up your site through several technical improvements. Scripts load more efficiently with priority ordering and move to footers when appropriate. Stylesheets load only when needed, particularly in classic themes, while styles for hidden blocks are omitted. The inline style limit increased to 40K. A new optimization system enables previously impossible efficiency gains. Database queries, UTF-8 processing, and cron tasks all improved. The Video block also eliminates layout shifts. Overall: more efficient performance across the board.

\n\n\n\n

Details are in this Dev Note: WordPress 6.9 Frontend Performance Field Guide.

\n\n\n\n

Improved accessibility across Core and Block editor

\n\n\n\n

WordPress 6.9 delivers substantial accessibility enhancements across Core and Gutenberg, implementing 33 Core improvements and 44 Gutenberg refinements. Core updates address administration interfaces, customizer tools, login and registration workflows, media library functionality, and bundled themes.

\n\n\n\n

Key changes include enhanced screen reader notifications, improved CSS-generated content handling, refined focus management, and superior color contrast adjustments. Gutenberg advances feature new accessible blocks, component redesigns, and data views improvements ensuring consistent editor interfaces.

\n\n\n\n

Updates span Cover blocks, Site Title, Navigation elements, Button blocks, and Columns, alongside Component refinements addressing modal dialogs, font size pickers, and link controls.

\n\n\n\n

Data Views enhancements prioritize checkbox visibility and text-based actions. Editor modifications involve iframe CSS classes, pattern modal behavior, and focus management within Global Styles panels.

\n\n\n\n

These comprehensive improvements reinforce WordPress’s commitment to Web Content Accessibility Guidelines standards, enabling creators to develop inclusive content while providing developers cleaner, more accessible code foundations for theme and plugin development.

\n\n\n\n

Details on the developer note Accessibility Improvements in WordPress 6.9

\n\n\n\n

New and updated APIs for Developers
[developers][enterprise]

\n\n\n\n

Abilities API

\n\n\n\n

WordPress 6.9 features the Abilities API, a new foundational system designed to standardize how plugins, themes, and the WordPress core register and expose their capabilities. This API provides a unified, machine-readable registry of functionalities, ensuring consistent discovery, validation, and execution across various contexts, including PHP, REST API endpoints, and upcoming AI integrations.

\n\n\n\n

More resources:

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

Block Bindings API

\n\n\n\n

Updates to the Block Bindings API include enabling it for a few more core blocks. The refactor of the Date block is one of those examples. (70585)

\n\n\n\n

Another is enabling Image block’s caption data to be available for Synced Pattern Overrides. (72476).

\n\n\n\n
\"\"
The list of supported block attributes by Block Bindings API.
\n\n\n\n

The function `getFieldsList` was available via the Gutenberg plugin and has been merged into WordPress Core now. Also, the attributes UI in the Block editor is now more flexible and handles any attributes from plugin developers. [Details will be available on the DevNote.]
More details can be found in the Dev Note: Block Bindings improvements in WordPress 6.9

\n\n\n\n

DataViews and DataForm

\n\n\n\n

WordPress 6.9 marks substantial progress for DataViews and DataForm components. There are no user-facing updates. Plugin developers can use the components for their products and on admin pages.

\n\n\n\n

The Field API now handles array, boolean, email, media, date, datetime, telephone, password, URL, and color types with comprehensive validation support.

\n\n\n\n

DataViews gained sophisticated filtering with type-specific operators, infinite scroll capabilities, and improved table layouts featuring alignment and action column pinning.

\n\n\n\n

DataForm received new layout options including modal panels and card designs, alongside controls matching the expanded field types.

\n\n\n\n

The new DataViewsPicker component is a selection-focused variant of DataViews designed for building item picker interfaces. It extends the familiar DataViews API with selection management and action buttons, making it ideal for workflows where users need to browse and pick items from a dataset.

\n\n\n\n

These enhancements collectively strengthen the block editor’s data management infrastructure, enabling developers to build more capable interfaces while maintaining consistency across WordPress’s content administration.

\n\n\n\n

Dev Note: DataViews, DataForm, et al. in WordPress 6.9

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

Interactivity API

\n\n\n\n

Updates in WordPress 6.9 the Interactivity API with standardized directive IDs using triple-dash syntax, enabling multiple directives on single elements. The deprecated data-wp-ignore directive is removed. New TypeScript helpers AsyncAction and TypeYield improve asynchronous action typing. Client-side navigation improvements include dynamic stylesheet and script module loading, support for nested router regions, new attachTo options for overlays, and enhanced getServerState and getServerContext functions for proper state management across page transitions.

\n\n\n\n

The Dev Notes provide more details and code examples.

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

Output buffering for the rendered template

\n\n\n\n

WordPress 6.9 introduces a new way for plugin developers to handle HTML output, called the “template enhancement output buffer.” It standardizes output, meaning instead of plugins creating their own temporary storage for HTML, WordPress now provides a built-in system. If a plugin developer wants to use this feature, they just need to add a special wp_template_enhancement_output_buffer filter before the template is loaded. This system is designed for making small improvements or additions to a page, not for essential parts of the website’s functionality. If a website doesn’t want to use this buffer, it can disable it by filtering wp_should_output_buffer_template_for_enhancement to be false.

\n\n\n\n

For older (classic) WordPress themes, this buffer is now enabled by default. This allows them to load block styles only when needed and move them to the <head> section of the HTML, which can significantly reduce the amount of CSS on a page. Even if the page has already started loading, you can still send HTTP headers (like Server-Timing) while the output is being buffered. #64126). #43258 (PR#8412) More details are available in the Dev Note.

\n\n\n\n

Blocks: Efficiently find and traverse blocks in a document.

\n\n\n\n

The Block Processor class is now available in WordPress 6.9 to efficiently scan through and manipulate block structure in a lazy and streaming manner. For certain workloads this should dramatically improve the performance of processing code, and even more importantly, prevent out-of-memory crashes in the worst cases. [Core#9105] (61401).

\n\n\n\n

It’s an more

\n\n\n\n

Do you need to do any of the following kinds of things? Check out WP_Block_Processor!

\n\n\n\n
    \n
  • Checking if a post contains a block of a given type.
  • \n\n\n\n
  • Counting or detecting all of the kinds of blocks present in a post.
  • \n\n\n\n
  • Modifying a block of a given kind within a post, not touching any of the other blocks.
  • \n\n\n\n
  • Finding the “wrapper element” surrounding the inner blocks and adding a class name to it.
  • \n\n\n\n
  • Extract sections of a document as blocks, modify it, serialize it back, and replace the original blocks with the new HTML.
  • \n
\n\n\n\n

Dev Note: Introducing the streaming block parser in WordPress 6.9

\n\n\n\n

More Developer Notes for WordPress 6.9 release

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

There are a few dev notes in the publishing queue, including a list of accessibility updates. This post will be updated once available.

\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 Nov 2025 09:42:19 +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:27;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:74:\"Open Channels FM: New Host Nathan Wrigley Brings Chaos to Open Channels FM\";s: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:33:\"https://openchannels.fm/?p=112374\";s: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://openchannels.fm/new-host-nathan-wrigley-brings-chaos-to-open-channels-fm/\";s: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:176:\"At WordCamp Europe, BobWP and Nathan cooked up \"The Shit Show\" podcast, discussing everything from penguins to soap. Tune in for quirky insights and Nathan’s endless droning.\";s: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 Nov 2025 09:15: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:28;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:17:\"Matt: In Memoriam\";s: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=150624\";s: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:34:\"https://ma.tt/2025/11/in-memoriam/\";s: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:779:\"

While there is much to celebrate in WordPress sometimes we must also mourn.

\n\n\n\n

In a horribly tragic incident, Zeel Thakkar, a WordPress contributor and Kim Parsell Memorial Scholarship 2025 recipient, passed away on stage at WordCamp Surat. WordCamp Asia has written a beautiful memorial to her. She will be forever on our Remembers page.

\";s: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 Nov 2025 07:59:59 +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:29;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"Matt: Gemini &amp; FSD\";s: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=150613\";s: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:33:\"https://ma.tt/2025/11/gemini-fsd/\";s: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:1644:\"

Two interesting AI updates this week: It’s nice to read Andrej Karpathy’s review of Tesla’s FSD v13, as someone who was involved with creating their first self-driving efforts. I’ve only experienced v12, so very excited to try out the latest generations soon. Ubiquitous self-driving will reshape cities and save countless lives.

\n\n\n\n

On the heels of announcing a $40B investment in Texas, Google has launched Gemini 3. It’s still funny how every organization ships its org chart with the naming and accessibility of the various models it releases, but, more broadly, it is so exciting to see so much intellectual capital focused on this area, with the frontier labs leapfrogging each other every few months. Every model has a feel, and with Gemini 3 you start to feel the breadth of Google’s long investment in the space show up in interesting ways. Yet it can still be beaten in coding by an upstart like Anthropic with a fraction of Alphabet’s resources.

\n\n\n\n

What a time to be alive. Witnessing multiple excellent organizations ship the best work of their career rapidly is invigorating and inspiring; the competition drives better results, and the diffusion of new approaches is rapid. The consumer surplus that we all benefit from is just beginning to be felt; we’re maybe 1 or 2% impacted in the economy so far.

\";s: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 Nov 2025 01:22: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: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:30;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:86:\"WPTavern: #194 – Devin Walker on Leading Jetpack: Challenges, Vision, and the Future\";s: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=200819\";s: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://wptavern.com/podcast/194-devin-walker-on-leading-jetpack-challenges-vision-and-the-future\";s: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:46775:\"
Transcript
\n

[00:00:19] 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, leading Jetpack, the past, the challenges, the vision, and the future.

\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 Devin Walker. Devin’s journey in the WordPress ecosystem spans many years, with experience in development, design, marketing, and customer support. He is best known as the co-founder of GiveWP, which he built and scaled before it was acquired. During his time there, he touched a variety of prominent WordPress brands, including iThemes, Kadence, LearnDash, and The Events Calendar.

\n\n\n\n

Today Devon is starting a new role leading the Jetpack suite of services at Automattic. It’s a position with hefty responsibilities as Jetpack powers millions of WordPress sites, and integrates deeply across

\n\n\n\n

I talk with Devon about why he took on this challenge. The divisiveness and complexity surrounding Jetpack, and his vision for refocusing the plugin and simplifying its user experience.

\n\n\n\n

We start by hearing about Devon’s extensive WordPress background, and the choices he weighed up when deciding to join Automattic.

\n\n\n\n

The conversation quickly moves to the scope of Jetpack, its evolution, the struggle to be a jack of all trades master of none, and the recent efforts to bring greater focus and polish to key features like forms and SEO

\n\n\n\n

Devin gets into the organizational changes at Automattic. How Jetpack’s development teams now collaborate more fluidly with other product teams, such as WooCommerce, and the balancing act of shipping improvements to a 4 million strong user base without breaking things.

\n\n\n\n

AI emerges as a massive new frontier, and Devin shares behind the scenes insights into Jetpack’s current, and future, aI capabilities, giving us a glimpse at content creation, block building, and how AI might reshape user and developer expectations in WordPress.

\n\n\n\n

Throughout we hear about Devin’s approach to product marketing, and the need for more of it, the importance of listening to user feedback, and his plans for a more coherent and compelling Jetpack experience.

\n\n\n\n

If you’re a WordPress user wondering where Jetpack is headed, what’s working, or how AI fits into the future of site building, 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 can find all the other episodes as well.

\n\n\n\n

And so without further delay, I bring you Devin Walker.

\n\n\n\n

I am joined on the podcast by Devin Walker. Hello, Devin.

\n\n\n\n

[00:03:34] Devin Walker: Hello.

\n\n\n\n

[00:03:35] Nathan Wrigley: Very nice to have you with us. Devin has a shiny new job. Up until a few weeks ago, Devin was not an Automattician, or at least I don’t think you were maybe at any point in your past. But you are now an Automattition, and you are doing what?

\n\n\n\n

[00:03:47] Devin Walker: My official title is Artistic Director of Jetpack, but basically product owner, or head of Jetpack. Whatever you want to call it.

\n\n\n\n

[00:03:55] Nathan Wrigley: So when it comes to Jetpack, the buck stops with you. I guess that’s a pretty important role in the WordPress space over at Automattic. And if anybody hasn’t heard of you, I suppose it would be important to just lay the groundwork, who you are, what you’ve done in the past.

\n\n\n\n

I know you’ve got a long and storied history, but just maybe a one minute little short bio telling us who you are and what you’ve done.

\n\n\n\n

[00:04:14] Devin Walker: Yeah, sure. I’ve been using WordPress for all sorts of things, development, design, blogging for 16 years now. Really made my name known, I guess you would say, with Matt Cromwell. We co-founded GiveWP together, and we grew it for seven years, from late 2014, all the way through 2021, which then we were acquired by Liquid Web and was there for a little more than four years, and touched a lot of brands from there, from the iThemes rebrand to SolidWP, to Kadence, to LearnDash, Events Calendar, and of course GiveWP as well.

\n\n\n\n

And left there in early August of this year, 2025. I also built WP Rollback throughout the years, that has quite a few active installs. So yeah, that’s a bit about me. Developer, design background, definitely well-rounded with marketing and supporting customer success.

\n\n\n\n

[00:05:05] Nathan Wrigley: So you’ve had a lot of experience working with WordPress products, which I guess is what you are doing over at Automattic, because let’s just call it head of Jetpack, just to make it easy. It’s a curious title, by the way. Artistic Director is kind of a really.

\n\n\n\n

[00:05:17] Devin Walker: You know Automattic loves that title.

\n\n\n\n

[00:05:18] Nathan Wrigley: Yeah, they love that, don’t they? But head of Jetpack, and obviously you’ve got a long and storied history kind of growing products and making sure that they succeed and customer support and all of that kind of thing.

\n\n\n\n

And I feel like Jetpack, no matter what time you dropped in on Jetpack in the last, let’s say decade, I feel that half of the community felt like it needed a lot of love.

\n\n\n\n

And I’m just wondering when you were interviewing for this position or when this position was offered to you, I don’t know how that process went, but what the kind of broad brush strokes are in what you’re hoping to do over there?

\n\n\n\n

We’ll get into the weeds very much, but roughly speaking, what’s the scope of the new job? What is it that you are hoping to do in the next three, six months, years, something like that?

\n\n\n\n

[00:05:57] Devin Walker: Yeah, so when I left Liquid Web, I wrote a long, well, not long, but wrote a blog post about closing that chapter of my career and really being open to what’s coming next for me. I knew that I wanted to stay in WordPress and I was having fun building on just my own products at the time, and having full control of everything, the whole lifecycle of a product.

\n\n\n\n

And I did some work with Matt in the past on some of his nonprofit sites with Give and the VIP team and the concierge at Automattic. And so Matt called me up one day, you know, we stayed loosely in contact over the years, and said, we have some interesting opportunities here at Automattic, and one of them that I think you’d be great at is Jetpack. And in my mind I’m like, Jetpack, this is a doozy.

\n\n\n\n

But, you know, he said, give it some thought, work on your own pace and give me a call back whenever. And so I thought about it for a week and, maybe two weeks, talked to my wife about it. And really it comes down to, I was either going to start my own business again, and try to grind again and strike lightning twice, like GiveWP, and see if I could grow something and eventually sell it in five to seven years, which takes a lot of hard effort, sacrifice, money. A lot of your own money, and almost no guarantee. And the WordPress marketplace has changed so much that it’s not immediate impact right away, and you’re really out on your own.

\n\n\n\n

It worked well once, but I was in my early thirties, just turning 30, and now I’m 40. So life’s changed quite a bit for me. And Jetpack, it is a very divisive product, we can get more into that in the future, but really it came down to having that impact. Being at Automattic, a company that I’ve respected since I came into WordPress, and always wanted to go behind the scenes and work as an Automattician, so going full circle from where my career began to the opportunity and the challenge.

\n\n\n\n

If I succeed at this, it can really open some other doors at Automattic. I’m head of this product, which touches almost everything on Automattic as far as the WordPress business goes. I just thought about it long and hard, talked to Matt about it, and made sure I would have the levers for success also. And that’s what made me choose to say yes and come aboard.

\n\n\n\n

[00:08:08] Nathan Wrigley: It is kind of curious because if you just discount all of the stuff you just said about, you know, wanting to fight and build your own product up, I can well imagine how grinding that can be, and there’s no guarantee of success. It could be a real failure.

\n\n\n\n

But stepping into a huge product, I’m going to put my neck out on the line a little bit here and say, I actually can’t think of a product or a plugin, let’s go with that, in the WordPress space that tries to cover as many bases. Covered by any organisation, whether that’s a third party development team or what have you, I can’t think of one named product that tries to cover as many bases.

\n\n\n\n

And the fact that it’s divisive and I’m sure you’ll get into this, but there’s lots of room for improvement, I’m sure you’ll agree. You are walking into something exactly as you say, where there is a chance of great success here. If you pull this off, and you pull the right levers, and in six months time, a year’s time, two years time, the arc is going in the right direction, there’ll be measurable success. So really interesting.

\n\n\n\n

So what was the bit, when you had that, oh, moment, what was the bit about Jetpack which made you think long and hard about it over two weeks, as opposed to immediately saying, yeah, I’ll do it? There must have bits about the project, Jetpack as a plugin, whatever it may be. What were the bits that concerned you?

\n\n\n\n

[00:09:18] Devin Walker: Well, I’ve used it over the years on and off. I wouldn’t call myself a power user at all, but I come from the community, 15 years of being in the community. I’ve gone to, I don’t even know how many WordCamps and always kept tabs on it, especially when, I don’t know when it was. I think it was pre 2020, when they did like a bit of marketing push that Jetpack does donations now, accept donations with Jetpack. And it was through Jetpack forms. I didn’t know that at the time, so I installed Jetpack. I was like, where’s donations? You’ve got to find your way through this tangled web. Oh, it’s part of forms. Okay, let’s go into forms. Oh, it’s like a template now and you have to, the connect flow was terrible. The whole flow was not a great experience.

\n\n\n\n

And the donation form itself, I was like, oh, we have a pretty serious competitor now with Give, we’ve got to like step our game up. But then I left that, I was like, okay, don’t worry about it guys, we’ll be fine now, nobody’s going to use this. That’s where that, oh, moment comes from where like, jack of all trades, master of none type of thing.

\n\n\n\n

[00:10:15] Nathan Wrigley: Yeah, I think probably encapsulates it perfectly. It’s kind of jack of all trades and master of none. So I’m just going to rattle off some of the things that I know it does. I’m probably missing quite a lot here. So for example, you know, it does stats, think something like Google Analytics, it will offer that for you. Backups. It will do protection. It will do speed and optimisation things on your website. Social sharing. It will do forms. There’s VideoPress thrown in there as well. There’s a whole bunch of stuff that I’ve missed out there, but it really is encapsulating a lot.

\n\n\n\n

And the jack of all trades, master of none, bit kind of fits because when Jetpack came out, I’m imagining it was a really, it was probably at the forefront of many of those things. The things that it did, it probably did as well as everybody else. But now, 10, 15, whatever years later, there’s now been real amazing products delivered by third party developers that have become the standard of forms, of backups, of speed and optimisation services and what have you. And so Jetpack now has to kind of compare itself to the very, very best. And I think that’s hard. You know, for one plugin to try and be the best at everything. Nigh on impossible, I would imagine.

\n\n\n\n

[00:11:16] Devin Walker: You’re right. Like, we can’t compete. I’ve been preaching focus for the last, since 2016 when our mentors said, what the heck are you doing all these other plugins? Sell them off or sunset them and only focus on Give. And that’s when our business started taking off. Now, what I’m trying to do is bring focus back into Jetpack.

\n\n\n\n

We do some things very well, and we need to make sure that, I’m not going to say we’re going to compete on the level of a Gravity Forms for our form solution. It’s going to come very close. And for 98% of the users out there that need forms on their website, I think it’ll fulfill that need.

\n\n\n\n

For that special 2% that need like calculation fields, they need super customised form capabilities, then it might not get to that level. But we really want Jetpack to be your go-to solution so that you can have these products work well together as well.

\n\n\n\n

It’s very generous too, the free version. You get a free CDN, you get VideoPress for free, and bringing people in the door and showing them that. Some folks are seeing the light of that, of what it can actually do and do pretty well. But for instance, like SEO. Yeah, Jetpack does SEO, but it’s the most rudimentary, basic version. I want to make that a bit better there. But also things that it doesn’t do well. Either get rid of those, if they’re just going to sit on a shelf and grow with age, what’s the point of it?

\n\n\n\n

So yeah, a lot of realignment with that and understanding that teams that are fully focused on one specific part of what Jetpack does, it’s really hard for us to compete with that.

\n\n\n\n

[00:12:46] Nathan Wrigley: Do you envisage a future for Jetpack now that you are at the helm, if you like ? And I don’t know how the structure of the people that are working on Jetpack works. In other words, do you have a forms dedicated crew where you’ve got, I don’t know, a bunch of people who just work on forms? You’ve got a bunch of people working on VideoPress and VaultPress and all of these different bits and pieces. Or is it, you work with Jetpack and you kind of move from team to team? I’m just curious as to what it looks like inside of Automattic and the different bits that make up Jetpack.

\n\n\n\n

[00:13:14] Devin Walker: Yeah, so this is really an interesting time at Automattic, where they’re going from that functional organisation where it’s product focus. Where Jetpack did, a year ago, have a dedicated development team, designer team, and the person that was in my role before, it was just like a classic company structure in a way, within Automattic.

\n\n\n\n

Now it’s shifting to more of a matrix organisation where there’s one architecture team. They handle .com, they handle Jetpack, they handle a bunch of other products like WooCommerce within that. And the designers as a product are outside of that.

\n\n\n\n

And so what that means is we, as the product team, we have a shared roadmap where, if you ever use .com, a lot of what brings that special sauce to it, what makes it unique outside of the self installed WordPress is Jetpack. So for instance, forms is getting a massive upgrade. And the 15.2 that just came out, it has quite a big upgrade. 15.3, we’re going to have even more. So there’s a dedicated team right now that’s, some of the best engineers, I’ve been really blown away with the level of engineering at Automattic, are working on bringing forms up. And I’m leading that initiative, putting myself into that place where I can then shape forms in the future.

\n\n\n\n

But that does mean that some other elements of Jetpack aren’t getting taken care of right now. AI’s going to become a big thing. We have to pick and choose based on our resources, what are the most important things for our shared initiative? But what that means is they work better together. I think you’re going to see in the future a lot more benefit of running WooCommerce and Jetpack together.

\n\n\n\n

Now, we’re not going to force you to log into wordpress.com to use WooCommerce, but to get some of that benefit, you will need to OAuth in to using Jetpack. And that is a requirement, because a lot of the Jetpack, what you get for free and the secret sauce is based on our cloud servers. You basically are starting to use our infrastructure for free. And Automattic is huge on privacy. And so I don’t quite understand that whole conflict of folks that don’t like that. There’s just some people out there that will never really like Automattic and they will not OAuth in or double sign in to use Jetpack, you know what I mean?

\n\n\n\n

[00:15:29] Nathan Wrigley: Yeah, it’s kind of curious. So if I’m parsing it right, it sounds like what you were saying was that in a recent restructuring of Automattic and over the last 18 months or so, I think there’s been a lot of that. It sounds like Jetpack is more of an amorphous thing. It’s not like these particular people are dedicated to Jetpack Forms and these ones are for VaultPress or whatever it may be. It’s more liquid than that. We’re going to do a dedicated sprint on Forms, for example. It sounds like that’s getting an update. So probably has had people on the seats having a look at that.

\n\n\n\n

And then once that’s put away and tidied up, then move to something else. But also, I guess an interesting thing that you mentioned there is that because it’s in this wider organisation of which WooCommerce, it’s pretty big, that you can also communicate with those folks. So there may be some overlap between what Forms can do in Jetpack and something that you might wish to do with WooCommerce, those kind of things.

\n\n\n\n

So have I got that right? It’s not like dedicated people doing dedicated products within Jetpack, it’s much more liquid and amorphous than that.

\n\n\n\n

[00:16:23] Devin Walker: Absolutely. Rather than having silos we have one large organisation that works better together. And our vision is really that all the WordPress products should be very similar to Apple and how when you’re using iOS or MacOS, there’s a lot of similar fields and they work well together and they tag team off of each other.

\n\n\n\n

And prior to this reorg, that wasn’t happening so much. And we experienced this at Stellar as well. They purchased a bunch of plugins, brought them all in, the vision was for them to all work well together. We went from functional organisation to this matrix type of organisation. And so this isn’t my first rodeo doing it, I know it can work. But it does take a concerted effort, and it’s still ongoing right now. It hasn’t been 18 months, it’s been like six months. And we’re still trying to figure things out. So me stepping in at this time, I’m really trying to figure it out.

\n\n\n\n

I have a blog post called, or a P2 post called Connecting the Dots, where I’m just trying to find which experts and which products on Jetpack they know better. I’ve been having so many one-on-ones just to try to get to know these folks, understand their history with Jetpack and put it in this kind of glossary of what I have here, and keep that updated as my time progresses here.

\n\n\n\n

[00:17:35] Nathan Wrigley: It is kind of hard to get a grip on what Jetpack is. Because it’s trying to do all these different things, I think it is quite hard for people to understand what they’re installing. So they install Jetpack, okay, I’ve heard that Jetpack’s a thing, I’ll go and install it. There’s loads of free stuff available. And then all of a sudden there’s bits which do work, there are bits which you can extend and upgrade and, you know, you might have to log in with .com to make that bit combine with this bit.

\n\n\n\n

And then there are bits where, you know, it feels like the classic themes work well in some areas, and then if you’ve got a block-based theme, other things don’t work quite so well. I’m thinking like social sharing and things like that. And it’s bit of a, mess is the wrong word, but it’s incredibly confusing, I think, to a novice user. And so I’m, I’m going to put words into your mouth, I’m guessing this is one of the challenges that you are going to try and tackle to take that confusion away. Because, I don’t know, it doesn’t matter how many times I log into Jetpack, there’s always a bit of a surprise. Oh, okay, it works that way. That’s curious. I wasn’t expecting it to do that. And I’ve been doing this for absolutely ages, and I’m still surprised by the way things work.

\n\n\n\n

[00:18:33] Devin Walker: You’re not alone. So one of the things that Matt’s been saying since I’ve come on board is we don’t really need to build much more new things. We need to focus and improve what’s already there, especially in Jetpack and .com. And simplifying it and making it make more sense to the end users. And Jetpack is a prime candidate for a really fresh look at how that can happen.

\n\n\n\n

We’ve been doing exercises as the product team for a framework called Jobs to Be Done. You put yourself in the shoes of that customer and you experience it through fresh eyes, based on what they are looking to get out of it.

\n\n\n\n

For instance, the classic, I guess, analogy is, folks don’t, they don’t want a quarter inch drill bit, they want a quarter inch hole, and that’s just the tool they use to get that quarter inch.

\n\n\n\n

And it’s the same thing with Jetpack or any other software product, and it’s a reforming in thinking. It’s only my fifth week here, but it’s been really a refreshing way to think about how we build product, and how I can then work with the designers to then smooth out those wrinkles of which there are many.

\n\n\n\n

[00:19:40] Nathan Wrigley: Yeah, it’s kind of interesting that you say that, because pretty much everything that Jetpack has, well, there’s one notable exception, which is of course AI, which we’ll come to in a minute. But more or less everything that’s in Jetpack has been available in some form or other for a decade or more. You know, forms is, it’s not a new thing. There’s some interesting ideas that people have come up with that maybe we’d want to integrate, but backups, it’s not a new thing.

\n\n\n\n

So the idea of not having new, well, features is probably the wrong word, but not having a new product and just finessing what you’ve already got, I think that would be music to any subscriber to Jetpack. One of the paid plans that you got, I think they would absolutely love that. Just finesse what you’ve already got. We’ve already got this thing, we know what we’ve got, we know how it works, but finesse it, give us a few more features here and there in the bit, like for example, forms or what have you. That seems like music to my ears.

\n\n\n\n

But I’ve said it. The cat is out the bag in this episode now, AI. AI is smuggled into Jetpack in the most, it’s kind of hidden. It’s almost entirely hidden, and yet incredibly profound. I don’t know if, dear listener, you’ve experienced Jetpack and it’s AI features, but if you switch it on and you just go, I don’t know, make a blog post or something like that, when you go to publish, it will just helpfully write your excerpt and your featured image, it will create that for you on the fly. It all happens in the background. It’s really incredible. How did that get under the radar? And is that going to be a big feature?

\n\n\n\n

[00:21:02] Devin Walker: That is going to be a huge feature. I just came back from New York with our AI engineering team led by James LaPage, who’s one of the brightest, young stars, I want to say, in WordPress. And he’s one of the reasons that I’m so excited for what AI can become with Jetpack, and where it’s going to go from here. It’s really great that you are already like what’s there? But that’s just scratching the surface from what we’re going to be doing in the near future.

\n\n\n\n

We’ve got quite a large team working on this. This is a 50 plus engineering team. It’s a huge focus of Automattic. And Jetpack’s the way we’re going to bring a lot of what we’re bringing to .com to self-hosted users. And it’s not going to cost you really much at all and it’s gonna be done in the WordPress way.

\n\n\n\n

Right now it tries to be your content companion, is kind of how I call it, but it’s going to do that a lot better, and it’s going to reach outside of the post editor and do a lot more helpful items for you in the WP admin. And not only in the WP admin, also provide some tools for you in the future for your visitors and how you can convert them, how you can get them to sign up on your newsletter, or you can get them to ask presales questions, or fill out forms or what have you. It’ll be very moldable and shapeable.

\n\n\n\n

So I delightfully was at several demo presentations at this meetup where I was just blown away. Sat down with Matias, James, a lot of the key stakeholders and players here at .com on how and when we can start bringing this into Jetpack.

\n\n\n\n

And what’s there right now is good. It’s almost going to be entirely rewritten and thrown away for what the foundation now is going to become. And so that’s one of the more exciting, more immediate, roadmap items that I’ll be really working on the next 8 to 12 months. You’ll see a huge change.

\n\n\n\n

[00:22:54] Nathan Wrigley: I feel like at the moment the AI implementation in Jetpack is about content, the content that you’re creating right at this moment. We’re creating, I don’t know, SEO fields and we’re creating excerpts and things like that and featured images and what have you. But if you haven’t had a play, again, I’ll link this in the show notes, Automattic’s Telex, which is the capability to, you write a simple prompt and it will create a block for you. I feel that something like Jetpack with something like Telex, just hidden in the sidebar of a WordPress blog post would be really kind of interesting. You know, the idea that, I need a block for this.

\n\n\n\n

[00:23:26] Devin Walker: Are you reading my DMs? Because, exactly. You’ve already sort of got a crystal ball right there. And with Telex, that’s a huge opportunity for site building, for imagining anything that WordPress could be, and having it created there.

\n\n\n\n

Right now it’s great. It creates separate plugins, you can download and install them, you can’t sync them per site. It’s kind of annoying how there’s all these plugins there. There’s not much management updating over time. Jetpack can be that bridge for you, and that’s really an exciting future where it needs to go.

\n\n\n\n

[00:23:57] Nathan Wrigley: Yeah, because at the moment, if you are an inexperienced WordPress user, if you’re not technical, let’s put it that way, then you are constrained entirely by what’s there or what the developer has built for you or the range of plugins that you’ve installed. And I feel like in the near future, you reach that point of frustration and you suddenly realise that, oh, there is no block that does that thing. Well, why don’t I just make one?

\n\n\n\n

And you’ll write a small prompt, I don’t know, I need a real estate block, or I don’t know, I need a block because it’s coming up to Christmas. I need a block which is going to show snowflakes falling on this particular post. Please don’t do this by the way, but you get the point. I’m just going to go ahead and make it, and it’ll be this entirely disposable thing. And when I’m finished with it, I’ll probably just throw it in the trash or maybe keep it until next year.

\n\n\n\n

But the point is, your WordPress becomes like this, how to describe it, it’s almost like the scaffolding for an infinite arrangement of possibilities. Whereas before, WordPress felt a bit like a box. If it wasn’t in the box, it couldn’t be done. But now the box got opened and there’s all this scaffolding everywhere and it can do a million more things. And as Matt Mullenweg said, you know, it’s becoming like the OS for the web or something like that.

\n\n\n\n

And the fact that AI is binding to the abilities inside of WordPress, so with the Abilities API and things like that, it knows everything that your WordPress website can do. You know, create users, create posts, delete posts, all of these kind of things. And Jetpack seems really aligned to doing that. I don’t know how it would fit into the bigger Jetpack picture, but, yeah, interesting.

\n\n\n\n

[00:25:27] Devin Walker: Yeah, well, I think AI can be the glue that binds a lot of these individual products together and really paint the picture on how they work well together, and work within your WordPress Core to make it the Jetpack that is supercharged, right? I mean the WordPress that has a Jetpack strapped to it.

\n\n\n\n

There is a great number of, kind of mission statements and taglines over the years for Jetpack. None of which I think have been fully fulfilled. So I really want to revisit that, revise that, and you’ll see a lot of updates coming to the website soon, soon-ish. Telling and bringing people along this journey.

\n\n\n\n

If you look at the website and a lot of the marketing right now, it’s kind of on idle. So that’s another big part of what I’m being focused on, and that will help change the perception in the community and outside of it, of what Jetpack is and what it can do for you is, pulling up the curtain, if you will, on all the cool stuff we’re doing here.

\n\n\n\n

You could read P2s all day here and many of them are so impressive and I feel like a lot of them should be public. There’s so much good content here that is really impressive. For somebody like me who’s been in the community for 15 years, like, oh my gosh, we have the best engineers, the best designers, and it’s all in this P2. Like, let’s get some of this published.

\n\n\n\n

[00:26:42] Nathan Wrigley: Yeah, well, that’s curious. So I was reading your mind a minute ago, you’ve just read my mind, because the next little bit was going to be all about marketing. Because it doesn’t matter, with the best will in the world, the best product in the world will probably fail, if not marketed correctly.

\n\n\n\n

And it feels as if, when Jetpack began, because it was kind of the thing, a long, long time ago it was the thing, it had that success kind of built into it. You know, it was an Automattic thing, it was a WordPress thing, it became popular because it did so many things that nothing else could do.

\n\n\n\n

Fast forward till today, it feels like the wheels have come off the marketing a little bit, or the train has completely pulled into the station and not moving at all. You know, I can’t remember the last time I saw something engaging, like a YouTube video or somebody experimenting on their YouTube channel with a Jetpack thing.

\n\n\n\n

Whereas with third party plugins, it’s happening all the time, you know? And so it feels like that’s going to be a very big part of where you are, you know, you’ll build hopefully some amazing things, but then trying to turn the tide and get people to be engaged and interested and see the utility of it. I’m guessing that’s going to be a part of the job which is separate to the technological part.

\n\n\n\n

[00:27:46] Devin Walker: It will, absolutely. I think for quite some time it was almost build it and they will come here. And for many, many years they did come. And now it’s harder because the marketplace has expanded quite a bit. There’s a lot of other folks out there doing really cool things with WordPress and have a lot more focused marketing efforts behind them.

\n\n\n\n

I mean, point and case was GiveWP, we were just, people weren’t turning to Woo or Gravity Forms because we made it that it was the number one solution you had to go do it. We just hammered that point through WordCamps, through videos, through podcasts, whatever it was, that was our mission.

\n\n\n\n

And for Jetpack, we really need to refocus on that and do that a lot more. It’s very engineering led organisation. I think marketing to some point is built into their roles and they’re not doing that part as much as I would like.

\n\n\n\n

And on another aspect, I think we definitely just need more marketers. I’m not going to say the exact numbers, but it was a surprisingly low number of marketers to the size of the organisation when I came in. I’m used to a much better ratio.

\n\n\n\n

So I’m going to be hammering that point a little bit more home as I get through the door, but it’s something that I’ve mentioned a bit already in my 5 weeks here.

\n\n\n\n

[00:29:02] Nathan Wrigley: I don’t know what the install base is specifically. It’s a lot, right? Jetpack has a lot of installs and so presumably you’ve.

\n\n\n\n

[00:29:08] Devin Walker: The core is 4 million.

\n\n\n\n

[00:29:09] Nathan Wrigley: 4 million. Okay, so, wow, gosh. So presumably that means anything that you do do, you’ve really got to tread carefully. So for a start, you can’t break things. You can’t just ship a brand new UI in let’s say the forms aspect of it overnight. And I presume that’s kind of like a bit of a noose around your neck in that, you know, you want to move fast and break things in some respects, but with 4 million installs, which is really right at the very top in the WordPress ecosystem, that’s big, big numbers. You are going to constrained in what you can do and how fast you can move things and how quickly you can break things.

\n\n\n\n

[00:29:40] Devin Walker: Somewhat. Somewhat I agree with that. Right now we are on a monthly release cycle and there’s definitely a lot of caution around that. And Jetpack touches a lot of .com too, so there’s that extra added user base, which is humongous. So there is that bit of treading carefully.

\n\n\n\n

But I want to balance that with being aggressive. We just shipped, prior to me coming on board, a new onboarding for getting connected. It’s just through the connection segment, getting connected to .com, and that really had positive results and saw an uptick in connected successful sites. I think we can take that to the next level and explain what Jetpack is, what they need it for, and really optimise it for the best use case based on what that particular site wants or needs.

\n\n\n\n

Going beyond onboarding is then getting into the product UI itself, making the navigation much more clear and understandable.

\n\n\n\n

You know, there’s three different areas in Jetpack right now where you can toggle on and off different modules or products.

\n\n\n\n

[00:30:39] Nathan Wrigley: Oh, I’ve discovered many them.

\n\n\n\n

[00:30:41] Devin Walker: Yeah. So I think we need to consolidate that at least. And there’s more Easter eggs. I don’t even want to call them Easter, I don’t know what you’d call that, but interesting quirks that we can clean up.

\n\n\n\n

And for the most part I think we do have to be a bit careful because it’s such a massive user base. Breaking things, just look at some of the Jetpack reviews. Breaking them and lack of support. Those are the two main cause of one star reviews. And with that many, I really want to get that review base above 4.0 stars. But with 3000 or whatever reviews it is, it takes a long shift to get that. And we’re not going to do that by continually breaking things, so it’s a balance.

\n\n\n\n

[00:31:19] Nathan Wrigley: It’s kind of interesting that me, a relatively inexperienced user of Jetpack, I was able to discover many of the quirks that you’ve just mentioned almost immediately. You know, just being curious. And I’m the kind of person that when I download anything, I go and look at every single menu item and kind of think, well, what does that do? How would that work? It really didn’t take me long to discover, well, hang on, that is somewhere else. If I engage that, does that mean it conflicts with this thing over here?

\n\n\n\n

And I saw this over and over again. And so I think that, as you imagine, would be some of the very, very brilliant low hanging fruit. To just have a UI which does, you know, there’s one place for one thing, it works as expected that you don’t, I’m sure you know where I’m going with this, basically, just simplify things, make it elegant in the same way that we’ve seen with so many third party plugins.

\n\n\n\n

Because at the moment it kind of feels like a whole range of different things that have been slammed together and forcefully told to get along with each other, as opposed to like a happy family that, just everything works and everybody’s happy and there’s bliss and rainbows everywhere. It feels a little bit like that, if you know what I mean?

\n\n\n\n

[00:32:21] Devin Walker: Oh, I completely agree. I think we used in the pre-show and it’s a bit of a Frankenstein. We need to change it from that. If I had a nickel for every toggle in Jetpack, I don’t know if I’d need to work anymore. There are quite a few toggle on, toggle offs in just a row. You can imagine how this interface could be much more elegantly put together.

\n\n\n\n

And we’re going to use user feedback for a lot of this and ask, hey, what do you guys think of this? Because we can’t do it successfully in a bubble.

\n\n\n\n

[00:32:52] Nathan Wrigley: Well, and the other thing is, given the perfect UI, it does so much stuff. If you just had Jetpack, if you had a vanilla version of WordPress and you installed Jetpack and everything was easy to navigate and worked as expected first time and maybe there was no dependency on having a .com account or what have you. It does all the things. It would take you from like zero success to broadly speaking, okay, you’ve got a credible website. Maybe there’s going to be some interesting cases where you want a little bit more SEO finesse or something like that.

\n\n\n\n

It would get you to the races, you know, it would get you to put your horse in the race and have a good go. And there’s not much like that out there. There really is nothing that I can think of in the WordPress space. But it’s a leviathan and it’s got many heads. We need it just to have the one head, I think.

\n\n\n\n

[00:33:35] Devin Walker: Very much so, and that’s the challenge that I’m in here to work with this entire team and put a lot of thought behind it.

\n\n\n\n

[00:33:44] Nathan Wrigley: Okay, so it’s all on you. So if Jetpack is a success in two years time, we know who to thank for that. And it does genuinely seem, for somebody with your obvious interest and capabilities, it does seem really, really enjoyable. I’m sure it’ll keep you awake, but an enjoyable challenge. Something that you get your teeth into. Something where the success can be measured fairly quickly. You know, does the discontent diminish? Does the UI improve? Tick, tick, tick. We did a good job.

\n\n\n\n

And also, there’s loads of room for improvement. So you’ve entered on a, you’ve definitely got yourself into a position where you’ve taken on a project where the improvements are evident everywhere. I hope that you managed to grab hold of them and wrestle this to the ground.

\n\n\n\n

[00:34:21] Devin Walker: Well, I really appreciate that, Nathan, and why don’t we have a check in in 12 months and see where we’re at on this journey. I think that would be a good way to keep us honest, follow along in this journey along the way, we’ll see how far we’ve gotten.

\n\n\n\n

[00:34:35] Nathan Wrigley: Okay, well, for now then, go and install Jetpack. If you’re listening to this, we’ll be back in 12 months time, so go and have a play with Jetpack as it is now and see.

\n\n\n\n

It sounds to me that Devin is like all ears. If you’ve got some quirks and you found something that’s curious or unexpected or dissatisfying or just downright annoying, where do we get in touch with you? Oh, also, I suspect Devin’s more than happy to receive positive commentary as well.

\n\n\n\n

[00:35:01] Devin Walker: Yeah, I mean the positive stuff’s great too. Right now feedback@jetpack.com is a good place, but we’re going to make this a lot more public in the near future. You can also just tweet at me @innerwebs, I-N-N-E-R-W-E-B-S, or go to my website devin.org. But jetpack.com, jetpack.com/feedback is also a great place. So that’s a bit about me and where you can find the Jetpack information.

\n\n\n\n

[00:35:27] Nathan Wrigley: Okay, thank you. So definitely a challenge out in the public for Devin to get his teeth into WordPress’ Jetpack, and see if he can figure it out and make it better. Let’s check back in 12 months time and see how we’re going. Devin Walker, thanks for chatting to me today.

\n\n\n\n

[00:35:38] Devin Walker: Thank you.

\n
\n\n\n\n

On the podcast today we have Devin Walker.

\n\n\n\n

Devin’s journey in the WordPress ecosystem spans many years, with experience in development, design, marketing, and customer support. He’s best known as the co-founder of GiveWP, which he built and scaled before it was acquired. During his time there, he touched a variety of prominent WordPress brands including iThemes, Kadence, LearnDash, and The Events Calendar.

\n\n\n\n

Today, Devin is starting a new role leading the Jetpack suite of services at Automattic. It’s a position with hefty responsibilities as Jetpack powers millions of WordPress sites, and integrates deeply across Automattic’s product portfolio.

\n\n\n\n

I talk with Devin about why he took on this challenge, the divisiveness and complexity surrounding Jetpack, and his vision for refocusing the plugin and simplifying its user experience.

\n\n\n\n

We start by hearing about Devin’s extensive WordPress background and the choices he weighed up when deciding to join Automattic. The conversation quickly moves to the scope of Jetpack, its evolution, the struggle to be a “jack of all trades, master of none”, and the recent efforts to bring greater focus and polish to key features like forms and SEO.

\n\n\n\n

Devin gets into the organisational changes at Automattic, how Jetpack’s development teams now collaborate more fluidly with other product teams (such as WooCommerce), and the balancing act of shipping improvements to a 4 million strong user base without breaking things.

\n\n\n\n

AI emerges as a massive new frontier, and Devin shares behind-the-scenes insights into Jetpack’s current and future AI capabilities, giving us a glimpse at content creation, block-building, and how AI might reshape user and developer expectations in WordPress.

\n\n\n\n

Throughout, we hear about Devin’s approach to product marketing (and the need for more of it), the importance of listening to user feedback, and his plans for a more coherent and compelling Jetpack experience.

\n\n\n\n

If you’re a WordPress user wondering where Jetpack is headed, what’s working, or how AI fits into the future of site building, this episode is for you.

\n\n\n\n

Useful links

\n\n\n\n

Jetpack

\n\n\n\n

Jetpack feedback form

\n\n\n\n

GiveWP

\n\n\n\n

 WP Rollback

\n\n\n\n

Automattic AI team announcement post

\n\n\n\n

Telex

\n\n\n\n

Devin’s website

\";s: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 Nov 2025 15: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:31;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:27:\"Open Channels FM: Open Tabs\";s: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:33:\"https://openchannels.fm/?p=112264\";s: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:76:\"https://openchannels.fm/the-everyday-chaos-of-open-tabs-and-browser-battles/\";s: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:180:\"Bob and Nathan explore the chaos of browser tabs. One hoards thousands, while the other balances life with two. Tune in for witty banter, tech quirks, and questionable life advice.\";s: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 Nov 2025 11:52: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:32;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:226:\"HeroPress: From carpentry to digital marketing, this is the story of how WordPress helped me rebuild my life. – De la carpintería al marketing digital, esta es la historia de cómo WordPress me ayudó a reconstruir mi vida.\";s: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=8280\";s: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:266:\"https://heropress.com/essays/from-carpentry-to-digital-marketing-this-is-the-story-of-how-wordpress-helped-me-rebuild-my-life/#utm_source=rss&utm_medium=rss&utm_campaign=from-carpentry-to-digital-marketing-this-is-the-story-of-how-wordpress-helped-me-rebuild-my-life\";s: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:13418:\"\"Pull

Este ensayo también está disponible en español.

\n\n\n\n\n\n\n\n\n
\n
Here is Josep reading his own story aloud.
\n
\n\n\n\n\n

My origins

\n\n\n\n

I’m Josep, born and raised in Rocafonda, a working-class and humble neighborhood in Mataró.

\n\n\n\n

I come from a family that has worked with wood lovingly for three generations. Carpentry was always our trade, our way of understanding life and making a living.

\n\n\n\n

For many years, I worked with wood, shaping it with the same hands and patience I learned at home.

\n\n\n\n

At the same time, my curiosity led me down other paths: interior design and technical drawing as a draftsman, where I discovered the joy of imagining spaces before building them.

\n\n\n\n

The turning point

\n\n\n\n

Everything changed during the COVID-19 pandemic when my heart decided to stop beating properly. A genetically inherited heart condition forced me to stop completely and look at life from a new perspective.

\n\n\n\n

Suddenly, everything I took for granted; health, routines, the simple act of making plans disappeared, just as my life almost did.

\n\n\n\n

But it didn’t.

\n\n\n\n

I pulled through. With after-effects, yes, but with an incredible desire to live.
Out of that will to live came the decision to reinvent myself and study while recovering.

\n\n\n\n

New life, new goals

\n\n\n\n

There were twenty-six months of rehabilitation, relapses, and searching for an effective treatment.

Yet, amid all that chaos, I managed to step back and turn my skills into a new opportunity.

I studied Content Marketing and discovered a well-known secret for many, but something completely new for a carpenter from a neighborhood in Mataró.

\n\n\n\n

WordPress.

And with it, its community.

\n\n\n\n

Metamorphosis

\n\n\n\n

And then… everything changed.

\n\n\n\n

I discovered WordPress through my marketing studies, and thanks to our beloved CMS, I created my first blog. I keep the logo and some of my early posts, remnants of a time when I was learning to tell stories and give shape to ideas.

\n\n\n\n

In May 2023, I volunteered for my first WordCamp in Barcelona. The experience opened my eyes to a new universe full of generous, passionate people eager to share.

\n\n\n\n

I quickly connected with the community and joined the Mentorship Program, a global initiative from the Community Team. I was one of the first eleven mentees in the world. For me, it was a dream come true.

\n\n\n\n

Shortly afterward, I began combining my increasingly active contributions with the same program, but this time as a mentor. I had received so much from the community that my gratitude pushed me to give back that knowledge and share those values with anyone willing to listen.

\n\n\n\n

I continued collaborating as a volunteer, speaker, and documentation table participant at WordCamp Europe Torino 2024. It was a step forward in every sense from learning to teaching, from receiving to contributing.

\n\n\n\n

I began managing the Spain Handbook documentation alongside my mentors Javier Casares and Jesús Yesares. Together, we laid the foundations for a project that, like everything in WordPress, is built with patience and community.

\n\n\n\n

I also joined the global documentation team for WordPress version 6.6, “Dorsey.”

\n\n\n\n

Rising from my ashes

\n\n\n\n

Thanks to WordPress and its community, I grew as a person and as a professional in a new discipline as competitive as it is exciting and alive.

\n\n\n\n

They supported me through the hardest moments and helped me rise again, like a phoenix from the ashes.

\n\n\n\n

At the end of 2023, through the Five for the Future initiative, Wetopi, a high-performance managed hosting company that exclusively hosts WordPress sites, placed its trust in a newcomer to the industry and offered me a full-time position where I could unleash all the creativity I had inside.

\n\n\n\n

Present and future

\n\n\n\n

If there’s one thing I learned during my illness, it’s to enjoy the moment and not worry so much about the future.

\n\n\n\n

That’s my focus now, the present, always grateful to all those who helped me become who I am today, in 2025.

\n\n\n\n

I have a new job, new friends, and I could almost say a new family, and it’s all thanks to WordPress.

\n\n\n\n

Many people tell me that if I weren’t so resilient, persistent, and determined, I wouldn’t have achieved any of this.

\n\n\n\n

I simply smile and think that all those qualities were brought to light one day by Hari Shanker, during the Mentorship Program, together with WordPress and its community.

\n\n\n\n

Thank you to all of them.

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

De la carpintería al marketing digital, esta es la historia de cómo WordPress me ayudó a reconstruir mi vida.

\n\n\n\n\n
\n
Escucha a Josep leer su propia historia en voz alta.
\n
\n\n\n

Mis orígenes

\n\n\n\n

Soy Josep, nacido y criado en Rocafonda, un barrio trabajador y humilde de Mataró.

\n\n\n\n

Vengo de una familia que ha trabajado la madera con mimo durante tres generaciones. La carpintería siempre fue nuestro oficio, nuestra forma de entender la vida y de ganárnosla.

\n\n\n\n

Durante muchos años trabajé la madera, moldeándola con las manos y la paciencia que aprendí en casa.

\n\n\n\n

Al mismo tiempo, mi curiosidad me llevó por otros caminos: el diseño de interiores y el dibujo técnico como delineante, donde descubrí el placer de imaginar espacios antes de construirlos.

\n\n\n\n

El punto de inflexión

\n\n\n\n

Todo cambió en plena pandemia de la COVID-19, cuando mi corazón decidió detener el ritmo.
Una enfermedad cardíaca de origen genético me obligó a parar por completo y mirar la vida desde otro lugar.

\n\n\n\n

De repente, aquello que daba por sentado —la salud, las rutinas, el simple hecho de poder hacer planes— se desvaneció, como casi se desvanece mi vida.

\n\n\n\n

Pero no.

\n\n\n\n

Salí adelante. Con secuelas, sí, pero con unas ganas de vivir increíbles.
Y fruto de esas ganas decidí reinventarme y estudiar mientras me recuperaba.

\n\n\n\n

Nueva vida, nuevas metas

\n\n\n\n

Fueron veintiséis meses entre rehabilitación, recaídas y la búsqueda de un tratamiento eficaz.
Pero, entremedio de todo ese caos, supe abstraerme y convertir mis habilidades en una nueva oportunidad.
Estudié Marketing de Contenidos y descubrí un secreto a voces para muchos, pero completamente nuevo para un carpintero de un barrio de Mataró.

\n\n\n\n

WordPress.
Y con él, su comunidad.

\n\n\n\n

Metamorfosis

\n\n\n\n

Y entonces… todo cambió.

\n\n\n\n

Conocí WordPress gracias a mis estudios de marketing y, gracias a nuestro querido CMS, pude crear mi primer blog.
Aún conservo el logo y algunos de mis primeros textos, vestigios de una etapa en la que aprendía a contar historias y a dar forma a ideas.

\n\n\n\n

En mayo de 2023 me ofrecí como voluntario en mi primera WordCamp, en Barcelona. La experiencia me abrió los ojos a un universo nuevo, lleno de personas generosas, apasionadas y con ganas de compartir.

\n\n\n\n

Rápidamente conecté con la comunidad y accedí al Mentorship Program, un proyecto global del equipo de Comunidad.
Fui uno de los primeros once mentees del mundo. Para mí, era un sueño.

\n\n\n\n

Poco después, pasé a compaginar mis contribuciones, cada vez más activas, con el mismo programa, pero esta vez como mentor.
Había recibido mucho de la comunidad, y mi gratitud me empujó a devolver ese conocimiento y a compartir esos valores con todo aquel que quisiera escucharme.

\n\n\n\n

Seguí colaborando como voluntario, ponente y participante en la mesa de documentación en la WordCamp Europe Torino 2024.
Fue un salto de calidad, y también un salto personal: de aprender a enseñar, de recibir a aportar.

\n\n\n\n

Comencé a gestionar la documentación del Spain Handbook junto a mis mentores Javier Casares y Jesús Yesares.
Juntos pusimos las bases de un proyecto que, como todo en WordPress, se construye con paciencia y en comunidad.

\n\n\n\n

También formé parte del equipo de documentación global para la versión 6.6 de WordPress, “Dorsey”.

\n\n\n\n

Renacer de mis cenizas

\n\n\n\n

Gracias a WordPress y a su comunidad crecí como persona y como profesional en una nueva disciplina: tan competitiva como apasionante y viva.

\n\n\n\n

Me sostuvieron durante mis malos momentos e hicieron que resurgiese como si de un ave fénix se tratase.

\n\n\n\n

A finales de 2023, gracias al proyecto Five For The Future, Wetopi —una empresa de hosting gestionado de altas prestaciones que aloja únicamente sitios web creados con WordPress— confió en un recién llegado al sector y me ofreció un proyecto a tiempo completo donde podía dar rienda suelta a toda la creatividad que llevaba dentro.

\n\n\n\n

Presente y futuro

\n\n\n\n

Si algo aprendí en mi época de enfermedad es a disfrutar más el momento y no pensar tanto en el futuro.

\n\n\n\n

Y en eso me centro: en el presente, agradeciendo siempre a todas aquellas personas que me ayudaron a ser quien soy hoy, en 2025.

\n\n\n\n

Tengo un nuevo empleo, nuevos amigos, casi puedo decir que una nueva familia, y es todo, todo, gracias a WordPress.

\n\n\n\n

Mucha gente me dice que, si yo no fuese tan resiliente, resistente y tenaz, no habría conseguido nada.

\n\n\n\n

Yo simplemente les sonrío y pienso que todas esas cualidades las hizo aflorar un día Hari Shanker, en el Mentorship Program, junto con WordPress y toda su comunidad.

A todos ellos gracias.

\n

The post From carpentry to digital marketing, this is the story of how WordPress helped me rebuild my life. – De la carpintería al marketing digital, esta es la historia de cómo WordPress me ayudó a reconstruir mi vida. 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, 19 Nov 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:12:\"Josep Morá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:\"\";}}}}}i:33;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"WordPress.org blog: WordPress 6.9 Release Candidate 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=19350\";s: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/11/wordpress-6-9-release-candidate-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:10460:\"

The second Release Candidate (“RC2”) for WordPress 6.9 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 RC2 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.9 is the best it can be.

\n\n\n\n

You can test WordPress 6.9 RC2 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 RC2 version (zip) and install it on a WordPress website.
Command LineUse the following WP-CLI command:
wp core update --version=6.9-RC2
WordPress PlaygroundUse the 6.9 RC2 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 scheduled final release date for WordPress 6.9 is December 2, 2025. The full release schedule can be found here. Your help testing RC versions is vital to making this release as stable and powerful as possible.

\n\n\n\n

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

\n\n\n\n

What’s in WordPress 6.9 RC2?

\n\n\n\n

Get a recap of WordPress 6.9’s highlighted features in the Beta 1 announcement. For more technical information related to issues addressed since RC1, 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 crucial to the development of any software. It’s also a meaningful way for anyone to contribute.

\n\n\n\n

Your help testing the WordPress 6.9 RC2 version is key to ensuring that the final 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.9. 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

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.9 beta releases. If you haven’t yet, make sure to conclude your testing and update the “Tested up to” version in your plugin’s readme file to 6.9.

\n\n\n\n

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

\n\n\n\n

Test on your hosting platforms

\n\n\n\n

Web hosts provide vital infrastructure for supporting WordPress and its users. Testing on hosting systems helps inform the development process while ensuring that WordPress and hosting platforms are fully compatible, free of errors, optimized for the best possible user experience, and that updates roll out to customer sites without issue.

\n\n\n\n

Want to test WordPress on your hosting system? Get started with configuring distributed hosting tests here.

\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 (RC2) also marks the hard string freeze point of the 6.9 release cycle.

\n\n\n\n

An RC2 haiku

\n\n\n\n

A calm hillside sighs,
Work of many now complete —
RC2 stays true.

\n\n\n\n

Props to @amykamala, @annezazu, @davidbaumwald, @westonruter and @joedolson for proofreading and review.

\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, 18 Nov 2025 15:26:53 +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:\"Akshaya Rane\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:48:\"Weston Ruter: WordPress 6.9 Performance Landings\";s: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:33:\"https://weston.ruter.net/?p=38085\";s: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://weston.ruter.net/2025/11/17/wordpress-6-9-performance-landings/\";s: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:7991:\"

WordPress 6.9 includes so many performance improvements! Scripts with fetchpriority, increased inline CSS, minified theme styles, on demand block styles in classic themes, the template enhancement output buffer, and much more! Check out the field guide I just published:

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

There were many contributors from the Core Performance Team involved in making this possible. Personally, this is a culmination of a year of work, including a bunch of research and development I wrote about previously and spoke about at WordCamp US:

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

I’ve been working nights and weekends (and days) to help make sure all of this lands in time for the December 2nd release. This is evident from looking at the “A Month in Core” post for October! It has been fun—feeling like the good ol’ contribution days when I was deep in the Customizer up through WordPress 4.9 (2013–2017). But I’m really looking forward to being able to unwind for the holidays.

\n\n\n\n

I hope your sites get a great speed boost for Christmas! \"🎄\"

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

Where I’ve shared the field guide:

\n\n\n\n\n

The post WordPress 6.9 Performance Landings appeared first on Weston Ruter.

\";s: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 Nov 2025 06:07: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:12:\"Weston Ruter\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"Matt: Rothko Chapel Garden\";s: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=150583\";s: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:29:\"https://ma.tt/2025/11/garden/\";s: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:4806:\"

It’s been hard for me to write about Friday because it was so overwhelming, to see so many friends and loved ones and teachers and mentors there, including friends of my late Father’s I hadn’t seen in years, and to be with all of the people who have been driving the mission of the Rothko Chapel over decades, and gosh. There were literally monarchs and dragonflies (my Mom’s favorite) flitting about as each person spoke. Although the Houston heat beat down upon us on an unseasonably warm November day, you couldn’t have imagined a more perfect scene.

\n\n\n\n

Speaking before me were Troy Porter (Board Chair), Abdullah Antepli (the new director), Christopher Rothko, Abbie Kamin (City Council member), Adam Yarinsky (architect), Lanie McKinnon (landscape architect), and my sister, Charleen. Here is what I offered to the proceeding:

\n\n\n\n

I can’t believe we’re all here; it’s been so long coming to this point.

\n\n\n\n

So I should start by saying that part of the reason I started blogging and WordPress is I have a terrible memory, I forget everything.

\n\n\n\n

But as I remember it, my conscious relationship to the chapel begins in my teenage years, when exploring the city with some friends from the High School for the Performing and Visual Arts, some of whom are here today. We were always bumming around the area. HSPVA at the time was in Montrose, and we bummed around the Saint Thomas campus and the related parks and stumbled across the Rothko Chapel.

\n\n\n\n

I was totally taken aback, and couldn’t wait to call up my parents about what I had discovered. “Mom! Look what I found!

\n\n\n\n

She just started laughing.

\n\n\n\n

Of course, I hadn’t discovered it; it turns out that almost a decade before, she had brought me there as a small child. Apparently, we had been playing in Bell Park, and rain clouds started to form, so she was looking for someplace we could go inside, and the Rothko Chapel was, of course, open.

\n\n\n\n

I’ve been to the Chapel countless times now. I’ve been when I’m grieving, I’ve been when I’m celebrating, I’ve been when I needed a reset, I’ve brought friends that loved it, that hated it, that cried, I’ve brought friends that laughed.

\n\n\n\n

Some of my favorites when I was training for a half-marathon and would run here, take a quick meditation break, and then run back home

\n\n\n\n

There’s a milion stories about how people come to the chapel, and many more about how they leave it, it’s a nexus or Schelling point. Whatever your experience, you’ll always remember it and leave changed.

\n\n\n\n

I’m so glad to be able to celebrate this opening with all of you. Here are of course my family that raised me, but also friends and teachers that shaped me as a man and without which I wouldn’t have been able to accomplish anything I have in my life. I see some teachers here, I see Doc Morgan, David Caceres. Thank you so much for being here.

\n\n\n\n

My father, Chuck Mullenweg, passed in 2016, but Mom, I know he would have loved this. Christopher, thank you for the opportunity to contribute in a small way to our shared mission of honoring our fathers’ legacy.

\n\n\n\n

My mother, Kathleen Mullenweg, is right here, I hope you get a chance to meet her. A garden seemed very fitting as her lifelong green thumb and love of gardening has always been grounding and inspiring to me. Mom, I just wanted to take this opportunity to say thank you again for being the best mother a boy could hope for, and giving me such a broad extracurricular education, especially in the arts.

\n\n\n\n

I work in technology, which has already transformed society and is poised to do even more with the age of AI beginning, and I believe it is incredibly important for technologists building the future to be connected and informed by the arts, because we need our software to have soul.

\n\n\n\n

What I hope for most, though, is that the peace and reflection garden and birch grove bring some mother and child someday, who perhaps wander into the chapel looking to escape rain, and that kid later goes back to his mother a decade later and says, Look what I found!

\";s: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 Nov 2025 07:35: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:36;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:107:\"Gutenberg Times: WordPress 6.9 Dev Notes, WordCamp Canada talks, Interactivity API — Weekend Edition #349\";s: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=42773\";s: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:111:\"https://gutenbergtimes.com/wordpress-6-9-dev-notes-wordcamp-canada-talks-interactivity-api-weekend-edition-349/\";s: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:25243:\"

Hi there,

\n\n\n\n

We are getting close to the WordPress 6.9 release. Below you find links to published Developer notes. You can also wait for the Source of Truth to be published next week to learn about besides developer changes coming to WordPress 6.9.

\n\n\n\n

On a personal note, I had great fun facilitating the first WordPress Meetup in München after an 11-month hiatus. I met the wonderful people who co-founded the meeting back in 2014, the same year I started co-organizing a meetup in Naples. It’s quite a mixed group of bloggers, developers, designers and agencies. I am glad to now have a local meetup to go to every month and learn more about the German WordPress users and businesses. If you don’t have a local WordPress meetup, you might consider starting one. It’s a lot of fun networking with like-minded people.

\n\n\n\n

Yours, \"💕\"
Birgit

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

Developing Gutenberg and WordPress

\n\n\n\n

Gutenberg 22.1 RC1 is now available for testing.

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

WordPress 6.9 RC1 is now available and it’s time for you, if you haven’t yet, to test your themes, plugins and custom code against the new version. The contributors also published Dev Notes for this release.

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

The Source of Truth for WordPress 6.9 is in review and on the publishing schedule here for November 18th, 2025. You can take a sneak peek of the draft on Google Doc, in case you need it earlier to comply with any of your publishing deadlines.

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

State of the Word 2025 will include highlights and demos of the most important features of this release. The event will be livestreamed on YouTube.

\n\n\n\n

Dev notes for WordPress 6.9

\n\n\n\n
\"Highlight
\n\n\n\n

More dev notes are available on the Make Core blog.

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

Dev notes on accessibility updates, frontend performance enhancements, the underlying architecture of the new Notes feature, updates to the HTML API, the new Block Processor, and PHP and UTF_8 supports are still in the works and are expected to be published next week together with the Fieldguide.

\n\n\n\n

I mentioned them before, there are a few tutorials on the WordPress Developer blog about how to use WordPress 6.9 features.

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

\"🎙\" The latest episode is Gutenberg Changelog #124 – Gutenberg 22.0 and WordPress 6.9 with Ellen Bauer, project lead at Automattic.

\n\n\n\n
\"Gutenberg
\n\n\n
\n
\n\n
\n
\n\n\n\n

The latest monthly roundup post is What’s new for developers? (November 2025) was again stoke full of information. It covers al lot you might already know, but also lesser-known updates, like PHP-only block registration, enhanced Gallery aspect ratios. WordPress Playground gains file browser capabilities; AI team stabilizes core packages implementing server-side Abilities API.

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

Jonathan Bossenger published an introduction to the WordPress Abilities API that’s coming to WordPress in the next release. You’ll learn what this new Ability will unlock for developers and how to use it in your plugins and themes now.

\n\n\n\n
\"Featured
\n\n\n\n\n\n\n\n
\"WordCamp
\n\n\n\n

The team of WordCamp Canada published the recordings of the talks on WordPress TV here is a selections:

\n\n\n\n

Back on the Block: My Reasons for Returning to the Full Site Editor with Joe R Simpson. This interactive presentation explores WordPress’s current state, Full Site Editor capabilities, and emerging features like AI and the Style Guide.

\n\n\n\n

Building for Content Editors: Why Designers and Developers Need To Care More with Jesse Dyck. Block editors offer powerful flexibility but require deliberate curation through guardrails and customization to prevent brand inconsistency, accessibility failures, and editor overwhelm while empowering content teams to work efficiently.

\n\n\n\n

Interactivity API for common DOM interactions with Austin Atkinson. Leveraging WordPress’s Interactivity API to handle typical front-end interactions—like clicks, hovers, form submissions, or dynamic content updates—by directly manipulating the Document Object Model (DOM) rather than relying on separate JavaScript frameworks or libraries.

\n\n\n\n

The Block Developer Cookbook: WCEH 2025 Edition with Ryan Welcher. Expand your block development skills with hands-on guidance and real-world examples.

\n\n\n\n

Plugins, and Tools for #nocode site builders and owners

\n\n\n\n

In episode 445 of the WPBuilds podcast, Nathan Wrigley interviews Nick Hamze, a lawyer-turned-Pokemon-card-shop-owner who builds peculiar WordPress blocks using AI. Hamze championed fun over convention, running Automatic’s merch operations before launching Izzy’s Gym. Armed with Telex, he constructs dozens of quirky blocks—dice rollers, glitchy text effects, custom integrations—in minutes. He dismisses distribution concerns, arguing WordPress needs personality restored; creation trumps monetization. Hamze advocates democratizing development: AI enables everyone, not just coders, to build niche solutions.

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

In his post Breadcrumbs Reimagined. Again., Justin Tadlock announced the update to version 4.0 of his Breadcrumbs block plugin. The update makes previously developer-only features available in the editor, including customizable labels and options for post taxonomy. The public API has been simplified, now offering easier function calls and JSON-LD support for SEO. While the change may affect some users, the plugin now allows for advanced breadcrumb setup without needing coding skills, while still providing robust tools for developers. Check out the full changelog with all the updates.

\n\n\n\n
\"Screenshot
\n\n\n\n
\n\n\n\n

Andrew Butler, a Content Strategist over at WordPress VIP, reported on the future of collaborative editing and how it’s making teamwork way easier. Think Google Docs-style editing right in WordPress! Now, multiple folks can jump in and edit posts together, seeing each other’s cursors and presence indicators in real time. Plus, those in-line Notes are super handy for providing feedback without having to leave the editor. WordPress VIP tested and implemented what will come to WordPress core in upcoming releases. Anne McCarthy mentioned contributor efforts in her Update on Phase 3: Collaboration efforts (Nov 2025)

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

Joe Fylan shared via WordPress.com blog, 12 Cool AI-Powered WordPress Blocks Made with Telex, showcasing Automattic’s free browser-based Telex tool that transforms plain-language descriptions into functional WordPress blocks. Featured blocks range from interactive games like Minesweeper and personality quizzes to practical tools like recipe publishers, weather forecasters, and scroll indicators. If you have an idea for block but are not a programmer, you can create, customize, download, and share blocks without coding knowledge, making block development accessible to everyone.

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

If you are keen to learn how to do some more comprehensive prompting, Check out Tammie Lister‘s site Blocktober.fun where you can look at her collection of blocks and the instructions she gave to the AI.

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

Jake Spurlock shared an update on his Raptorize plugins to bring it into the block ear: Raptorize It: 15 Years Later, Now With Blocks. “Look, I could tell you it’s about maintaining legacy code or demonstrating modern WordPress development practices. And sure, those are valid reasons. But really, it’s 2025 and the world still needs more velociraptors on websites. Some traditions are worth preserving.”, he wrote. You can see it in action on my other site. Switch on sound for the full experience.

\n\n\n\n
\"Still
\n\n\n\n
\n\n\n\n

New in the WordPress Plugin repository: Any Block Carousel Slider by Arthur Ballan, aka Web Lazer, a freelancer from Rennes, France. It stands out as it is implemented with CSS only. A “carousel slider block plugin that instantly converts supported native WordPress blocks (Query Loop/Post Template, Group, Gallery) into a responsive carousel slider without adding a dedicated block or loading a JavaScript library.” Ballan wrote in the description. I tested it with a few images and it’s super fast.

\n\n\n\n
\"Screenshot
\n\n\n\n
\n\n\n\n

Wes Theron published another short tutorial using WordPress. This time on how to create a custom 404 page, a page that’s displayed when someone comes from a bad or broken link. He walks you through the process of changing the template and also shows a few examples you can use as inspiration.

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

Themes, Blocks and Tools

\n\n\n\n

Rich Tabor started a new series called WordPress Explorations, “where I’m exploring new, far-out ideas about WordPress”. In his first post, Pages & Layers, Tabor explores a WordPress interface concept addressing user confusion: navigating pages requires leaving the editor entirely. He proposes a persistent sidebar with tabbed navigation between pages and block layers, allowing seamless page switching and creation without context-switching.

\n\n\n\n

As a follow-up to his post on styling an accordion block, Justin Tadlock published Snippet: Schema.org microdata for Accordion block FAQs. It’s a short example of how to add structured data for FAQs via the HTML API in plugin of functions.php.

\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

In his livestream Using every Interactivity API feature in one site: Part 2, Ryan Welcher continues his series on the Interactivity API and his attempt to build something that uses every directive and feature it offers. Part 1 is also available on YouTube.

\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
\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: AI generated.

\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
\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 Nov 2025 01: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: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:37;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"Matt: Kanye’s Back\";s: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=150571\";s: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:34:\"https://ma.tt/2025/11/kanyes-back/\";s: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:1471:\"

In case you missed it, Kanye has started apologizing for the event he went through. I didn’t comment on it publicly when it happened because it seemed so strange to me that such a beautiful soul, who had created so much life-changing music with so much love, could express such hate. I’ve had close friends who are bipolar, so I’m familiar with the disease, and seeing Ye’s episode was really heartbreaking, both for the things he was saying and also that it was clearly a medical issue, unfortunately, playing out in the public sphere. (I can’t imagine anything worse.) Every saint has a past and every sinner has a future.

\n\n\n\n

Who knows what’s next, but hopefully this is the start of a new generative era for Ye, who clearly has the ability to innovate across many fields. Especially with no rap songs in the Billboard 40 for the first time since 1990! It does feel like we’re living through a New Renaissance right now, there’s an explosion of creativity and access. I’m wishing Ye peace and equanimity with the challenges he’s facing, and I’m definitely going to revisit some of his early work (The College Dropout (ha!) through Cruel Summer) that was so influential on me as I was growing up.

\";s: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 Nov 2025 08:59:55 +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:38;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:60:\"Jake Spurlock: Raptorize It: 15 Years Later, Now With Blocks\";s: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:33:\"https://jakespurlock.com/?p=51971\";s: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:77:\"https://jakespurlock.com/2025/11/raptorize-it-15-years-later-now-with-blocks/\";s: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:4407:\"

Fifteen years ago, I released a WordPress plugin that answered a question nobody asked: “What if your website needed more velociraptors?” The Raptorize It plugin took the brilliant jQuery work from Zurb and made it dead simple to unleash Jurassic proportions on any WordPress site.

\n\n\n\n

The motivation back then was simple: you’re deep in a coding session, fueled by questionable snacks, and you realize your project is missing something critical. Not another feature request. Not better documentation. A velociraptor.

\n\n\n\n

What Was Old Is New Again

\n\n\n\n

Fast forward to 2025, and the web has changed significantly. WordPress has evolved from the simple days of jQuery-powered effects to a modern block editor powered by React. The old Raptorize It plugin still worked, but it was time for an update.

\n\n\n\n

I recently modernized the entire plugin to work seamlessly with current WordPress versions (5.0+) and PHP 8.0+. But more importantly, I brought it into the Gutenberg era with two new ways to raptorize your content.

\n\n\n\n

New Gutenberg Blocks

\n\n\n\n

1. Invisible Raptor Block

\n\n\n\n

The Invisible Raptor block lets you add raptor functionality anywhere on your page with a visual editor interface. In the block settings panel, you can:

\n\n\n\n
    \n
  • Enable Konami Code: Trigger the raptor with the classic ↑ ↑ ↓ ↓ ← → ← → B A sequence
  • \n\n\n\n
  • Enable Timer: Automatically trigger the raptor after page load
  • \n\n\n\n
  • Adjust Timer Delay: Control exactly how long visitors have before the inevitable
  • \n
\n\n\n\n

The block is invisible on the frontend (hence the name), but shows you which triggers are active right in the editor.

\n\n\n\n

2. Raptorize Button Variation

\n\n\n\n

For a more direct approach, there’s now a Button block variation that adds a “Raptorize Button” style option to the core WordPress button block. Visitors click the button, raptor appears. Simple. Elegant. Prehistoric.

\n\n\n\n

What’s Under The Hood

\n\n\n\n

For the developers curious about what changed:

\n\n\n\n
    \n
  • Utilized better internal WordPress APIs for script enqueuing.
  • \n\n\n\n
  • Updated jQuery from .bind()/.unbind() to .on()/.off()
  • \n\n\n\n
  • Added comprehensive PHP CodeSniffer configuration (WordPress-Core, WordPress-Docs, PHPCompatibilityWP)
  • \n\n\n\n
  • Built block development workflow with @wordpress/scripts
  • \n\n\n\n
  • Set up automated WordPress.org deployment via GitHub Actions
  • \n\n\n\n
  • Added wp-env configuration for local testing
  • \n
\n\n\n\n

The entire codebase now follows modern WordPress coding standards and passes all linting checks.

\n\n\n\n

Try It Yourself

\n\n\n\n

The updated Raptorize It plugin is now available for download at the WordPress Plugin Directory.

\n\n\n\n

You can also explore the complete codebase and contribute to future developments on GitHub.

\n\n\n\n

Why Though?

\n\n\n\n

Look, I could tell you it’s about maintaining legacy code or demonstrating modern WordPress development practices. And sure, those are valid reasons.

\n\n\n\n

But really, it’s 2025 and the world still needs more velociraptors on websites. Some traditions are worth preserving.

\n\n\n\n

Now if you’ll excuse me, I have a Konami code to input.

\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:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Wed, 12 Nov 2025 23:16: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:13:\"Jake Spurlock\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:69:\"Akismet: Version 5.6 of the Akismet WordPress plugin is available now\";s: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:\"http://akismet.com/?p=284654\";s: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:37:\"https://akismet.com/blog/akismet-5-6/\";s: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:628:\"

Version 5.6 of the Akismet plugin for WordPress is now available. In this release, we’ve improved performance, updated the setup process to more clearly explain errors when they happen, and cleaned up and standardized our UI across all of the Akismet wp‑admin screens.

\n\n\n

\n\n\n

To upgrade, visit the Updates page of your WordPress dashboard and follow the instructions. If you need to download the plugin zip file directly, links to all versions are available in the WordPress plugins directory.

\";s: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 Nov 2025 16:55: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:17:\"Christopher Finke\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:94:\"WPTavern: #193 – Roger Williams on How We Might Reimagine Sponsoring WordPress Contributions\";s: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=200658\";s: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:108:\"https://wptavern.com/podcast/193-roger-williams-on-how-we-might-reimagine-sponsoring-wordpress-contributions\";s: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:57604:\"
Transcription
\n

[00:00:19] 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, how we might reimagine sponsoring WordPress contributions.

\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 wp tavern.com/contact/jukebox, and use the form there.

\n\n\n\n

So on the podcast today we have Roger Williams. Roger leads community and partner engagement at Kinsta, a company specializing in offering managed hosting for WordPress. His role involves bridging the gap between Kinsta and the wider WordPress community, working closely with agency partners, technology collaborators, and open source initiatives.

\n\n\n\n

Throughout his career, Roger has been deeply involved in community efforts and has recently played a key part in Kinsta’s implementation of a sponsored contributions program, helping to funnel time and resources back into WordPress and other open source projects.

\n\n\n\n

Many longstanding members of the WordPress community have contributed out of passion and a spirit of philanthropy, but as the project has grown to power over 40% of the web, the need for sustainable funding and sponsorship has become more pronounced.

\n\n\n\n

Roger joins us today to explore this shift. He shares insights from his WordCamp US presentation titled Figuring Out Sponsored Contribution. Discussing how companies can start funding contributors, why that matters, and how to balance the business need for a return on investment with the grassroots spirit of open source.

\n\n\n\n

We begin with Roger’s background, his work at Kinsta, and how he became involved in WordPress community sponsorship.

\n\n\n\n

The conversation then gets into the ever evolving dynamics of sponsored contributions. How businesses can approach funding contributors. Ways to surface and support valuable work, and strategies for aligning company goals with broader project needs.

\n\n\n\n

Roger breaks down the practical arguments companies can use to get internal buy-in, and the importance of clear processes for both organizations looking to sponsor, and individuals seeking support.

\n\n\n\n

Towards the end, Roger reflects on the challenges and opportunities of connecting those both from the philanthropic and commercial sides of WordPress, and he shares advice for anyone hoping to get their organization involved in similar programs.

\n\n\n\n

If you’re interested in how WordPress sponsorships work, how business and community might collaborate, or you’re seeking practical advice as a contributor or company, this episode is for you.

\n\n\n\n

If you’d like to find 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 Roger Williams.

\n\n\n\n

I am joined on the podcast by Roger Williams. Hello, Roger.

\n\n\n\n

[00:03:46] Roger Williams: Hey Nathan, how are you?

\n\n\n\n

[00:03:47] Nathan Wrigley: I’m very good. We could pretend that we’re recording this at WordCamp US because that was the plan, but it never happened for one reason or another. So we took it offline. And several weeks ago, WordCamp US finished, but the intention was very much to talk about what you were presenting at WordCamp US. So we’ll get into that in a moment.

\n\n\n\n

Before we do that though, Roger, would you mind just telling us a little bit about who you are, who you work for, what your role involves, all to do with WordPress, I guess.

\n\n\n\n

[00:04:14] Roger Williams: Yeah, no, absolutely. So my name’s Roger Williams. I work at Kinsta, managed hosting provider for WordPress. Currently my position is partnership and community manager for North America. Very long title. What does that mean? My job is to interface with the public, with the WordPress community, with our agency partners and various technology partners, and just make sure that we’re all on the same page, and that whatever’s going on outside of Kinsta is getting communicated inside of Kinsta, and whatever’s happening inside of Kinsta is getting communicated outside. So I’m basically boiling the ocean. So a very easy thing. No problem at all.

\n\n\n\n

Truth be said, it’s one of the, this is like the highlight of my career, I have to say. I get to travel, I get to meet a lot of neat and interesting people, I get to make amazing friends, and I get to talk about technology, the web, WordPress and Kinsta hosting, which are all things that I’m very passionate about and enjoy talking about this ad nauseam. You can ask my wife, that I am probably too much, need to turn it off a little bit.

\n\n\n\n

But specifically talking about community and WordPress, gosh, it was January of this year, 2025, that we implemented our sponsored contributions program, and I played a role in that. I played a role in getting the conversation happening around that inside of Kinsta. And then once we got budget approval, actually figuring out, hey, who do we want to sponsor? What projects outside of WordPress? Because we also sponsor various open source projects that affect us directly and indirectly.

\n\n\n\n

And so that has been a whole new aspect of my career that has really opened up new doors and opportunities and discussions and friendships that I’m still feeling like a bit of an interlocutor. I’m an outsider trying to understand how to best do this, and play a part in helping the projects that we all depend on to do all of our work.

\n\n\n\n

[00:06:17] Nathan Wrigley: Nice. Thank you. Yeah, there’s a lot in there to unpack, isn’t there? It sounds like a full and varied role, but also you kind of sound a little bit like you’re figuring this out over the course of 2025 and into 2026 and who you are sponsoring and what have you. And that was very much the tenor of the talk.

\n\n\n\n

So the title was very simple. The presentation that you gave was simply called figuring out sponsored contribution. But I’ll just read into the record the blurb, not all of it, but much of it because it will give everybody who’s listening an idea of where you were going with that. So it says, open source software runs on passion, but passion doesn’t pay the bills. WordPress powers over 40% of the web, yet many people maintaining it aren’t funded. That’s starting to change and your company can be part of it. In this talk, we’ll explore how sponsored contribution works, why it matters, and how companies big and small can participate. We’ll walk through my experience, AKA your experience, working with companies to sponsor contributors from promoting the idea internally, identifying key areas of the WordPress project to support, finding and interviewing contributors, and building an internal framework for long-term sponsorship. And there’s a little bit more, but that basically sums it up.

\n\n\n\n

So basically, I guess my first question is, what exactly are you trying to do here? Are you kind of regarding this as a sort of philanthropic thing? What I’m really kind of asking is, do you kind of expect things in return? So if Kinsta, for example, sponsor somebody, do you have like a tick list of things that we need to see that you’ve done? Or is it more, you are a trusted person, we’ve seen you interacting in the WordPress space for many years, here’s a bunch of cash, go off and just do whatever you like?

\n\n\n\n

[00:07:53] Roger Williams: Yeah, excellent question. And thanks for reading that blurb. I don’t think I’ve read that blurb in quite a few months and it sounds really good.

\n\n\n\n

[00:07:59] Nathan Wrigley: It was a great talk.

\n\n\n\n

[00:08:00] Roger Williams: Somebody really put something together here. Really interesting question and I think this kind of gets to the core of what I was trying to talk about in this talk, in the exploration that I’m trying to figure out in my own head, figure out inside of Kinsta, and possibly figure out in the larger community.

\n\n\n\n

There’s a lot of humility involved in this Nathan, I hope you can appreciate. I feel a lot of the times very, the imposter syndrome, right? Wow, I’m coming into a project that’s over 22 years old. Many, many thousands of people have been involved. Many, many companies have been involved in this. Here’s this new guy, you know, I mean I’ve been around for a little while, but relatively new guy on the scene just coming in trying to tell people how all this is done. And I really hope that it doesn’t come across that way. I’m really trying to explore this topic and understand it better for a few reasons.

\n\n\n\n

The first one is the most immediate. How can I get Kinsta involved in contributing and sponsoring WordPress and other open source projects? And so there’s a combination of things happening there, right? And you brought it up in terms of, are there tangible things that we’re looking for here? Or is this simply just philanthropic, hey, we’re giving money away and everything will work out?

\n\n\n\n

And I think that there’s a spectrum. And we’re playing on the spectrum with it. Traditionally, and this is something that I talk about a lot in the talk is, traditionally in open source the argument has been that I’ve seen, hey, you’re using this software, you should give back to the software and to the project.

\n\n\n\n

But then you have on the other side the business that is very much, hey, we need to generate revenue from our activities so that we can remain a business.

\n\n\n\n

And so they’re a little bit at odds in some ways, right? But it doesn’t have to be that way. And I think that’s what I’m exploring in this talk, and I’m exploring in this conversation, and as many conversations as I can have with people is, how do we play on that spectrum of finding a happy medium where for a company, a lot of times you go to the executives and you’re like, hey, we need to be giving back to this thing that we get for free? And you get a very perplexed look. And so I think we need to adjust that conversation.

\n\n\n\n

I think that the people that are inside of the project, it’s very obvious. Hey, we put a ton of time and effort into making this happen. Whether you give back in terms of time and actually help us work on the project, or give us money so we can sponsor people and pay for hosting costs and different things involved in it, to make the project happen. I think it’s very obvious for people inside of the project how that works.

\n\n\n\n

It’s less obvious, and I kind of see there’s three groups in all, right? You have the people inside of the project, very obvious. There’s very little argument needs to be made.

\n\n\n\n

You have the second group, which is somewhere like, a Kinsta will fall into, or someone like myself, who I’ve used open source software for many years, but I don’t necessarily see exactly how to contribute back, or the immediate benefits, or the need, right? Hey, this thing’s already here. I can go to the website, click download, and I’ve got it. There’s that group that kind of see it but they need a little nudging.

\n\n\n\n

And then there’s the general public or people that just don’t really interface with open source software directly and just have no idea. They’re just like, whoa, what is going on over there? People are just working on stuff for free and giving it away for free. That’s crazy. And so there’s another conversation that needs to happen there.

\n\n\n\n

I think with this specific talk, the group I’m trying to get to is that second group. The people that are just right there, it’s just in a little bit of nudging of like, hey, you’re really close to understanding the benefits of sponsoring and contributing back to the project. What are we missing in the conversation to really get them to understand it? So the answer I’m proposing is we need to talk more about return on investment and ROI, and how do we frame that?

\n\n\n\n

So really long-winded answer here, but I think that there’s a mixture of what are the things we’re trying to achieve by giving back? How can we bring that back in a business sense to show executives, hey, look, the money that we’re putting out here is benefiting us in certain ways?

\n\n\n\n

But then also being like, hey, there’s also just kind of this nebulous aspect to it of, if you help contribute to it, it will give you some benefit. So how do we balance and how do we find the spectrum here to land on? I hope that that made some sort of sense.

\n\n\n\n

[00:12:36] Nathan Wrigley: Yeah, it does. And it’s interesting because where you got to about a third of the way through the answer, I think you said the word tension or conflict or something like that. But I think that’s a really interesting part, because if we were to rewind the clock to, let’s say 19 years ago when WordPress was still relatively new. I wasn’t around in the WordPress space, but I was involved in other open source projects at the same time. And philanthropy was the word.

\n\n\n\n

There were just people donating loads of time because it was more or less this hobby thing. And then in some cases the hobby thing collapsed and nobody ever heard of it again. And in the case of some software projects, WordPress most notably, it took off. It just absolutely skyrocketed and became the underpinning of, as you say in the presentation notes that you made, kind of 40% of the web. It became this critical piece of the puzzle.

\n\n\n\n

And so during the last 18, 20, 22 years, whatever it may be, the project has evolved. It’s become critical. Like it or dislike it, companies both big and small are now relying upon it. They require it as part of their business, Kinsta being one of those companies. And so this tension exists. How do the companies do their bit and how do the individuals do their bit?

\n\n\n\n

And the tension that I feel is, on the one hand, the people who’ve got that heritage of the more philanthropic side sort of saying, can’t we just go back to how it was? Can we never talk about finance? Can we not think about money at all?

\n\n\n\n

And then on the other hand, you’ve got places like where you work, who are, with the best will in the world, it’s about making some revenue, and making money, and paying the bills and all of that. You’ve got to figure out, how the heck do you make contributions? How do you justify that to your bosses? How do they communicate what they’ve done effectively?

\n\n\n\n

And presumably part of your talk as well is about finding people that you would like to just give some money to as a helping hand to say, okay, off you go. You’re not a part of the Kinsta organisation, but we would like to help you. And in return, presumably there’s a bit of mutual back rubbing. We’ll pat your back, you pat ours, and so on and so forth. So hopefully I’ve parsed that about right?

\n\n\n\n

[00:14:39] Roger Williams: Yeah, no, I think you’re laying it out very much as I’m going through in the talk is, we need to talk business. And I know that for a lot of people inside of open source, this can be cringey and not pleasant and not what we want to do. And my argument is we have to get over that phase. We have to learn to start talking business and thinking business, thinking about return on investment.

\n\n\n\n

And so to me it’s becoming practical, right? We have this optimistic idea of like, well, people will just come to their senses and realise that if they sponsor and contribute to the project, it’s going to help them. And we need to be much more strategic and more practical about it. And I break it down into three reasons to start kind of looking at when you’re talking to executives, you’re talking to businesses. And so there’s strategic, operational and second order benefits.

\n\n\n\n

So when I’m talking about strategic benefits, I mean this is where it’s just obvious, right? For a hosting company that does WordPress, it just makes sense. Like, if WordPress isn’t working well, then we’re going to have trouble with our product. So strategically, it makes sense if WordPress works well, if it’s performing, if it’s secure, this is going to lower our cost as a hosting company. So those are arguments to be putting forward there.

\n\n\n\n

From an operational perspective, you can start talking about technical debt, right? And this is where the CTO’s eyes should light up, because technical debt is a real problem for any company that builds software. As you’re building software, you now have to maintain that software. Well, if you’re able to offload part of that software into the open source project, it now becomes something that the open source project maintains. It’s the technical debt of the project.

\n\n\n\n

That now creates a vicious cycle, or not even vicious, but just a cycle of, you now need to contribute to the project to help maintain that technical debt. But you’re now, as an organisation, offloading that to a larger organisation and having more people being able to help maintain that software. So I think from an operational perspective, those are arguments that you can hit people with.

\n\n\n\n

And then finally, the second order benefits, and this is really where it kind of encompasses the arguments that have been traditionally the philanthropic argument, the just maker taker argument and stuff like that. With second order benefits, you start seeing these additional benefits that maybe you can’t exactly measure.

\n\n\n\n

This is where networking is happening. People are meeting and talking to each other. Maybe your developers are talking to their developers, or in the case of sponsoring contributors, those contributors can come into your organisation and help the organisation maybe understand how to use WordPress better and these different benefits.

\n\n\n\n

And so breaking it down into these practical arguments, these practical reasons for contributing can really help people who are not necessarily as well versed with open source or don’t directly see the benefits, see that a little bit better.

\n\n\n\n

And then getting into what you’re also talking about, finding contributors who, maybe they align with your values, making sure that they’re working on the stuff that you need them to be working on. The parts of the project that could use attention as far as your organisation is seeing.

\n\n\n\n

And then also, you know, one of the big things I look for is contributors who are mentors and are helping other contributors get into the project and help to grow the project’s contributions overall.

\n\n\n\n

There’s direct, tangible things. Hey, there’s this ticket, could you go work on this ticket? I’ll be honest, I’m not that in depth yet. I’ve had contributors be like, hey, usually organisations are that pointed. And I’m like, okay, well there’s a goal for me to achieve at some point.

\n\n\n\n

But for me it’s more like, hey, are you doing good work? What are other people saying about you in the project? And then, are you mentoring people and helping other people do their first bug squash, and do their first push and commit and things like that? And I’m butchering the language of course here but, you know, I hope that that kind of helps answer some of those questions.

\n\n\n\n

[00:18:36] Nathan Wrigley: Yeah, it’s interesting because I fear that there’s a possibility that the community kind of bifurcates along these lines at the moment. So you get the people, and I was using the word philanthropic, so the people that have been contributing their time for gratis, just because they saw that as a useful thing to do for humanity, let’s put it that way.

\n\n\n\n

So there’s that on the one hand. And then on the other hand, you’ve got people such as yourself who are talking about the necessary things in order for your job and your institution to function, the money. And I suppose I’m kind of worried that we will have these two sides that kind of can’t figure out a way to communicate with each other, that can’t see across the chasm that has been created. And so figuring out ways to make those work to sort of have a happy balance so that the two sides can communicate, that they can be back in touch with each other.

\n\n\n\n

So that’s kind of a concern that I have, this sort of two tier system. The fear more broadly is that, if the money side of things becomes more prevalent, and people find that intolerable, that ultimately will push people away who have been philanthropic and amazing in the use of their time and pushing the project forward. They’ll see this as something that they can’t cope with in the future, and they’ll wish to step away, not contribute to it. That would be a shame.

\n\n\n\n

[00:19:52] Roger Williams: So I can absolutely empathise and understand the argument that you’re putting forth there. I think the way I would counter that is to say, hey, currently if we’re only going to talk in a philanthropic sense, are we just going to exclude everybody from what you’re talking about, the second tier, right? The more money focused. So we’re just not even having a conversation in that case.

\n\n\n\n

[00:20:15] Nathan Wrigley: Right. That’s the concern, yeah.

\n\n\n\n

[00:20:17] Roger Williams: So what I’m trying to argue is, hey, by bringing in more people into the project and maybe starting to talk in these practical ROI business terms, were now at least having a conversation that before wasn’t even happening. Because just to kind of back up a second, the way I’m looking at it is, if the only argument is, hey, this is philanthropic, you’re doing it for the good of the project, kumbaya, then we’re just going to exclude a lot of the business community who’s going to go, well, yeah, I volunteer time on the weekend at my church, or do different things, but I need to do business during the week so I can buy groceries and pay the rent.

\n\n\n\n

And so I think what I’m trying to suggest is, hey, if we expand the conversation beyond just philanthropic, beyond just the second order benefits, and we talk about operational and strategic benefits in addition, we’re now adding more people to the conversation that weren’t in the conversation before.

\n\n\n\n

And eventually we’re bringing them into the second order conversation, but we have to start by bringing them in with the strategic and the operational, because that’s where their mindset is in the nine to five. And so to me, I think this is the opportunity to actually expand the pie and expand the amount of people in the project and talking about the project.

\n\n\n\n

The concern I see that is a fair argument and concern is, are we going to turn open source projects into just commercial enterprises? That is definitely a concern. I don’t see that happening because you still have the core people in the project. They’re doing it because they believe in what the project is and they have passion for it. And if they are able to expand and have these conversations, these larger conversations, or additional conversations, about strategic and operational benefits, we’re going to bring more people in and hopefully help to influence those people to see the second order benefits, and hopefully eventually it’s all just philanthropic, right?

\n\n\n\n

But I think right now, the argument that has been put forth by different people in open source and in the WordPress community, is that we don’t have enough people contributing. We don’t have enough sponsorship money coming in, and so we need to figure out how to bridge that gap. And my suggestion is the way to do that is to expand the conversation beyond just the philanthropic, beyond just the second order, and talking about strategic and operational in addition to those.

\n\n\n\n

[00:22:40] Nathan Wrigley: I have so many thoughts about this. So the first thing that comes into my head is trying to bridge a gap between the people out there at the moment who have been contributing. But you go around on Twitter, X, I guess, and you see people, don’t you? You see it all the time. They even sometimes change their Twitter handle to, you know, seeking sponsorship or something like that.

\n\n\n\n

But periodically you’ll see somebody who you know has been in the WordPress space for many years and, I don’t know, maybe they have been contributing in some way, shape, or form, but it’s pretty clear that they would like to be sponsored for this particular rabbit hole that they’ve gone down. And so building a bridge to them is something I think really useful about what you’re saying.

\n\n\n\n

Because maybe there is no way of these two sides talking to each other. Maybe there is no kind of like a la carte menu, if you like. If you are one of these philanthropic contributors, and you’ve never sought sponsorship before, but you’d like the idea of, well, wouldn’t it be nice if, for these two days a week that I typically contribute my time, wouldn’t it be nice to get some finance? I’ll do the exact same thing, but I’ll actually receive some money for that.

\n\n\n\n

But I don’t have the time to go out to a hundred different companies with my, I’m going to use the word begging bowl. That is probably the wrong term, but you get the point. To these a hundred different companies saying, look, I’ve been doing this for ages. Can you help me out?

\n\n\n\n

That kind of feels, there’s something quite icky about that, isn’t there? I think we can all identify that going out and sort of saying to companies repeatedly, please can I have some money? And then getting the inevitable 99% pushback. No, we haven’t got any money for you.

\n\n\n\n

But I think what you are saying is you are going to build a system where that kind of stuff will be more obvious. Where you’ll say, these are the kind of things that we’re looking for. Here’s the application form if you want to sponsor. This is the kind of process that we’re going to go through. These are the interview questions that we’re typically going to answer. This is the pot of money that we’ve got available. This is how many people we want, and so on and so forth.

\n\n\n\n

So it’s kind of bridging the gap, so that the people who have been contributing, who are maybe nervous or don’t see a way forward, can suddenly step into something more obvious, more a la carte, more straightforward and easy to kind of cherry pick.

\n\n\n\n

[00:24:46] Roger Williams: Yeah. I think that, you know, this is getting to the heart of it, right? How do you individually sponsor people? How do individuals find sponsorship? And how do we make this all work? And backing up just for a second , there’s two ways to look at contributing to open source projects.

\n\n\n\n

We’re talking a lot about sponsoring individual contributors, which I would argue is the best way for an organisation to get started, because it’s the easiest way in some sense, right? There’s an established person who’s working in the project. You are giving them cash to do that work.

\n\n\n\n

The other way to contribute to the project is to actually spend time working on the project, right? So maybe you’ve got engineers inside of the company and you’re like, okay, 10% of your time is, or 5% of your time you’re going to actually work on this project. That’s a much bigger ask, right? Because usually when you hire an employee, you have a very specific set of tasks that you need to work on them for the company.

\n\n\n\n

And so asking the manager to figure out, hey, how can this person give 5% of their time to something that’s outside of the company? That’s a bigger ask. So I think, for companies and organizations that are starting to dip their toe into contributing to open source, sponsored contributions is a great place to start.

\n\n\n\n

So that was a long way to get around to the question that you’re posing here, is how do you actually do that? There’s a chicken and the egg kind of situation that you’re bringing up, right? At what point does an individual contributor know that, hey, Kinsta is a company to reach out to, and ask for sponsored contribution. And then on the flip side, how does Kinsta know who to reach out to to sponsor?

\n\n\n\n

And so my suggestion is to create a couple of different systems. So first, from the organisational perspective, really understanding, what are the priorities for the organisation? What would benefit them the most by sponsoring individual contributors?

\n\n\n\n

My argument is it’s a pretty wide swath. A lot of people get focused on core contributors and, actually working on tickets and things like that. I think it’s a much broader effect. I think sponsoring people that are on the Polyglots team, Kinsta, over half of our customers don’t speak English. So having WordPress in non-English versions is huge for us. So sponsoring the Polyglots team.

\n\n\n\n

The documentation team is huge, right? People need to be able to use WordPress . So are they going to contact Kinsta support for how to use WordPress, or can they just go to the WordPress site and look at documentation?

\n\n\n\n

So as an organization, you can get really strategic on this, but my argument would be, don’t overthink it at the beginning. Just get started. And I think that’s how I kind of end my talk is, my biggest piece of advice is don’t wait. Just get started. Set aside some budget that you’re comfortable with, that your executives are comfortable with, and then go and find some contributors.

\n\n\n\n

And then have kind of a process, right? Have an intake form. You mentioned having an intake form. Have an intake form. Ask them questions about, what do they currently work on? What have they worked on in the past? What are their hopes and goals and aspirations on the project?

\n\n\n\n

And then, you know, some very practical questions. Hey, would you be open to doing a blog post about your work and how Kinsta has helped with this? Very low level asks, right? We’re not trying to ask people to get a tattoo of the logo on their forehead or something insane. It’s very low effort, and my argument to companies is be very cautious. Step lightly into the marketing aspect of all of this. That should not be your primary focus.

\n\n\n\n

The primary focus is contributing to the open source project, not getting all this marketing benefit out of it. And so, you know, make sure to frame it that way.

\n\n\n\n

From the individual contributors thing, one thing I do point out is, up until recently, I’ve never actually been formally approached by somebody asking for sponsorship to contribute. You kind of talked about, hey, if someone needed to spend a time reaching out to a hundred different companies, you don’t need to go that crazy. Just reach out to like the major hosting companies to start.

\n\n\n\n

But my argument is you need to do more than just say, hey, I work on WordPress, you need to sponsor me. You need to put together a little bit more of a pitch of, hey, I work on X, it accomplishes Y. I see this benefiting your organisation in these specific ways. And if you’re approaching it that way, that’s going to catch someone’s attention much better.

\n\n\n\n

You know, and then just ask also just simple questions. Hey, do you have a formal sponsorship contribution project for WordPress? And if they say no, maybe, hey, would you like me to help you set that up? If they say yes, then it’s, hey, what’s the process for getting involved in that?

\n\n\n\n

These are just very simple questions. It’s just a conversation, right? I say this, I’ve been in sales for decades now. It’s second nature to me. I understand that for a lot of people, this isn’t second nature for them. And that’s also what I’m trying to help with in this conversation is, it’s not just the organisations I’m trying to educate, but it’s also the contributors and the people that are in the project. Helping them to understand how to speak business a little bit more, so that they can get the businesses to really understand the benefits of this.

\n\n\n\n

[00:29:58] Nathan Wrigley: There was a few things that you said a few moments ago where the implication was basically just get started. So put aside some cash, decide that you’re going to do it, so this is from the business side, and then just begin and see what happens. I don’t suppose you’re going to be able to simulate the perfect system first time around. It’ll be an iterative process, but just commit to it.

\n\n\n\n

But the ROI thing was also kind of interesting because you know, if you are senior management in Kinsta or whichever hosting company you want to imagine, there’s got to be I suppose some aspect of that in the back of your mind. Okay, we’re going to give away, I don’t know, a hundred thousand dollars this year, but we’re not going to ask anybody at all, at any point to sort of mention our company name. That’s probably unrealistic, but I like what you said there about the gentle approach to it, the write a blog post about it.

\n\n\n\n

But there’s something to be explored there because there’s got to be a way of surfacing good work. So it doesn’t have to necessarily be a big clarion call. Look, I did this because Kinsta paid for it. More tangentially, I did this great work and I did this, and WordPress benefited as a result of this, and I would just like to thank Kinsta for making that possible.

\n\n\n\n

I guess we’ve just got to figure out what that piece looks like because, you know, you can’t give away money for free. There does need to be some ROI, but we have to figure out how gentle that approach is, and how gung ho it can be or not. That’s going to be interesting to figure out.

\n\n\n\n

[00:31:22] Roger Williams: Just to kind of elaborate on that for a second. So the way I would say to companies to approach looking at this is, this is branding, right? And so when you’re doing brand marketing, it’s very nebulous, right? You’re kind of putting stuff out there and there’s a little bit of goodwill to it, I guess, you know, the philanthropy part plays into it a little bit. This definitely, I would say, falls under your branding budget. And so you should treat it as such.

\n\n\n\n

I think that there’s a few different ways that the marketing, and I’m using air quotes around marketing here, because I understand that for people in open source this can be a little bit of kryptonite, a little bit repellent to talk about it this way. So I’m trying to be cautious or gentle here.

\n\n\n\n

But I think the marketing benefits are, there’s a ton of indirect benefits, right? So if I’m sponsoring a contributor, and they’re working on the project, it means they’re interacting with other contributors of the project. They’re going to mention, oh, hey, by the way, Kinsta is sponsoring me, in conversation.

\n\n\n\n

And now you’ve got that one-on-one marketing, as it were, happening where that’s getting put into the project and that gets noticed. And I think that’s my big urge to companies who really want to step on the pedal of ROI. Like, hey, we need to really maximise the ROI here. Is it’s like, hey, the community notices as soon as you do something, good, bad, or indifferent. But as soon as you start sponsoring people, it gets noticed inside of the community right away, whether you immediately see it or not.

\n\n\n\n

So allow that to happen, for sure. I think from like the blog posts and things like that, there’s two ways I approach it. I love it if a sponsored contributor writes a blog post on their blog and mentions Kinsta. That’s amazing. I’m not expecting that. So instead what I’ll do is I’ll invite them onto the Kinsta Talks podcast and, hey, let’s spend 20 minutes and just talk about what you’re doing on the project.

\n\n\n\n

I mentioned Kinsta at the beginning of it, in the fact that that’s where I work. Other than that, I don’t talk about Kinsta at all. It’s all about this individual and what they’re doing on the project, what they’re excited about, how they would suggest people get involved in the project. And so using that as a promotion, and again, the indirect branding benefits. My fingers are crossed, I’m sure my CMO’s watching this and going, either he is loving it or he is gritting his teeth. I get the sense everybody’s very happy. Hey Matt, how are you?

\n\n\n\n

The way I am approaching this is very much as an outsider and I’m trying to be very respectful of the fact that this community’s been around for a very long time. I am sure this is not the first time that these conversations have happened. I’m not the first person to bring these things up. I just see it as, I’m here as a unique person in this point in time and I see a need and I’m, we’ve gotten our organisation to help, start helping. And what I’m trying to promote is getting other organisations to also realise this, and also start promoting and sponsoring and contributing to the project.

\n\n\n\n

[00:34:13] Nathan Wrigley: I think one of the things that will be really interesting is if, let’s say that you become the fulcrum for all of this, and so Roger Williams is known at Kinsta. He’s the person to go and speak to. Having that clarity is going to be really beneficial. So you don’t have to go through those email hoops of, okay, you just use the contact form on the website and then get put through nine different people who all say, actually it’s not me. Knowing who you’ve got to speak to, and having that clear process, that contact form, whatever that may be, that intake form that we talked about earlier, that’s really interesting.

\n\n\n\n

I’m just going to pivot it slightly, and I’m wondering what the kind of contributions that might fall into scope for you at Kinsta. So obviously the software itself, the core project, WordPress Core would I’m sure be in view.

\n\n\n\n

But what about other things like, oh, I don’t know, people who write documentation, you mentioned Polyglots? There’s obviously people who do event organising. There are people who do content creation, podcasts, YouTube channels, those kind of things. Do you have any constraints around the kind of contribution that you’d be interested in looking at, or will you listen to anybody?

\n\n\n\n

[00:35:16] Roger Williams: Excellent question. And before I dive into that, I want to make sure that I’m not the only person taking credit for this at Kinsta. I have two amazing colleagues on the front lines with me. Marcel Bootsman, as you’re very familiar with, I think he’s been on your show before, he handles for Europe. And then Alex Michaelson, who is in APAC region. These are both amazing individuals who, we all three of us are on the front line, talking with contributors, sponsoring them, figuring all of this stuff out. So I definitely don’t want to take all of the credit here and make it seem that way.

\n\n\n\n

As far as figuring out who to sponsor and who to contribute, this is the big question. The amazing thing is that this point in time, my bosses, our bosses at Kinsta have given us amazing leeway to really choose who we want to be sponsoring, and who we want to be working with.

\n\n\n\n

And so there’s a bit of objective focus for who we’re sponsoring. Core contributors obviously, like they’re directly impacting the project by actually changing the code and adding features and fixing bugs. So that’s obviously very important.

\n\n\n\n

But just as important is these other groups that are making sure that when a new person wants to use WordPress, there’s documentation that explains how to use the WordPress. When they want to go to a WordCamp and meet somebody, I mean Aaron Jorbin has a great story about meeting someone at one of the first contributor days that he went to. And they then became a core contributor within a short amount of time. And so that contributor day didn’t just happen, right? Like, people had to make that event happen, and organise it and have coffee and treats and lights and all of the things that go into that.

\n\n\n\n

So I think that there’s a lot of levels here. Whether it’s directly sponsoring a contributor inside of the open source project. It’s sponsoring WordCamps, it’s sponsoring amazing podcasts that help to spread the word and market WordPress.

\n\n\n\n

There’s people that have brought up that WordPress has kind of a marketing issue because it is this open source project that has just benefited from just a ton of people realising, wow, this is amazing software to build websites with. And they just started doing that, and 40% of the internet runs on WordPress.

\n\n\n\n

That’s happened very, very organically. And I think though that we’re now at an inflection of the internet and the web where we maybe need to start becoming a little bit more intentional about the marketing and the promotion of WordPress.

\n\n\n\n

[00:37:44] Nathan Wrigley: What I’m gathering from this is that, certainly from Kinsta’s point of view, you just want to make this whole bi-directional thing just clearer. Kinsta’s got some intention to sponsor, and we know who the people are, we know the kind of things that they want to sponsor. Maybe there’s going to be some sort of landing page for that or some intake form. And so hopefully people who have it in mind that they wish to be sponsored, they’ll be clearer on what kind of things are in scope, what kind of things are out of scope. How many people they need to jump through the hoops to get that sponsorship sorted out. So that kind of thing is really interesting.

\n\n\n\n

What do you think about the idea of, so we haven’t discussed this, I’m just going to throw this in there. Do you think this is a company by company thing? So in other words, is Kinsta always going to be siloed in its approach to sponsoring? Or is there any kind of, I don’t know how this would work, but some kind of more overarching approach that may be required? So let’s say for example that, I don’t know, Kinsta do, they sponsor person X, person Y, person Z, as we say in the UK, but obviously that leaves all these other myriad people without sponsorship. Is there a way that you could communicate to other organisations?

\n\n\n\n

Look, this person, they came to us, it was very close, but we didn’t manage to get them on the sponsorship roster this year. But we feel that they were really credible. Here’s somebody else that you can go and talk to. Do you know what I mean? Something just a little bit, a bigger umbrella organisation above Kinsta, maybe. Organisation, substitute that word for any kind of structure or governance as you like.

\n\n\n\n

[00:39:12] Roger Williams: Yeah, there is a lot of stuff already around this. Courtney Robertson has WPCC.

\n\n\n\n

[00:39:18] Nathan Wrigley: WP Community Collective.

\n\n\n\n

[00:39:20] Roger Williams: Thank you. And so the idea with that group is kind of to create an organisation that handles the mechanism aspect of distributing funds and finding people to sponsor and contribute. I could see a consortium of hosting companies coming together and somehow working on this, but that adds additional complexities, right? You have now more organisations, you have more bodies deciding things and making decisions.

\n\n\n\n

And again, going back to what I propose at the very end of the project is, don’t wait, just get started. My worry about having consortiums and larger organisations is it’s going to slow the process down, it’s going to complicate the process.

\n\n\n\n

That’s mostly just because I have a big phobia of organisations and meetings. This is a personal kind of thing rather than, you know, I’m sure there’s ways to figure this out more. I have a job, right? I have to balance all of these things between working on what I need to actually work on inside of the company. Working on sponsoring contributors and focusing on the open source. So there’s a lot of balancing that goes on. I am open to having these discussions with people and organisations and seeing what can come of it.

\n\n\n\n

Again, going back to feeling like an outsider and knowing that there’s already a ton of people and a ton of organisations involved in doing all of this work. I’ve reached out to many of them. They’ve given me great advice. They’ve really helped me get our program organised the way it is. They help me with my presentation and kind of figuring out what to talk about in here. And so I want to remain mindful that I don’t have all the answers, I’m not the only person that’s doing all of this, and I welcome people to come to me with suggestions and ideas, and I’m always open to talking.

\n\n\n\n

[00:41:03] Nathan Wrigley: I don’t think there’s one size fits all really, is there? Because the WPCC feels like a really great initiative. It has more of a kind of escrow kind of service feel to it. In other words, Kinsta, you put in your X amount of dollars and then the WPCC will figure out where that might go. But it may be that, you know, you guys at Kinsta would like to have more of a kind of one-to-one relationship with the people that you are sponsoring. And so that’s fine.

\n\n\n\n

Maybe you will have back channels to the people who do similar work at different companies. And so it will be more kind of laissez-faire than something a little bit more organised. Maybe it’ll just be more back channel kind of thing.

\n\n\n\n

But that’s really interesting. Honestly, the time has got away with us. We’re at 45 minutes so far, so I think we’re fast approaching the amount of time that we’ve got available for us. Is there anything in this that we missed out? Was there any kernel, any little nugget somewhere that we failed to mention, or do you think we’ve covered the whole thing off?

\n\n\n\n

[00:41:57] Roger Williams: You know, I think the one thing that maybe we skipped through a little bit is how to get your organisation bought into this. We’ve talked about the reasoning. We’ve talked about how to sell it from the outside. We’ve talked about how to deal with the individual contributors. Inside of your organisation there’s, again, three ways that I approach this. I like the number three, I guess.

\n\n\n\n

So when you’re making your internal pitch, this is all in the slide deck as well, understanding your organisational goals. So understand like, hey, we’re a hosting company, what’s important for a hosting company? Well, performance and security are pretty top things. So maybe that’s where you want to focus.

\n\n\n\n

Again, also we have a ton of customers that are non-English speaking, so Polyglots makes a lot of sense. Understand the organisational goals so that when you go to your executives, you go to your leadership, whoever’s got the money, you’re framing this out in terms of how it benefits your organisation.

\n\n\n\n

The second one is being patient, but being ready. So I started this conversation, I want to say late 2023, inside of Kinsta. And then about a year later, suddenly, out of the blue, hey, here’s your budget, go get to work. And so I needed to be ready. So we all needed to be ready. And we were. The good news is Marcel and Alex and myself, were already out in the community talking with people. We already were having some conversations about, ooh, who would we like to sponsor, who could use the sponsorship?

\n\n\n\n

And so as soon as the budget was given to us, we were ready to go. And the reason that I recommend being ready is, these can be fleeting, right? Just because the executive has approved it this month doesn’t mean it’s necessarily going to be there the next month.

\n\n\n\n

[00:43:37] Nathan Wrigley: And also the contributor might not be, you know, I’ve got two weeks now, I can do something right away.

\n\n\n\n

[00:43:42] Roger Williams: Yeah, so be ready because they’re going to want to see results. And the results should be, the way you framed it, the results should just be, hey, we’re sponsoring contributor X, they’re doing Y and Z, oh, and I had them on a Kinsta Talk, and here’s actual proof of we’re doing stuff. So have all of that ready to go. Have a spreadsheet that tracks everything so you can track where the money’s going and it’s all clear.

\n\n\n\n

Understand how your organisation wants to handle these things, right? Is it going to be as simple as, hey, here’s a credit card and here’s a GitHub sponsorship page? Is that going to be okay? Or does it need to be a little bit more, I say complicated, involved, right? Do you need to have a non disparaging contract, right? So that it’s understood, hey, we’re sponsoring you, it’d be best if you didn’t say bad things about us, please. Get that cleared, like figure that stuff out.

\n\n\n\n

And then be ready for common objections, right? So they’re going to immediately come to you with, hey, why would we spend money on this? It’s something that we get for free. And be ready with that strategic and the operational and the second order benefits conversations. And know which of those is going to land with which manager, executive best. So getting that internal pitch ready and really creating the project so it’s ready for success from day one is really important.

\n\n\n\n

[00:45:03] Nathan Wrigley: Yeah, that’s really interesting because a lot of it, most of what we talked about in this conversation didn’t really dwell on that. It was more about the nuts and the bolts of trying to connect the two different sides. But you’ve obviously laid out the groundwork inside Kinsta to have this ready. And then the minute that the CEO or the CMO or whoever it is, says, right, Roger, here’s some money, you’re off, you’re ready to actually go and start seeking this stuff out.

\n\n\n\n

I very much doubt that this conversation is going to have a perfect outcome. I don’t suppose there is a perfect system, but I appreciate the fact that you’re giving it a lot of thought over there, and you’re trying to figure out how to make these two sides collide in a way that is mutually beneficial. Because it certainly seems that with WordPress at 40% of the web, the money question is not going away, the philanthropic side of things is not going away, and we do have to have ways for these two sides to communicate successfully with each other.

\n\n\n\n

So, okay, I will put links to anything that we have mentioned in the show notes. So if you go to wptavern.com, search for the episode with Roger Williams, you’ll be able to find everything there.

\n\n\n\n

Just one last thing, Roger. Where can we find you apart from kinsta.com? Is there a place where you hang out online if somebody wants to pick this conversation up and run with it?

\n\n\n\n

[00:46:11] Roger Williams: Yeah, absolutely. I am a big user of LinkedIn. I post there pretty regularly. If you interact with me in the comments, I will love you forever, you’re my best friend. I love it when people ask me questions, or challenge me in the comments like, let’s have conversations there. Feel free to reach out to me and let’s talk, I wanna figure this stuff out.

\n\n\n\n

[00:46:30] Nathan Wrigley: Roger Williams, thank you so much for chatting to me today. I really appreciate it.

\n\n\n\n

[00:46:34] Roger Williams: Thank you very much, Nathan. I appreciate everything that you do for the community and thank you for the time and letting me be on.

\n
\n\n\n\n

On the podcast today we have Roger Williams.

\n\n\n\n

Roger Williams leads community and partner engagement at Kinsta, a company specialising in offering managed hosting for WordPress. His role involves bridging the gap between Kinsta and the wider WordPress community, working closely with agency partners, technology collaborators, and open source initiatives. Throughout his career, Roger has been deeply involved in community efforts and has recently played a key part in Kinsta’s implementation of a sponsored contributions program, helping to funnel time and resources back into WordPress and other open source projects.

\n\n\n\n

Many long-standing members of the WordPress community have contributed out of passion and a spirit of philanthropy, but as the project has grown to power over 40% of the web, the need for sustainable funding and sponsorship has become more pronounced. Roger joins us today to explore this shift, he shares insights from his WordCamp US presentation titled ‘Figuring Out Sponsored Contribution’, discussing how companies can start funding contributors, why that matters, and how to balance the business need for a return on investment with the grassroots spirit of open source.

\n\n\n\n

We begin with Roger’s background, his work at Kinsta, and how he became involved in WordPress community sponsorship. The conversation then gets into the ever evolving dynamics of sponsored contributions: how businesses can approach funding contributors, ways to surface and support valuable work, and strategies for aligning company goals with broader project needs.

\n\n\n\n

Roger breaks down the practical arguments companies can use to get internal buy-in, and the importance of clear processes, for both organisations looking to sponsor, and individuals seeking support.

\n\n\n\n

Towards the end, Roger reflects on the challenges and opportunities of connecting those from both the philanthropic and commercial sides of WordPress, and he shares advice for anyone hoping to get their organisation involved in similar programs.

\n\n\n\n

If you’re interested in how WordPress sponsorships work, how business and community might collaborate, or you’re seeking practical advice as a contributor or company, this episode is for you.

\n\n\n\n

Useful links

\n\n\n\n

Kinsta

\n\n\n\n

Figuring Out Sponsored Contribution – Roger’s presentation at WordCamp US 2025

\n\n\n\n

Polyglots team

\n\n\n\n

WordPress Documentation

\n\n\n\n

Kinsta Talks Podcast on YouTube

\n\n\n\n

WPCC

\n\n\n\n

Roger on LinkedIn

\";s: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 Nov 2025 15: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:41;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:88:\"Open Channels FM: Building a Culture of Openness and Growth Around Accessibility in Tech\";s: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:33:\"https://openchannels.fm/?p=112121\";s: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://openchannels.fm/building-a-culture-of-openness-and-growth-around-accessibility-in-tech/\";s: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:\"In this episode, Anne Bovelett discusses web accessibility with Marc Haunschild, emphasizing its benefits and challenges. They provide practical advice for developers, advocate for diverse teams, and promote small, iterative changes toward inclusivity.\";s: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 Nov 2025 10:09: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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:26:\"Matt: Buffett Thanksgiving\";s: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=150541\";s: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://ma.tt/2025/11/buffett-thanksgiving/\";s: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:849:\"
\n

Choose your heroes very carefully and then emulate them. You will never be perfect, but you can always be better.

\n
\n\n\n\n

I’m an unabashed fan of Warren Buffett and the late Charlie Munger, I even have bronze busts of them in my office! I was very lucky to attend his last shareholder meeting, as part of stepping down he’ll no longer write their legendary shareholder updates, but he will keep doing his Thanksgiving letters.

\n\n\n\n

You should give it a read. It’s heartbreaking and beautiful.

\";s: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 Nov 2025 07: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: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:43;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:53:\"WordPress.org blog: WordPress 6.9 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=19317\";s: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/11/wordpress-6-9-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:9329:\"

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

\n\n\n\n

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

\n\n\n\n

WordPress 6.9 RC1 can be tested using any of the following methods:

\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 this WP-CLI command:
wp core update --version=6.9-RC1
WordPress PlaygroundUse the 6.9 RC1 WordPress Playground instance to test the software directly in your browser. No setup is required – just click and go! 
\n\n\n\n

The scheduled final release date for WordPress 6.9 is December 2, 2025. The full release schedule can be found here. Your help testing Beta and RC versions is vital to making this release as stable and powerful as possible.

\n\n\n\n

Please continue checking the Make WordPress Core blog for 6.9-related posts in the coming weeks for more information.

\n\n\n\n

What’s in WordPress 6.9 RC1?

\n\n\n\n

Check out the Beta 1 announcement for details on WordPress 6.9.

\n\n\n\n

You can browse the technical details for all issues addressed since Beta 4 using these links:

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

Want to know more about this release? Here are some highlights:

\n\n\n\n
    \n
  • Site Editor improvements and Refined content creation\n
      \n
    • Ability to hide blocks
    • \n\n\n\n
    • New blocks
    • \n\n\n\n
    • Notes on blocks
    • \n\n\n\n
    • Universal command palette in wp-admin
    • \n
    \n
  • \n\n\n\n
  • Developer updates\n
      \n
    • Updates to dataviews and dataforms components
    • \n\n\n\n
    • New abilities API
    • \n\n\n\n
    • Updates to interactivity API
    • \n\n\n\n
    • Updates to block binding API
    • \n
    \n
  • \n\n\n\n
  • Performance Improvements\n
      \n
    • Improved script and style handling
    • \n\n\n\n
    • Optimized queries and caching
    • \n\n\n\n
    • Added ability to handle “fetchpriority” in ES Modules and Import Maps
    • \n\n\n\n
    • Standardizing output buffering
    • \n
    \n
  • \n
\n\n\n\n

The final release is on track for December 2nd. As always, a successful release depends on your confirmation during testing. So please download and test!

\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 crucial to the development of any software. It’s also a meaningful way for anyone to contribute. 

\n\n\n\n

Your help testing the WordPress 6.9 RC1 version is key to ensuring that the final 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.9.

\n\n\n\n

Calls for testing

\n\n\n\n

Thank you to everyone who helps test the following enhancements and bug fixes:

\n\n\n\n\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

Thank you to everyone who helps with testing!

\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.9 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.9.

\n\n\n\n

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

\n\n\n\n

Test on your hosting platforms

\n\n\n\n

Web hosts provide vital infrastructure for supporting WordPress and its users. Testing on hosting systems helps inform the development process while ensuring that WordPress and hosting platforms are fully compatible, free of errors, optimized for the best possible user experience, and that updates roll out to customer sites without issue.

\n\n\n\n

Want to test WordPress on your hosting system? Get started with configuring distributed hosting tests here. Thank you to all web hosts who help test WordPress!

\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

An RC1 haiku

\n\n\n\n

As the sun rises,

\n\n\n\n

RC1 breaks its cocoon

\n\n\n\n

and emerges strong.

\n\n\n\n

Props to @akshayar, @davidbaumwald, @jeffpaul, @desrosj, @westonruter, @ellatrix, @priethor, @krupajnanda and @cbravobernal 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 Nov 2025 15:34: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:10:\"Amy Kamala\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:68:\"Open Channels FM: Insights Into Successfully Rebranding Your Podcast\";s: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:33:\"https://openchannels.fm/?p=111842\";s: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:75:\"https://openchannels.fm/insights-into-successfully-rebranding-your-podcast/\";s: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:346:\"Rebranding a podcast involves much more than updating a logo or picking a new name. It is a transformative process that requires thoughtful planning, flexibility, and perseverance. One of the most revealing parts of the journey is the way it encourages you to reevaluate how each piece fits together, from your website structure to your […]\";s: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 Nov 2025 11:43: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: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:45;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"Matt: Bending Spoons\";s: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=150536\";s: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:37:\"https://ma.tt/2025/11/bending-spoons/\";s: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:1275:\"

The story of what Bending Spoons has built is very impressive, and I’m a customer of theirs through Evernote, WordPress uses Meetup a ton. I think Automattic’s Noho office used to belong to Meetup. They’ve built an incredible engineering and product culture that can terraform technology stacks into something much more efficient. I think their acquisitions of Vimeo and AOL are brilliant. This interview with Luca Ferrari on Invest Like The Best goes into their story and unique culture. I also always love a good Matrix reference. \"🙂\"

\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:7:\"pubDate\";a:1:{i:0;a:5:{s:4:\"data\";s:31:\"Tue, 11 Nov 2025 01:34: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: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:46;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:114:\"WordCamp Central: WordPress Udupi Community Empowers 300+ Students Across Coastal Karnataka Through Campus Connect\";s: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:40:\"https://central.wordcamp.org/?p=12520949\";s: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:138:\"https://central.wordcamp.org/news/2025/11/wordpress-udupi-community-empowers-300-students-across-coastal-karnataka-through-campus-connect/\";s: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:19930:\"

As the lead organiser representing the WordPress Udupi Community, I had the incredible opportunity to bring WordPress Campus Connect to college campuses across Coastal Karnataka.
What began as a small idea soon became a mission – to introduce WordPress, open source, and digital opportunities to the next generation of creators.

\n\n\n\n

Across all our sessions, we interacted with over 300+ students from four institutions:

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

Each campus had its own energy and challenges. Most students were in their final year, just months away from entering the professional world, yet many still lacked basic digital readiness. Some didn’t have LinkedIn profiles but had multiple Instagram accounts. Others were hesitant to speak on the mic, and a few genuinely didn’t know what to enter in the PIN code field while creating a WordPress.com account. Out of 300+ students, more than 250 had forgotten their Gmail passwords, so each session began with a mini Gmail recovery workshop before we even reached WordPress!

\n\n\n\n

At first, it was challenging. But soon our team switched gears, we weren’t just there as WordPress community members; we became mentors. We realised this wasn’t only about teaching WordPress; it was about building digital literacy. If not us, then who would help them take their first confident step into the web world?

\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

By the end, we witnessed real transformation, shy students asking questions, first-time creators proudly launching their sites, and a spark of curiosity lighting up across classrooms.

\n\n\n\n

We’re grateful to all the colleges, their management, and faculty for the warm welcome, and to every student who showed curiosity and enthusiasm once they got started.

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

Organising Team

\n\n\n\n

Organisers: Shashikanth Shetty, Keerthi Prabhu & V Gautham Navada
Facilitators: Omkar Udupa, Manjunath M M, Chandana G M
Social Media Designs & Reels: Ranjitha GC

\n\n\n\n
\"\"
The WP UDUPI TEAM – From left to right – Omkar, Shashikanth, Manjunath, Gautham, Keerthi, and Chandana.
\n\n\n\n
\n\n\n\n

Sponsors

\n\n\n\n

Global Sponsors: Automattic, Bluehost, Hosting.com, Kinsta, WooCommerce
Local Sponsors: SabWeb, ForthFocus, Yuktha Digital, Koti Soft Solutions

\n\n\n\n

A heartfelt thanks to WordPress.com for sponsoring free one-year website plans for students from our last two campuses, an initiative that has already helped many of them start blogging and showcasing their work online.

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

Student Testimonials

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

College Testimonial

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

Media Coverage

\n\n\n\n

We were also featured in several local and regional media outlets that recognized the impact of the initiative. You can read the articles and see coverage highlights below:

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

For the WordPress Udupi Community, this journey was much more than a series of campus sessions. It was a reminder that true change starts with awareness and sometimes, the first step toward digital empowerment is simply helping someone log in.

\n\n\n\n
\n

To any student or job seeker reading this:
Don’t wait for the syllabus to teach you what the world already expects you to know. Curiosity is your real qualification!

\n
\n\n\n\n

WordPress Campus Connect Udupi 2025 turned out to be more than an event, it became a movement, proving that communities like ours can make a real-world impact, one campus at a time.

\";s: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, 10 Nov 2025 13: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:32:\"http://purl.org/dc/elements/1.1/\";a:1:{s:7:\"creator\";a:1:{i:0;a:5:{s:4:\"data\";s:8:\"vgnavada\";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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:16:\"Matt: Meshtastic\";s: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=150524\";s: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:33:\"https://ma.tt/2025/11/meshtastic/\";s: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:942:\"

I’ve been following this cool open source project called Meshtastic, which is “An open source, off-grid, decentralized, mesh network built to run on affordable, low-power devices.” I finally got some time to set it up tonight. It was super easy; you just flash the Meshtastic firmware in your browser to any of the compatible devices. I got a Heltec v3 device for $35 bucks on Amazon. (I’d link but it’s out of stock, and I think there’s a newer version.) Apparently, there are enough people running nodes that you can bounce a message from Portland to San Francisco! I love the idea of parallel to the internet networks, and I’ve been meaning to get a HAM license, but in the meantime, this looks pretty fun.

\";s: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, 10 Nov 2025 01:37:44 +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:48;a:6:{s:4:\"data\";s:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:78:\"Gutenberg Times: Gutenberg Changelog #124 – Gutenberg 22.0 and WordPress 6.9\";s: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=42753\";s: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://gutenbergtimes.com/podcast/gutenberg-changelog-124-gutenberg-22-wordpress-6-9/\";s: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:52553:\"

In episode 124 of the Gutenberg Changelog podcast, Birgit Pauli-Haack and guest Ellen Bauer discuss the latest WordPress and Gutenberg updates, including the upcoming WordPress 6.9 release and Gutenberg 22.0. Highlights include insights on AI-powered site building, the importance of collaboration tools like block comments, new blocks such as accordion and stretchy text, and the enhanced plugin security review.

\n\n\n\n

Ellen Bauer shares her experiences from WordCamp Kansai and speaks on the impact of AI in making WordPress site building more accessible. They also touch on improvements for theme authors, plugin developers, and the upcoming WordCamp Asia. The episode wraps up with community announcements and a look ahead to features planned for WordPress 7.0.

\n\n\n\n

\n\n\n\n

Show Notes / Transcript

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

Show Notes

\n\n\n\n

Special Guest: Ellen Bauer

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

Announcements & Community

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

What’s Released

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

What’s in the works 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: Welcome to our 124th episode of the Gutenberg Changelog podcast. In today’s episode, we will talk about Gutenberg 22.0 and WordPress 6.9 and so much more. I’m your host, Birgit Pauli-Haack, curator at the Gutenberg Times and a full-time core contributor for the WordPress open source project sponsored by Automattic.

\n\n\n\n

Today on a Saturday morning, Ellen Bauer joins us from New Zealand. She works for Automattic as a product manager, works with themes, blocks and the AI site building tool. And as a former agency owner and professional theme builder and designer, she brings important perspectives to the software powering millions of merchants at WooCommerce of the World. She’s also a longtime friend and I’m delighted you join me again, Ellen, to the show. Welcome and how are you today?

\n\n\n\n

Ellen Bauer: Thank you very much. That was a lovely introduction. I should copy that for my who I am. I actually like that. Thanks, Birgit. I’m very well. It’s very early in the morning for me, so please bear with me everyone. If I’m babbling a little bit. I yeah, I’m very well. I’m actually very recharged because I just returned from Botkin Kansai in Japan, and I added a little personal holiday on top of that with my family. So yeah, that was a lovely time away and it’s always good to connect to the community and attend WordCamps because yeah, you just feel recharged and inspired. So yeah, I’m feeling really excited and I’m happy to be on that podcast here again.

\n\n\n\n

Birgit Pauli-Haack: Always so glad you’re here. So don’t worry as long as you don’t snore. We are, we take anything that you want to say.

\n\n\n\n

Ellen Bauer: Inspired my by my Japan travels. I’m having a green tea next to me so that should keep me running.

\n\n\n\n

Birgit Pauli-Haack: Yeah, and I have green tea too, but that’s now from a shop that I saw in Taipei two years ago at WordCamp Asia. So I’m really kind of every time I have a cup of tea, I’m thinking back on that.

\n\n\n\n

WordCamp Kansai, WordCamp Asia

\n\n\n\n

So you gave a talk at WordCamp Kansai about building a WooCommerce store using block themes and AI site building. So how did it go and what did you learn from putting it together actually.

\n\n\n\n

Ellen Bauer: So I was again, it’s a very new topic for me, so I was like, oh, what did I do to myself presenting that. But it was very exciting and there were a few AI talks that were really, really cool at the WordCamp. So it’s a good idea to check out the YouTube stream from the WordCamp other videos there. It was really cool to talk about a topic that I’m very excited about and just kind of getting into more and more with my work at Automatic as well. So I learned a lot. I looked at a lot of competitors and what they’re doing and obviously AI inside. It’s pretty wild what is happening and fast paced. So I think it was good to also bring the topic to a WordCamp and I had really, really positive feedback. Everyone was excited. The room was packed which I didn’t expect with an English speaking talk at a WordCamp. They had a live translation which worked really well and that was cool. A lot of questions in the end as well and a good conversation and yeah, just an exciting new opportunity for me. I see it as just AI is a possibility to help us fix or help us with the problems users have with site building because it’s not easy to do us to build your front end site for WordPress Store or any website. So if AI tools can help users, our WordPress users, us to do these things a little easier and faster and maybe more inspirational with real content, like more related content and images that relate to the site you actually want to build. I think that’s just very exciting. And yeah helps for me seeing users struggle with our themes as well and finding the right theme for what they wanted to build over the years. I think it’s just a great opportunity to make it easier for users and also kind of then yeah make WordPress attractive on another level to very beginner users and can just do so much. It’s an exciting time, honestly I think.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah, no, I hear you. Yeah, There is this. WordPress.com has started with the AI site builder and I find it really helps with the onboarding of users that just want to get a site built. You still have to make the decisions about what’s your content about and what are the images that you want to do but. But it kind of gets out of the way in putting those things in and you don’t have to search for things too much. I think that WordPress 6.9 also and we’re going to talk a little bit later about the whole release that’s coming up with a command palette. Yeah, you can really shortcut some of the things, but you still need to know what you want to do to put the command in to get to where you want. But it’s also, yeah, there’s a lot of help out there. And I’m really excited also for the AI site building that ends up with a block theme and with a really fast site. So it’s a really cool thing.

\n\n\n\n

Ellen Bauer: Yeah. What I like about it too, that it’s on the blocks patterns. Block theme foundation. What you can test. I really like it for something that is difficult for nonvisual users is you can get color palettes, ideas, you get template ideas. Because one of the things I always hear also with patterns from users, it’s like how do I decide which. You maybe have a pattern library in a theme, but it’s like how do you decide to put a page together with these patterns? It’s very challenging. Users don’t really know should I have testimonials in the bottom or at the top or what is most important? So there’s template page templates, suggestions shown and you can just pick one. It makes it way easier and more appealing. Same with like fonts. How should I know if the font is a professional font or a classic or more modern? It’s very difficult to tell. That’s like very advanced decisions you need to make on the design side as well. So if we can give suggestions and help, I think that makes it just easier and also more fun to build sites. Yeah. Another thing I probably have mentioned on the podcast is the word telex and doing. And you can test about it. Probably. Yeah. Because that’s also another thing I was like, oh, that’s so exciting because you can build blocks with AI and it’s so difficult to build blocks, but now it’s easy to have an idea and build a block.

\n\n\n\n

Birgit Pauli-Haack: Yeah. There was this blocktober fund by Tammie Lister which is now came to end. But there are 31, I think blocks that she built and she had some great ideas. I will put a link to it in the show notes again, but because what you can learn from there is also how you prompt the telex to actually get something out of it. So it was a really cool thing. And other people did also some, some great thing with Telex, the experimental block builder. Yeah.

\n\n\n\n

Ellen Bauer: So that was also part of my talk prompting tips. And I think you could do a whole talk just about that and it will be way more important moving on how we. Yeah. How we talk to AI to actually make it efficient.

\n\n\n\n

Birgit Pauli-Haack: Yeah, absolutely.

\n\n\n\n

Ellen Bauer: Yeah.

\n\n\n\n

Birgit Pauli-Haack: And I’m really looking forward to the next flagship WordCamp where that will probably be even more prominent because the next one is WordCamp Asia in Mumbai. And I submitted some Talks there, not AI talks, but I’m still in the you build it yourself kind of block theme. I will do a workshop on block themes and how the different workflows work together. And so the good news was that the WordCamp Asia speaker team extended the deadline for speaker submission to December 15, which is kind of another month out.

\n\n\n\n

Ellen Bauer: So I thought it was November, right?

\n\n\n\n

Birgit Pauli-Haack: Yeah. And that was. They made a mistake on their Twitter account. I clarified that in the WC Asia channel on WordPress Slack so you can read up about it. But because there was a discrepancy between what the website said under speaker submission, what the tweet said. And it’s actually December 15th. Yeah, you don’t have to worry. Hurry next week.

\n\n\n\n

Ellen Bauer: Oh, that is nice. The WordCamp Asia in Mumbai is. I just checked the date April 9 to 11 for everyone looking for travel dates and I submitted a talk as well. I will submit maybe a better version, improved version if I now have more time, which is great because it was a rushed application. But yeah, I’m really excited for that outcome and really, really hope I can make it there.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah. It’s the week after Easter so if you want to go a little bit earlier, you have some Easter holidays to cover your vacation, not to have to take. Well, in Germany we have three days, no two days vacation or holidays that are around Easter. So it’s a Good Friday as well as the Easter Monday they are off in Germany. So we have another holiday weekend that we could go there. So we plan to be a little bit ahead of time in Mumbai in India. So yeah, it’s going to be interesting. They also have a schedule of when they release tickets so you can go on the website and see that at the WordCamp Asia website, I think November 11th and then they have two more dates where they release tickets because the first one actually sold out within an hour or something like that. Yeah, yeah, I think it’s going to be a huge bootcamp.

\n\n\n\n

Ellen Bauer: I think I got my tickets already for us, so. Yeah, but that’s nice that they released the dates.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah. The Guternberg Times, I also applied for media partners, so either speaker or media partner, maybe I will get my tickets that way.

\n\n\n\n

Announcements

\n\n\n\n

So yeah, so we’re coming through the announcements. The first one that I wanted to talk about is that Anne McCarthy updated us in her post update on phase three collaboration efforts November 2025 on the state of the phase three, the progress made, what’s in the works for the Future and especially WordPress 7.0. Now we’re talking 7.0 on the eve of release candidate for 6.9; there is not a whole lot of more information out there and the post is talking about the real time collaboration with multiple authors. Edit the content simultaneously without conflict. Now this feature has been tested with a small group of clients from WordPress VIP, but they’re loving it it seems, and they are bringing things to Core WordPress 6.9 has the asynchronous notes of collaboration. That’s the commenting on blocks that comes to WordPress December, but it allows you to add comments directly on the content blocks and there will be refinements and additional features kind of coming in the future. And what’s also prepared for WordPress 10.0 is behind the scenes the contributors are rebuilding the admin screens with a new Data View and Data Forms tools. There’s a whole new Fields API that kind of runs the data form components and then you organize and display information on admin pages. Part of it is also Media Library revamp and the extensibility for plugin developers. So that’s pretty much kind of a short rundown of what’s in the post. It’s much more detailed information with links to GitHub issues and PRs and all that. Any comments?

\n\n\n\n

Ellen Bauer: I’m actually really, really excited about that and the start of that. It’s cool to see that in 6.9 already. I think just collaboration in general within WordPress is one of the things missing to have this thing like in Google Docs we all kind of love it. It’s so easy and yeah, I’m just so, so excited to get that in because we have always run our Elmo Studio blog with two people and at some point like even we had guest authors. So yeah that just makes it so much easier to actually work together in WordPress.

\n\n\n\n

Birgit Pauli-Haack: Yeah and well we use Google Docs for any of the articles be it on the developer blog or internally at Automattic or for the Gutenberg Times. And this would just eliminate one step because you still have that step left that you need to copy paste things over and put the images in. And if you can start drafting already in WordPress it eliminates so much time that you kind of win there. It’s really cool.

\n\n\n\n

Ellen Bauer: I never, I can’t even write in Google Docs, and I’m actually I’m using Notion as a drafting tool because it just doesn’t look as nice so. And yeah just easier if you can just collaborate within your save so much time and effort and it just, it’s just Nice to see the people you’re working with in your post and kind of work together there, the comments and feedback and I think even also for design stuff like I love Figma comments as well. It’s just. Hello, it’s so good to give feedback. So even if we can have a block section or even on patterns, we can comment on design topics as well there.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

Ellen Bauer: So yeah, even for the visual part of feedback on pattern designs and stuff, it will be really exciting to use that too.

\n\n\n\n

Birgit Pauli-Haack: Yeah, absolutely.

\n\n\n\n

Ellen Bauer: For writers and content creators.

\n\n\n\n

Birgit Pauli-Haack: Yeah. So what is probably coming to WordPress 7.0 is that you also can highlight text. Not right now, you only can comment in the notes, just on single blocks. Yeah. So if the block is a long paragraph, you cannot just highlight things and then comment on that. So it’s not like Google Docs yet. But I think that’s the aim that developers have to make that work as well. I’m really excited for what’s to come. We’ll see. But it’s a lot of work. But the last half a year there has been some great progress there.

\n\n\n\n

All right, so the next thing that I wanted to point out here is the new the plugin review team has this plugin check plugin that you can as a plugin developer kind of use and check your plugins before you submit it. So you don’t get a whole lot of back and forth with the review team until they approve your plugin. That plugin also has a new version and the review team announced it just last week that they now not only screen new plugins that come to the repository, but also will screen updated plugins or plugin updates for security, compatibility and compliance. Right now it’s in testing form so currently the team evaluates the information only internally and sends reports to authors if needed. And they want to kind of. It’s like the normal WordPress way, you kind of look what it does and then you iterate on it. Yeah, they want to observe the behavior during updates and put in some refinements.

\n\n\n\n

And after that initial testing phase, automated security reports will be emailed to authors right after the plugin updates. This is such a huge progress because plugins account for 96% of WordPress vulnerabilities in 2024 in a report. And that increased scrutiny on the WordPress plugins repository is really a huge impact on the health of the whole WordPress ecosystem and it definitely will make the web a better place with 43% of all websites being WordPress having that additional layer There is really going to be huge.

\n\n\n\n

Ellen Bauer: I love that too because yeah, it’s funny, I just remembered when you said that most of the. As a theme author, I can’t even count the number of times I get support requests for something is broken. And first thing I always said, oh yeah, I kind of sensed, oh, it’s, it’s a plugin. It’s most of the time the theme is not affected because there’s not much to a theme. You have to deactivate all your plugins and check the list when the error occurs. I think. I don’t know how much time I spend on plugin support actually as a theme author.

\n\n\n\n

Birgit Pauli-Haack: Yeah. I mean security, if you put a point to it, is actually something the server or the hosting company should really implement as well as an agency. When we were dealing with other websites from other people that actually support their businesses. Yeah. We made sure that they are on a hosting company that actually has their own security screening and the automating, removing of malware if that occurs. The plan might be a little bit more expensive, but it’s kind of that peace of mind for all of us is really important. But yeah, even then things could get through.

\n\n\n\n

Ellen Bauer: So yeah, yeah, this is like very important help.

\n\n\n\n

Birgit Pauli-Haack: Absolutely.

\n\n\n\n

Ellen Bauer: I think that if the offerings also for Hostess got better over the years, I think and more awareness. But yeah, just funny. It’s like part of my WordPress history is fixing plugin update issues.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

Ellen Bauer: Gosh.

\n\n\n\n

Birgit Pauli-Haack: Yeah. But I, I, that was work that I really hated.

\n\n\n\n

Ellen Bauer: Yeah. Although it’s money because I was like, I’m just. It’s a theme, but it’s not the theme.

\n\n\n\n

Birgit Pauli-Haack: No, no. It wasn’t something I thought or something like that. Or it was more like it’s not work that I would like to do. Yeah.

\n\n\n\n

Ellen Bauer: So it was also work that we weren’t paid for. It was a lot of support. We did.

\n\n\n\n

Birgit Pauli-Haack: But even if you get paid, it’s not work you want to do.

\n\n\n\n

Ellen Bauer: That’s true.

\n\n\n\n

Birgit Pauli-Haack: Well, some people do, but yeah.

\n\n\n\n

Ellen Bauer: So yeah, I didn’t like it either, but I had kind of. It’s funny if you do it like for so many years, like 10 years or so, you get a sense of. Also if you see the plugin that you already kind of know, like it’s like a six, then do you get on where the problem is? It’s kind of weird.

\n\n\n\n

Birgit Pauli-Haack: Absolutely. Yeah. Yeah. I think also the site health plugin that the WordPress contributors put together is really helpful in just kind of eliminating the plugins and that kind of. Yeah, that really helped with the research. But yeah, that can also happen. Not in a security context. It’s just kind of. Yeah, it broke my site. Yeah. So some update because it was a plugin conflict and the site health plugin is really helpful for that.

\n\n\n\n

Community Contributions

\n\n\n\n

So there’s WordPress Studio. I think I’m not sure if we ever mentioned it here at the podcast. It’s an open source local development tool and it now can handle blueprints and those are Playground blueprints. So they’re lightweight and they’re fast to implement and it’s a topic close to my heart. This year I did many talks about Playground and the blueprints and you can watch three of them on WordPress TV and I will have the link in the show notes. They are now available also to be used in Studio because Studio is based on Playground so it makes spinning up new sites so much faster. You can select three pre-built blueprints. One is just a quickstart WordPress.com website or a site for building plugins or themes, or creating an online store with WooCommerce and companion plugins pre-installed. But you could also kind of build your own and have all the plugins that you ever want to need for any site and spin up a new site with the theme or with some standards that you in an agency or as a freelancer always use and then can work on it. And I love this local development tool and paired with Playground CLI. Yeah it made my testing and development so much easier. It’s really great.

\n\n\n\n

Ellen Bauer: I use it every day as well. Yeah, I didn’t. I wasn’t aware that there’s a WooCommerce version of the blueprint as well. That is cool because you don’t need to go ahead and test. Sometimes you just need to test a store and you don’t want to install all the plugins yourself a little bit annoying. So that can be.

\n\n\n\n

Birgit Pauli-Haack: It’s absolutely handy.

\n\n\n\n

Ellen Bauer: The next update I will cover that and it’s actually kind of an interesting thing and Matt blogged about it on his personal blog as well. So you can check out that link. It’s that a new plugin called the Internet Archive Wayback Machine Link Fixer. That’s a long name for plugin, but it helps to get an archived link to any kind of broken link that you have. Which for a lot of us who have older WordPress blogs or websites that is probably the case. And I actually I haven’t installed the plugin yet, but I will go to do that this weekend because yeah, that’s exciting. You can just get a link to any, any broken link to the Wayback Machine version, archived version of that website or blog post. And yeah, check out that post on Matt’s blog where he talks about it quickly and introduces it and yeah, I think that’s a really cool additional plugin that we have available to help with broken links. Really exciting. I love that. I will, I will test it and then maybe I blog about it too.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah. So go ahead. The plugin is free, but you need a free account on the Internet Archive site to obtain an API key because you tap in right into this and to connect your site to the interactor Archive. And then step two and three, you just have to make some additional decisions. But they’re very well explained about if you want automatically your site kind of put into the Wayback Machine and all that.

\n\n\n\n

Just for people who don’t know, the Internet Archive is a nonprofit library of millions of free text, movies, software, music, websites and more. And they run the Wayback Machine which pretty much surfaces previous versions of websites. So if you are new to a company and you want to do a redesign of the website, you probably want to go back and see what have they done in previous redesigns to kind of go back to see what’s important to them. And it’s probably a better way than to ask 15,000 questions.

\n\n\n\n

Ellen Bauer: Yeah, that’s a nice idea. I haven’t thought about that. I actually love to go sometimes on the Wayback Machine with Manu. Just kind of looking at the old designs we had for our own website. It’s so fun to do that. Old designs of other sites that you loved and really, really fun. You can check out the old WordPress. Org versions or even like the Google Google site. It’s just fun to do that. And you kind of get a little bit of a nostalgic feeling. Oh yes, I remember that.

\n\n\n\n

Birgit Pauli-Haack: Yeah. So when I started Gutenberg Times I had the 2019 default theme on it. And then somewhere in 2020 I think I switched to the Excel theme by Anders Noren and there were a few things that didn’t work that way in the other themes. So I just kind of adopted. And then now I come back and kind of compare what was the old one and what was the new one. It was, it was really interesting because I’m now building the third theme for, for the site and I want to do it myself and now I can do whatever I want with it without having to follow a theme, but I still wanted to make sure that I have all the things that I thought were important also in the new theme. So we’ll see. I’m definitely going to share my journey.

\n\n\n\n

Ellen Bauer: You plan to update that soon?

\n\n\n\n

Birgit Pauli-Haack: Soon as a relative term.

\n\n\n\n

Ellen Bauer: When do you do it?

\n\n\n\n

Birgit Pauli-Haack: I’d like to have it by the end of the year, but we’ll see how that comes out. Yeah. I built it already. I needed an additional plugin for my podcast because I wanted to have the social icons from the podcast directories where our podcast is in. And only the 6.9 now has the possibilities that you can do custom social icons. So I tested that and it works. But I need to wait till it’s out too. So the plugin is available but it’s in the plugin repository. But I have one fix that I need to do. But also I wanted to have a better template for the podcast and the plugin API to register templates. That was in 6.8, but I needed to figure out how that works as well. Not all the things that I talk about. I know how to do it when I want to do it. It’s kind of really interesting.

\n\n\n\n

Ellen Bauer: Yeah. And it’s always just finding the time for these on the side things.

\n\n\n\n

What’s Released – WordPress 6.9 Beta 4

\n\n\n\n

Birgit Pauli-Haack: Yeah. So now we’re coming to the what’s released section of our podcast and the first one is today, Friday, November 7, WordPress 6.9 beta 4 was released. It’s a quiet beta. It has a release post, but that’s on the make blog. Just because there was one thing that they needed to reverse and so they wanted before the release candidate on Tuesday, November 11, they wanted to have another beta to make sure everything works all right or the thing that they changed works all right. Let me put it this way. Yeah. So this is also a good place to talk about last minute WordPress 6.9 feature decisions. Contributors have decided to not move ahead with the enhanced template management feature for this version. The content only editing was also punted to 7.0 as well as the updated block binding UI for external sources, there were a few issues with all three of them during testing sessions and that can’t be While the content only editing was earlier decided that it’s not going to come to 6.9, but the other two, there were issues that couldn’t be resolved in the remaining time before the strength freeze in release candidate one, which is Tuesday. So yeah. Ellen, what are your favorite features for 6.9? Anything standing out for you?

\n\n\n\n

Ellen Bauer: Yes, I was looking forward to the template management feature of course we have to wait. We have to wait for that.

\n\n\n\n

Birgit Pauli-Haack: It’s still in Gutenberg. Yeah, it’s still in the plugin. It’s just not.

\n\n\n\n

Ellen Bauer: Then second pick. I still am super excited that at least we start with the commenting option on post. Like on blocks and posts. I’m excited to just have this in there. Like that’s something we haven’t had in WordPress. So yeah, that’s. I think I would pick that as my favorite. And then instead.

\n\n\n\n

Birgit Pauli-Haack: Are you getting excited about the new blocks?

\n\n\n\n

Ellen Bauer: Oh, yes, new blocks as well. So the accordion, it’s actually nice to see that come in because we have started using that in WooCommerce for an update on the. Having the tabs for a description, like a product description, additional information and comments in there. So I think I’m a little bit semi proud. Maybe that pushed it, the accordion block into more attention, into Core and then the. I’m not sure if I have the name right. Is it called Sticky? Sticky Sketchy text? Yeah.

\n\n\n\n

Birgit Pauli-Haack: No, Stretchy. Stretchy.

\n\n\n\n

Ellen Bauer: Stretchy. Stretchy. That makes more sense. Yeah, just that’s from a designer perspective. It’s interesting actually to see that in Core because that’s like just a design tool and a fun kind of block. I love seeing that in Core. Yeah. Just nice to see this kind of more fun not experimental, but like just design tool core blocks coming in and then icons block. Really, really nice to have that. But that’s not like needed, wanted. Oh, no, that’s seven.

\n\n\n\n

Birgit Pauli-Haack: Yeah, the icons block didn’t make it.

\n\n\n\n

Ellen Bauer: Oh, no. Oh, sorry.

\n\n\n\n

Birgit Pauli-Haack: Okay.

\n\n\n\n

Ellen Bauer: We have to wait. Well, next year then we will get more excited. Yeah, I want that so badly.

\n\n\n\n

Birgit Pauli-Haack: Yeah, the icons block as well as the. The block visibility is there as well, but it’s more like the basic kind of feature, the foundation for what’s to come in 7.0. But it’s good to have it in talking about the accordions if you want to kind of get a little bit of a head start on styling accordions. Justin Tadlock just published last week a tutorial on how to style accordions with WordPress 6.9. And he walks you through how to do it in theme JSON and how to do a style variation as well as how to do the pattern for an accordion pattern. So that gives you a head start on updating your theme or your own site with it.

\n\n\n\n

What’s coming to the developer blog? We have just the editorial meeting yesterday. We just approved a snippet how you can also add structured data to your FAQ accordion. So it gets right into the SEO kind of thing because Google treats the FAQs differently. It kind of does answer question answers quite nicely. So you can make that also with the accordion. And he will publish that probably in about two weeks or three. We’ll see how that comes. Yeah. There’s also on the developer blog where additional theme related things like the border radius, size presets that come into WordPress 6.9 and also I mentioned it, the social icons, custom icons that you want if you want them. Also a tutorial on the developer blog register custom social icons and we have one more that is the how to style forms with theme JSON that comes also with six point nine.

\n\n\n\n

Ellen Bauer: That’s a big one. Oh, that’s cool.

\n\n\n\n

Birgit Pauli-Haack: Absolutely.

\n\n\n\n

Ellen Bauer: Very exciting because that’s one of the things you miss that was missing always for themes and our custom icons. Actually I think it’s a bigger feature than you think because that was always for years one of the requests like how do I get my own icon in there? Like, oh, it’s missing. Like maybe certain countries have their big individual icons that were not what kind of icons icons, but tools, social.

\n\n\n\n

Birgit Pauli-Haack: I can. Websites. Yeah, yeah, yeah, absolutely.

\n\n\n\n

Ellen Bauer: I remember there was a German one we were always asked for. I don’t remember what it was, but from different communities you get different requests.

\n\n\n\n

Birgit Pauli-Haack: Yeah. In Germany there was this ext or next or something like that was a social one. Right. But that kind of folded into LinkedIn now. So. All right, I’ll put the links to the developer blog posts into the show notes and so you can all follow along on that.

\n\n\n\n

Gutenberg 22.0

\n\n\n\n

And that brings US to Gutenberg 22.0, and Carlos Bravo was the release lead on that and he kind of said that it was a relatively quiet Gutenberg release because it followed the WordPress point release and it normally prioritizes core quality and bug fixes over new enhancements. So we probably get here pretty quickly go through that.

\n\n\n\n

Enhancements

\n\n\n\n

Well, I’ll start with the block library changes in the navigation block. You can have a button create a new page, but you create it and then what happened. Now you have a notice that there was a page created and how to find it. So that’s really cool. It’s a quality of life improvement that. Yeah, you only notice that it’s there or that it’s not there, but it’s missing all the time.

\n\n\n\n

Ellen Bauer: And the second one was that breadcrumbs now get support for archives. That was missing, just missing before, Birgit.

\n\n\n\n

Birgit Pauli-Haack: Yeah, so breadcrumbs came in actually with this Release out of experimentation, but it will not make it to 6.9. But the breadcrumbs block is a new block and the archive support was. There were kinds of discussions about how deep does the first version has to go. And now that it’s not getting into 6.9, it just gets. Just ongoing improvements. So it gets into WordPress 7.0.

\n\n\n\n

Ellen Bauer: Yeah, I love that. For blogs, that makes a huge difference.

\n\n\n\n

Birgit Pauli-Haack: Absolutely. That’s one thing. Also, when you have a huge site and you have 50 pages or something like that, your visitors most very often get lost. Unless you have additional navigation in there, and breadcrumbs help you so you don’t have to do this all manually and kind of think about how to get back to other places. I really love that. That and that the team actually takes time to get to work on this a little longer. And so the version is actually delightful and not just like an MVP or something like that. Yeah. The next one is that the categories block has a taxonomy CSS class now. So that’s probably only interesting for people that were looking for that and had to do custom CSS to kind of figure that out. But that’s definitely now in Gutenberg 22.0.

\n\n\n\n

Ellen Bauer: I think having CSS classes for pretty specific things from theme author perspective, just helpful. A lot of time to just have that in there. So I like that. The next one was that I think that’s just added an explanation to the fit text feature that it gets just a description is added, that it overrides the default font settings.

\n\n\n\n

Birgit Pauli-Haack: Yeah.

\n\n\n\n

Ellen Bauer: So that’s what I wasn’t visible just for users being aware of that.

\n\n\n\n

Birgit Pauli-Haack: I think so. Yeah. That’s just a mix. Users are aware that sometimes you don’t get the connection, that if you have one option, the other option goes away. Yeah. So.

\n\n\n\n

Ellen Bauer: And I think that helps. So I think yeah, they just added it fit into the container and then overrides your font’s default font setting. That helps to just explain it better.

\n\n\n\n

Birgit Pauli-Haack: Yeah, absolutely. And just now that we’re talking about it, the stretchy text, they are still not sure if the font size or the font option or separate blocks. So they’re now getting into a variation for 6.9. I have not seen that issue or the pull request actually be merged, but we’ll see if it’s going to be in Release candidate one or it still stays as it is and comes in 5.7, 7.0. Why 5.7? That’s wrong. Yeah. The latest comments block now has an option to display full comments so there were only two versions. One was just the title and then an excerpt. And then now you can have all the full comments displayed in your post template or page template. So that’s also pretty cool.

\n\n\n\n

Ellen Bauer: One additional new update is also in the global styles and actually Birgit had to help me figure that out. Global styles are now, can now be accessed in the post editor. But you need to have. What is it? You need to have Active show template template. Yeah, show template. And it’s like, okay, where is show template Burgundy? Had to help me out with that one. It was under preview.

\n\n\n\n

Birgit Pauli-Haack: It was the preview of the test.

\n\n\n\n

Ellen Bauer: So where you, where you look for the tablet and the mobile version of the preview, you also have the show template and I couldn’t find it. And then you get the little icon for global styles.

\n\n\n\n

Birgit Pauli-Haack: Yeah, yeah. And then you can make changes. Yeah, you can make changes to, to your template on the global level, which really helps with. You don’t have to go back and go through the templates and all that. So it’s really interesting. I haven’t really worked with that yet because I didn’t find a need for that. But I, I can see that then all of a sudden post in the template when it says, oh, this is wrong, you just want to go in and make a small change of things. So this is helpful to not have to get out of your post and then have to go into the site editor and the template. And yeah, it’s kind of just a shortcut for.

\n\n\n\n

Ellen Bauer: I think it also builds like having that connection also builds a little bit more awareness for users of the connection between where what a template actually is and that you can. What global styles are that you have that connection of. Oh, the global styles are connected to the template of this post and if I change something there, it’s changed in the post. I think there’s still difficulty for users to understand that connection if the templates are hidden and the global styles are hidden in just the site editor.

\n\n\n\n

Birgit Pauli-Haack: So that’s a good point.

\n\n\n\n

Ellen Bauer: It just builds that connection.

\n\n\n\n

Birgit Pauli-Haack: That’s a good point. Yeah. Thank you. I haven’t even thought about it, but that helps people figure out because the template, new WordPress users might not have that problem, but long time WordPress users, they never had to deal with templates because it was all, it was all something that the theme developer would do for them and they were just using it. But now that they have control over it, they also kind of need to be aware what they’re doing with it. And the enhanced template management is Also part of it, that it needs to be a little bit less confusing. And also follow some. Some things that they say if I change something on a template, I don’t want it to go public without me knowing. So I want a draft section there and keep the other template going until the other one, the new one is finished. So that is something that comes with enhanced template management and I’m really looking forward to that.

\n\n\n\n

Ellen Bauer: That will be exciting also to make templates more exciting to play with because. Yeah, I think there’s still an amazing amount of confusion of what a template versus a page actually is. So just if users play more with custom templates and build their own, I think that builds more awareness of that. The difference between these two.

\n\n\n\n

Birgit Pauli-Haack: Yeah, definitely. Yeah. So I think one of the last things that we want to talk about here is the. That the math block, which is a new block coming to 6.9. Yeah. Yeah. I’m love it. I actually was in school, I had all these big formulas to talk about. To write and. Yeah. And I was never kind of thinking, oh, I could do a blog post about things that. Because I had no way of knowing how to do the formulas. Yeah.

\n\n\n\n

Ellen Bauer: And you can’t really output them.

\n\n\n\n

Birgit Pauli-Haack: Yeah. And they follow the mathwork, follows latex formatting, which is the math kind of language, and then puts it into your site. And now it also. It’s now enabled. Horizontal scrolling is now enabled because those formulas can be really, really long. And so you can kind of have a horizontal scrolling on your formula so you don’t have to kind of put line breaks in there where no line breaks. I want that.

\n\n\n\n

Ellen Bauer: I want to start a blog to blog about math. I was never good at math, but I always. It’s admiring too. I love it. So maybe we should all start blogging about math now.

\n\n\n\n

Birgit Pauli-Haack: Yeah. Yeah.

\n\n\n\n

Ellen Bauer: Problems.

\n\n\n\n

Birgit Pauli-Haack: Math problems. Yeah. Especially fractions and all that kind of. What was it? Five. You’re very long.

\n\n\n\n

Ellen Bauer: So we need the scrolling.

\n\n\n\n

Birgit Pauli-Haack: Yeah, we can do the scrolling. Yeah.

\n\n\n\n

Experiments

\n\n\n\n

And I’m gonna scroll further through the changelog and I’m stopping at the experiments because the real time collaboration experiment is still on in Gutenberg and we talked about it, but there have also been some changes now. And one is that it’s supporting synced post data and it also the YJS import is actually behind the experimental flag, which is actually a code quality thing. And they implemented CRDT persistence for collaborative editing. And that just means that’s the. The saving of your immediate changes and then the sync part that works persistently on your collaborative editing plane. It’s a really complicated thing to do. But they seem to have figured it out with that library, the YJS and Kevin, who is the maintainer of that, was part of the initial MVP of the collaborative editing and now. Yeah, so it’s really cool.

\n\n\n\n

And you need to go install 2020.0 Gutenberg plugin and then go to the Gutenberg menu item and enable the look at the experiments page and enable real time collaboration. So there are a few steps there to get to that, but that’s good. So it all stays behind the experimental flag as long as it’s in development. Good.

\n\n\n\n

What’s in Active Development or Discussed

\n\n\n\n

So for the developers amongst you listener, there is. I’m sharing an issue about the version 2 of the build WordPress scripts where Riad Benguella, one of the lead architects of Gutenberg has opened this issue about kind of making scripts a little bit more flexible and also have the point that it comes easier and feels a little bit more simple. But that’s all is good. Good goals I would say but I think the technology is a little bit more complicated. But I will share that for all the developers on the show or who listen here to check out because Riad needs people who build plugins and have a build process and use the WordPress scripts to actually test the version 2 so they can catch all the edge cases and all the use cases before they actually migrate that all over. So that’s my thing. Alan, is there something that you want to remind people about upcoming events or releases.

\n\n\n\n

Ellen Bauer: Actually I can’t think of anything at the moment.

\n\n\n\n

Birgit Pauli-Haack: So if people want to connect with you, where would they find you on the.

\n\n\n\n

Ellen Bauer: I’m definitely on the Slack WordPress Developer Slack or on social. I think I’m moving more and more to Blue Sky.

\n\n\n\n

Birgit Pauli-Haack: Okay.

\n\n\n\n

Ellen Bauer: And yeah also on X and there and YouTube is like a thing I want to be more present and add more content to. So yeah, I have a YouTube channel. I think you can find me just under my name on all of these or maybe Elmer studio on the YouTube. I’m not sure. I think both is possible.

\n\n\n\n

Birgit Pauli-Haack: Okay. Yeah I will share share this all in the show notes and as always. Oh I wanted to announce something. Sorry on November 13th. That’s next week. If you listen to this over the weekend you get the chance to see the developer hours come back to the online workshops on Learn on Meetup and JuanMa and Jonathan Bosinger are going over the developer parts of WordPress 6.9 one is the Data Views and Data Forms and Fields API. The other one is the Abilities API and they might even be covering Interactivity API, seeing what kind of time they have. But that’s on meetup on November 13, just to let you know.

\n\n\n\n

Ellen Bauer: Exciting.

\n\n\n\n

Birgit Pauli-Haack: Yes. As always, the show notes will be published on GutenbergTimes.com/podcast. This is episode 124. 124. And if you have questions and suggestions or news you want us to include, send them to changelogutenbergtimes.com that’s changelogutenbergtimes.com and if you want to leave a review on Apple or podcast or Pocketcast or any other of your favorite podcast, only.

\n\n\n\n

Ellen Bauer: Five star, of course.

\n\n\n\n

Birgit Pauli-Haack: Well, I, I take anyone. Yeah, that, that’s kind of how I connect with the listeners and if you can improve.

\n\n\n\n

Ellen Bauer: But you deserve the best.

\n\n\n\n

Birgit Pauli-Haack: Well, thank you. Thank you. I think so. But yeah, maybe other people have a different opinion and my, my opinion only counts when I’m home alone. So. Yeah. So thanks everyone. And until the next time, be well. And we see we hear each other just before Thanksgiving. And thanks to Ellen Bauer for coming to us.

\n\n\n\n

Ellen Bauer: Thank you. Bye, everyone.

\n\n\n\n

Birgit Pauli-Haack: Take care.

\n\n\n\n

Ellen Bauer: Bye. 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 Nov 2025 13:22: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: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:21:\"\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:2:{s:0:\"\";a:5:{s:5:\"title\";a:1:{i:0;a:5:{s:4:\"data\";s:20:\"Matt: Ben on Bubbles\";s: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=150519\";s: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:37:\"https://ma.tt/2025/11/ben-on-bubbles/\";s: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:181:\"

Check out Ben Thompson of Stratechery (one of the most valuable subscriptions) on The Benefits of Bubbles.

\";s: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 Nov 2025 04:45: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: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\";a:9:{s:6:\"server\";s:5:\"nginx\";s:4:\"date\";s:29:\"Wed, 03 Dec 2025 16:16:39 GMT\";s:12:\"content-type\";s:8:\"text/xml\";s:13:\"last-modified\";s:29:\"Wed, 03 Dec 2025 16:00:21 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:1764778051;s:21:\"cache_expiration_time\";i:1764821799;s:23:\"__cache_expiration_time\";i:1764821799;}','off'), +(382,'_site_transient_timeout_feed_mod_d117b5738fbd35bd8c0391cda1f2b5d9','1764821799','off'), +(383,'_site_transient_feed_mod_d117b5738fbd35bd8c0391cda1f2b5d9','1764778599','off'), +(384,'_transient_timeout_dash_v2_88ae138922fe95674369b1cb3d215a2b','1764821799','off'), +(385,'_transient_dash_v2_88ae138922fe95674369b1cb3d215a2b','','off'), +(388,'wpgraphql_logging_settings','a:2:{s:19:\"basic_configuration\";a:5:{s:7:\"enabled\";b:1;s:15:\"ip_restrictions\";s:0:\"\";s:13:\"exclude_query\";s:20:\"__schema,GetSeedNode\";s:13:\"data_sampling\";s:2:\"50\";s:19:\"event_log_selection\";a:6:{i:0;s:18:\"do_graphql_request\";i:1;s:22:\"graphql_before_execute\";i:2;s:23:\"graphql_return_response\";i:3;s:20:\"graphql_request_data\";i:4;s:23:\"graphql_request_results\";i:5;s:32:\"graphql_response_headers_to_send\";}}s:15:\"data_management\";a:4:{s:21:\"data_deletion_enabled\";b:1;s:19:\"data_retention_days\";i:7;s:25:\"data_sanitization_enabled\";b:1;s:24:\"data_sanitization_method\";s:11:\"recommended\";}}','auto'); +/*!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 = utf8mb4 */; +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=198 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'), +(11,24,'_edit_lock','1743159674:1'), +(12,26,'_edit_last','1'), +(13,26,'_edit_lock','1743172384:1'), +(14,27,'_edit_last','1'), +(15,27,'_edit_lock','1743159812:1'), +(16,28,'_edit_last','1'), +(17,28,'_edit_lock','1743159837:1'), +(33,320,'_wp_attached_file','2025/03/tim-mossholder-dqxr8A7Twwc-unsplash-scaled.jpg'), +(34,320,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1707;s:4:\"file\";s:54:\"2025/03/tim-mossholder-dqxr8A7Twwc-unsplash-scaled.jpg\";s:8:\"filesize\";i:885515;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:47:\"tim-mossholder-dqxr8A7Twwc-unsplash-300x200.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:19437;}s:5:\"large\";a:5:{s:4:\"file\";s:48:\"tim-mossholder-dqxr8A7Twwc-unsplash-1024x683.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:175643;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:47:\"tim-mossholder-dqxr8A7Twwc-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:9942;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:47:\"tim-mossholder-dqxr8A7Twwc-unsplash-768x512.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:102589;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:49:\"tim-mossholder-dqxr8A7Twwc-unsplash-1536x1024.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:365482;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:49:\"tim-mossholder-dqxr8A7Twwc-unsplash-2048x1365.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:605166;}}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:39:\"tim-mossholder-dqxr8A7Twwc-unsplash.jpg\";}'), +(38,30,'_edit_lock','1747393602:1'), +(39,322,'_wp_attached_file','2025/03/sebastian-tapia-huerta-5qba-p9ahTE-unsplash-scaled.jpg'), +(40,322,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1707;s:4:\"file\";s:62:\"2025/03/sebastian-tapia-huerta-5qba-p9ahTE-unsplash-scaled.jpg\";s:8:\"filesize\";i:523407;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:55:\"sebastian-tapia-huerta-5qba-p9ahTE-unsplash-300x200.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:14335;}s:5:\"large\";a:5:{s:4:\"file\";s:56:\"sebastian-tapia-huerta-5qba-p9ahTE-unsplash-1024x683.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:103403;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:55:\"sebastian-tapia-huerta-5qba-p9ahTE-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:8216;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:55:\"sebastian-tapia-huerta-5qba-p9ahTE-unsplash-768x512.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:61650;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:57:\"sebastian-tapia-huerta-5qba-p9ahTE-unsplash-1536x1024.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:212192;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:57:\"sebastian-tapia-huerta-5qba-p9ahTE-unsplash-2048x1365.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:352470;}}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:47:\"sebastian-tapia-huerta-5qba-p9ahTE-unsplash.jpg\";}'), +(43,30,'_thumbnail_id','322'), +(44,31,'_edit_lock','1747393483:1'), +(45,32,'_edit_lock','1747393536:1'), +(49,31,'_thumbnail_id','320'), +(55,32,'_thumbnail_id','322'), +(56,19,'_edit_lock','1743161252:1'), +(58,21,'_edit_lock','1743161378:1'), +(59,22,'_edit_lock','1743161361:1'), +(60,23,'_edit_lock','1743161375:1'), +(61,327,'_wp_attached_file','2025/03/alim-twul1x77QEo-unsplash-scaled.jpg'), +(62,327,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2048;s:6:\"height\";i:2560;s:4:\"file\";s:44:\"2025/03/alim-twul1x77QEo-unsplash-scaled.jpg\";s:8:\"filesize\";i:1113717;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:37:\"alim-twul1x77QEo-unsplash-240x300.jpg\";s:5:\"width\";i:240;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:27592;}s:5:\"large\";a:5:{s:4:\"file\";s:38:\"alim-twul1x77QEo-unsplash-819x1024.jpg\";s:5:\"width\";i:819;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:243103;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:37:\"alim-twul1x77QEo-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11831;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:37:\"alim-twul1x77QEo-unsplash-768x960.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:960;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:216088;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:39:\"alim-twul1x77QEo-unsplash-1229x1536.jpg\";s:5:\"width\";i:1229;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:482201;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:39:\"alim-twul1x77QEo-unsplash-1638x2048.jpg\";s:5:\"width\";i:1638;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:776456;}}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:29:\"alim-twul1x77QEo-unsplash.jpg\";}'), +(63,328,'_acf_changed',''), +(64,328,'footnotes',''), +(67,19,'_thumbnail_id','327'), +(68,330,'_wp_attached_file','2025/03/junhan-foong-ERLAcTp-8MQ-unsplash-scaled.jpg'), +(69,330,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1920;s:4:\"file\";s:52:\"2025/03/junhan-foong-ERLAcTp-8MQ-unsplash-scaled.jpg\";s:8:\"filesize\";i:957696;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:45:\"junhan-foong-ERLAcTp-8MQ-unsplash-300x225.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:225;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:20168;}s:5:\"large\";a:5:{s:4:\"file\";s:46:\"junhan-foong-ERLAcTp-8MQ-unsplash-1024x768.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:768;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:157551;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:45:\"junhan-foong-ERLAcTp-8MQ-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:9757;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:45:\"junhan-foong-ERLAcTp-8MQ-unsplash-768x576.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:576;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:93523;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:47:\"junhan-foong-ERLAcTp-8MQ-unsplash-1536x1152.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:333494;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:47:\"junhan-foong-ERLAcTp-8MQ-unsplash-2048x1536.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:597661;}}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:\"junhan-foong-ERLAcTp-8MQ-unsplash.jpg\";}'), +(73,332,'_acf_changed',''), +(74,332,'footnotes',''), +(75,333,'_wp_attached_file','2025/03/let-s-see-persia-c8dFTAYI0-8-unsplash-scaled.jpg'), +(76,333,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:1707;s:6:\"height\";i:2560;s:4:\"file\";s:56:\"2025/03/let-s-see-persia-c8dFTAYI0-8-unsplash-scaled.jpg\";s:8:\"filesize\";i:1067862;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:49:\"let-s-see-persia-c8dFTAYI0-8-unsplash-200x300.jpg\";s:5:\"width\";i:200;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:21170;}s:5:\"large\";a:5:{s:4:\"file\";s:50:\"let-s-see-persia-c8dFTAYI0-8-unsplash-683x1024.jpg\";s:5:\"width\";i:683;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:191199;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:49:\"let-s-see-persia-c8dFTAYI0-8-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11159;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:50:\"let-s-see-persia-c8dFTAYI0-8-unsplash-768x1152.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:237596;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:51:\"let-s-see-persia-c8dFTAYI0-8-unsplash-1024x1536.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:410721;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:51:\"let-s-see-persia-c8dFTAYI0-8-unsplash-1365x2048.jpg\";s:5:\"width\";i:1365;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:707358;}}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:41:\"let-s-see-persia-c8dFTAYI0-8-unsplash.jpg\";}'), +(79,21,'_thumbnail_id','333'), +(82,22,'_thumbnail_id','327'), +(85,23,'_thumbnail_id','330'), +(86,13,'_edit_lock','1743161654:1'), +(87,14,'_edit_lock','1743161475:1'), +(88,15,'_edit_lock','1743161485:1'), +(89,7,'_edit_lock','1747325945:1'), +(90,16,'_edit_lock','1743161585:1'), +(91,8,'_edit_lock','1743161620:1'), +(92,17,'_edit_lock','1743161633:1'), +(93,9,'_edit_lock','1743161668:1'), +(95,5,'_edit_lock','1743161733:1'), +(96,337,'_wp_attached_file','2025/03/clay-banks-8pFh9JUcQOY-unsplash-scaled.jpg'), +(97,337,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1600;s:4:\"file\";s:50:\"2025/03/clay-banks-8pFh9JUcQOY-unsplash-scaled.jpg\";s:8:\"filesize\";i:379095;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:43:\"clay-banks-8pFh9JUcQOY-unsplash-300x188.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:188;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11758;}s:5:\"large\";a:5:{s:4:\"file\";s:44:\"clay-banks-8pFh9JUcQOY-unsplash-1024x640.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:640;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:75037;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:43:\"clay-banks-8pFh9JUcQOY-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:6941;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:43:\"clay-banks-8pFh9JUcQOY-unsplash-768x480.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:480;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:46566;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:44:\"clay-banks-8pFh9JUcQOY-unsplash-1536x960.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:960;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:151997;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:45:\"clay-banks-8pFh9JUcQOY-unsplash-2048x1280.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1280;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:253115;}}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:35:\"clay-banks-8pFh9JUcQOY-unsplash.jpg\";}'), +(100,13,'_thumbnail_id','337'), +(101,339,'_wp_attached_file','2025/03/pepe-nero-JsSM2T9iPRU-unsplash-scaled.jpg'), +(102,339,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1707;s:4:\"file\";s:49:\"2025/03/pepe-nero-JsSM2T9iPRU-unsplash-scaled.jpg\";s:8:\"filesize\";i:773106;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:42:\"pepe-nero-JsSM2T9iPRU-unsplash-300x200.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:20952;}s:5:\"large\";a:5:{s:4:\"file\";s:43:\"pepe-nero-JsSM2T9iPRU-unsplash-1024x683.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:172770;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:42:\"pepe-nero-JsSM2T9iPRU-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:10108;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:42:\"pepe-nero-JsSM2T9iPRU-unsplash-768x512.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:104044;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:44:\"pepe-nero-JsSM2T9iPRU-unsplash-1536x1024.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:339517;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:44:\"pepe-nero-JsSM2T9iPRU-unsplash-2048x1365.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:543505;}}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:34:\"pepe-nero-JsSM2T9iPRU-unsplash.jpg\";}'), +(105,14,'_thumbnail_id','339'), +(108,15,'_thumbnail_id','337'), +(109,342,'_wp_attached_file','2025/03/priscilla-fraire-_1LvAexVWa8-unsplash-scaled.jpg'), +(110,342,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1706;s:4:\"file\";s:56:\"2025/03/priscilla-fraire-_1LvAexVWa8-unsplash-scaled.jpg\";s:8:\"filesize\";i:670433;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:49:\"priscilla-fraire-_1LvAexVWa8-unsplash-300x200.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:16477;}s:5:\"large\";a:5:{s:4:\"file\";s:50:\"priscilla-fraire-_1LvAexVWa8-unsplash-1024x683.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:110011;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:49:\"priscilla-fraire-_1LvAexVWa8-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:9624;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:49:\"priscilla-fraire-_1LvAexVWa8-unsplash-768x512.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:68662;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:51:\"priscilla-fraire-_1LvAexVWa8-unsplash-1536x1024.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:226620;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:51:\"priscilla-fraire-_1LvAexVWa8-unsplash-2048x1365.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:413956;}}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:41:\"priscilla-fraire-_1LvAexVWa8-unsplash.jpg\";}'), +(113,7,'_thumbnail_id','342'), +(114,344,'_wp_attached_file','2025/03/alin-gavriliuc-sAkUB5aCRcs-unsplash-scaled.jpg'), +(115,344,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1440;s:4:\"file\";s:54:\"2025/03/alin-gavriliuc-sAkUB5aCRcs-unsplash-scaled.jpg\";s:8:\"filesize\";i:203293;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:47:\"alin-gavriliuc-sAkUB5aCRcs-unsplash-300x169.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:169;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11592;}s:5:\"large\";a:5:{s:4:\"file\";s:48:\"alin-gavriliuc-sAkUB5aCRcs-unsplash-1024x576.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:576;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:53888;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:47:\"alin-gavriliuc-sAkUB5aCRcs-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:7828;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:47:\"alin-gavriliuc-sAkUB5aCRcs-unsplash-768x432.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:432;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:35794;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:48:\"alin-gavriliuc-sAkUB5aCRcs-unsplash-1536x864.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:864;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:96444;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:49:\"alin-gavriliuc-sAkUB5aCRcs-unsplash-2048x1152.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1152;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:145300;}}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:39:\"alin-gavriliuc-sAkUB5aCRcs-unsplash.jpg\";}'), +(118,16,'_thumbnail_id','344'), +(119,346,'_wp_attached_file','2025/03/steve-douglas-JjEbmnY1e0w-unsplash-scaled.jpg'), +(120,346,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1707;s:4:\"file\";s:53:\"2025/03/steve-douglas-JjEbmnY1e0w-unsplash-scaled.jpg\";s:8:\"filesize\";i:971895;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:46:\"steve-douglas-JjEbmnY1e0w-unsplash-300x200.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:20075;}s:5:\"large\";a:5:{s:4:\"file\";s:47:\"steve-douglas-JjEbmnY1e0w-unsplash-1024x683.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:194258;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:46:\"steve-douglas-JjEbmnY1e0w-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:10052;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:46:\"steve-douglas-JjEbmnY1e0w-unsplash-768x512.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:111792;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:48:\"steve-douglas-JjEbmnY1e0w-unsplash-1536x1024.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:395927;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:48:\"steve-douglas-JjEbmnY1e0w-unsplash-2048x1365.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:669965;}}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:38:\"steve-douglas-JjEbmnY1e0w-unsplash.jpg\";}'), +(123,8,'_thumbnail_id','346'), +(126,17,'_thumbnail_id','339'), +(127,349,'_wp_attached_file','2025/03/mario-la-pergola-dSrEUAtF3kU-unsplash-scaled.jpg'), +(128,349,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1706;s:4:\"file\";s:56:\"2025/03/mario-la-pergola-dSrEUAtF3kU-unsplash-scaled.jpg\";s:8:\"filesize\";i:850479;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:49:\"mario-la-pergola-dSrEUAtF3kU-unsplash-300x200.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:200;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:19408;}s:5:\"large\";a:5:{s:4:\"file\";s:50:\"mario-la-pergola-dSrEUAtF3kU-unsplash-1024x683.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:683;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:159579;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:49:\"mario-la-pergola-dSrEUAtF3kU-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:9507;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:49:\"mario-la-pergola-dSrEUAtF3kU-unsplash-768x512.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:512;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:94169;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:51:\"mario-la-pergola-dSrEUAtF3kU-unsplash-1536x1024.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:334220;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:51:\"mario-la-pergola-dSrEUAtF3kU-unsplash-2048x1365.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1365;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:566116;}}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:41:\"mario-la-pergola-dSrEUAtF3kU-unsplash.jpg\";}'), +(131,9,'_thumbnail_id','349'), +(135,352,'_wp_attached_file','2025/03/jf-martin-kZjBucSSj2s-unsplash-scaled.jpg'), +(136,352,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:1709;s:6:\"height\";i:2560;s:4:\"file\";s:49:\"2025/03/jf-martin-kZjBucSSj2s-unsplash-scaled.jpg\";s:8:\"filesize\";i:605133;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:42:\"jf-martin-kZjBucSSj2s-unsplash-200x300.jpg\";s:5:\"width\";i:200;s:6:\"height\";i:300;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:16432;}s:5:\"large\";a:5:{s:4:\"file\";s:43:\"jf-martin-kZjBucSSj2s-unsplash-684x1024.jpg\";s:5:\"width\";i:684;s:6:\"height\";i:1024;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:128487;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:42:\"jf-martin-kZjBucSSj2s-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:10472;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:43:\"jf-martin-kZjBucSSj2s-unsplash-768x1150.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:1150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:156657;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:44:\"jf-martin-kZjBucSSj2s-unsplash-1026x1536.jpg\";s:5:\"width\";i:1026;s:6:\"height\";i:1536;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:259096;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:44:\"jf-martin-kZjBucSSj2s-unsplash-1367x2048.jpg\";s:5:\"width\";i:1367;s:6:\"height\";i:2048;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:420738;}}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:34:\"jf-martin-kZjBucSSj2s-unsplash.jpg\";}'), +(139,5,'_thumbnail_id','352'), +(144,355,'_edit_lock','1743161605:1'), +(145,301,'_edit_lock','1747393457:1'), +(146,313,'_edit_lock','1743161843:1'), +(147,314,'_edit_lock','1743161867:1'), +(148,315,'_edit_lock','1743161872:1'), +(149,316,'_edit_lock','1743161880:1'), +(150,317,'_edit_lock','1743161899:1'), +(151,307,'_edit_lock','1743161960:1'), +(152,308,'_edit_lock','1743161971:1'), +(153,309,'_edit_lock','1743162020:1'), +(154,310,'_edit_lock','1747325946:1'), +(155,311,'_edit_lock','1743162031:1'), +(156,302,'_edit_lock','1743162055:1'), +(157,303,'_edit_lock','1747325947:1'), +(158,304,'_edit_lock','1743162069:1'), +(159,305,'_edit_lock','1743162076:1'), +(160,356,'_wp_attached_file','2025/03/dabbas-j0OhftYAXR4-unsplash-scaled.jpg'), +(161,356,'_wp_attachment_metadata','a:7:{s:5:\"width\";i:2560;s:6:\"height\";i:1921;s:4:\"file\";s:46:\"2025/03/dabbas-j0OhftYAXR4-unsplash-scaled.jpg\";s:8:\"filesize\";i:953553;s:5:\"sizes\";a:6:{s:6:\"medium\";a:5:{s:4:\"file\";s:39:\"dabbas-j0OhftYAXR4-unsplash-300x225.jpg\";s:5:\"width\";i:300;s:6:\"height\";i:225;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:25014;}s:5:\"large\";a:5:{s:4:\"file\";s:40:\"dabbas-j0OhftYAXR4-unsplash-1024x768.jpg\";s:5:\"width\";i:1024;s:6:\"height\";i:768;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:223040;}s:9:\"thumbnail\";a:5:{s:4:\"file\";s:39:\"dabbas-j0OhftYAXR4-unsplash-150x150.jpg\";s:5:\"width\";i:150;s:6:\"height\";i:150;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:11344;}s:12:\"medium_large\";a:5:{s:4:\"file\";s:39:\"dabbas-j0OhftYAXR4-unsplash-768x576.jpg\";s:5:\"width\";i:768;s:6:\"height\";i:576;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:132969;}s:9:\"1536x1536\";a:5:{s:4:\"file\";s:41:\"dabbas-j0OhftYAXR4-unsplash-1536x1153.jpg\";s:5:\"width\";i:1536;s:6:\"height\";i:1153;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:440313;}s:9:\"2048x2048\";a:5:{s:4:\"file\";s:41:\"dabbas-j0OhftYAXR4-unsplash-2048x1537.jpg\";s:5:\"width\";i:2048;s:6:\"height\";i:1537;s:9:\"mime-type\";s:10:\"image/jpeg\";s:8:\"filesize\";i:685580;}}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:31:\"dabbas-j0OhftYAXR4-unsplash.jpg\";}'), +(162,309,'_thumbnail_id','356'), +(163,301,'_thumbnail_id','342'), +(164,28,'_wp_trash_meta_status','publish'), +(165,28,'_wp_trash_meta_time','1743165634'), +(166,28,'_wp_desired_post_slug','taxonomy_67e68296e2309'), +(178,358,'_acf_changed',''), +(179,358,'footnotes',''), +(180,359,'_acf_changed',''), +(181,359,'footnotes',''), +(182,360,'_acf_changed',''), +(183,361,'_acf_changed',''), +(187,363,'_acf_changed',''), +(188,363,'footnotes',''), +(195,365,'_acf_changed',''), +(196,365,'footnotes',''), +(197,366,'_acf_changed',''); +/*!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 = utf8mb4 */; +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`), + KEY `type_status_author` (`post_type`,`post_status`,`post_author`) +) ENGINE=InnoDB AUTO_INCREMENT=367 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-28 10:41:07','2025-03-28 10:41:07','\n

This is an example page. It\'s different from a blog post because it will stay in one place and will show up in your site navigation (in most themes). Most people start with an About page that introduces them to potential site visitors. It might say something like this:

\n\n\n\n

Hi there! I\'m a bike messenger by day, aspiring actor by night, and this is my website. I live in Los Angeles, have a great dog named Jack, and I like piña coladas. (And gettin\' caught in the rain.)

\n\n\n\n

...or something like this:

\n\n\n\n

The XYZ Doohickey Company was founded in 1971, and has been providing quality doohickeys to the public ever since. Located in Gotham City, XYZ employs over 2,000 people and does all kinds of awesome things for the Gotham community.

\n\n\n\n

As a new WordPress user, you should go to your dashboard to delete this page and create new pages for your content. Have fun!

\n','Sample Page','','publish','closed','open','','sample-page','','','2025-03-28 10:41:07','2025-03-28 10:41:07','',0,'http://echoes.local/?page_id=2',0,'page','',0), +(3,1,'2025-03-28 10:41:07','2025-03-28 10:41:07','\n

Who we are

\n\n\n

Suggested text: Our website address is: http://echoes.local.

\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','','draft','closed','open','','privacy-policy','','','2025-03-28 10:41:07','2025-03-28 10:41:07','',0,'http://echoes.local/?page_id=3',0,'page','',0), +(4,1,'2025-03-28 10:41:26','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2025-03-28 10:41:26','0000-00-00 00:00:00','',0,'http://echoes.local/?p=4',0,'post','',0), +(5,1,'2025-03-28 10:52:33','2025-03-28 10:52:33','Stained glass windows were more than just decorative elements in medieval architecture; they were powerful tools for storytelling and religious education. These magnificent works of art combined innovative glass-making techniques with detailed artistic expression to create luminous scenes that transformed interior spaces. The way sunlight filtered through these colored windows was often described as \"divine light\" by medieval observers.\n\nThe creation of medieval stained glass was a complex process that required significant skill and knowledge. Craftsmen would cut colored glass into specific shapes, paint details onto the glass pieces, and join them together with lead cames. The most impressive examples of medieval stained glass can be found in Gothic cathedrals, where large rose windows and towering lancet windows create breathtaking displays of colored light.\n\nBeyond their artistic beauty, stained glass windows served as \"books of light\" for the largely illiterate medieval population, depicting biblical stories, saints\' lives, and moral lessons through their vivid imagery. The technical and artistic achievement of medieval stained glass makers continues to inspire awe and admiration today.','Stained Glass: The Medieval Art of Light','','publish','open','open','','stained-glass-the-medieval-art-of-light','','','2025-03-28 11:35:33','2025-03-28 11:35:33','',0,'https://example.com/?p=5',0,'post','',0), +(7,1,'2025-03-28 10:56:33','2025-03-28 10:56:33','The Gothic cathedrals of France stand as testament to medieval architectural brilliance and religious devotion. These magnificent structures, built between the 12th and 16th centuries, revolutionized architectural design with their innovative features and soaring heights. The implementation of pointed arches, ribbed vaults, and flying buttresses allowed these buildings to reach unprecedented heights while featuring walls of stained glass that seemed to defy gravity.\n\nNotre-Dame de Paris, despite recent challenges, remains one of the finest examples of French Gothic architecture. Its harmonious proportions, twin towers, and spectacular rose windows have inspired architects and artists for centuries. The cathedral\'s flying buttresses, among the first of their kind, demonstrate the innovative engineering solutions that made Gothic architecture possible.','The Magnificent Gothic Cathedrals of France','','publish','open','open','','the-magnificent-gothic-cathedrals-of-france','','','2025-03-28 11:32:12','2025-03-28 11:32:12','',0,'https://example.com/?p=1',0,'post','',0), +(8,1,'2025-03-28 10:55:33','2025-03-28 10:55:33','Medieval castles were masterpieces of defensive architecture, designed to protect their inhabitants from siege and assault. The evolution of castle design reflects the ongoing battle between defensive innovations and offensive warfare techniques. From simple wooden structures on hills, castles evolved into sophisticated stone fortresses with multiple layers of defense.\n\nThe key elements of castle defense included high stone walls, moats, drawbridges, and strategic placement on elevated ground. Concentric castles, with their multiple rings of walls, represented the pinnacle of medieval defensive architecture. These formidable structures often featured arrow slits, murder holes, and machicolations, all designed to give defenders the advantage over attacking forces.\n\nThe great keeps of these castles served not only as last-resort defensive positions but also as symbols of power and authority. Their thick walls and limited access points made them nearly impregnable when properly defended, while their impressive height served as a constant reminder of the lord\'s authority over the surrounding lands.','Medieval Castle Defense Systems','','publish','open','open','','medieval-castle-defense-systems','','','2025-03-28 11:33:42','2025-03-28 11:33:42','',0,'https://example.com/?p=2',0,'post','',0), +(9,1,'2025-03-28 10:54:33','2025-03-28 10:54:33','\n \"Romanesque\n \n

Romanesque architecture, predominant in medieval Europe from the 6th to the 11th century, marked a significant evolution in building design. Characterized by its massive walls, round arches, and barrel vaults, this architectural style laid the foundation for the later Gothic period. The term \"Romanesque\" reflects the architecture\'s similarity to Roman designs, particularly in the use of round arches and vaulted ceilings.

\n\n

One of the most distinctive features of Romanesque architecture is the rounded arch, used for both structural and decorative purposes. These arches appeared in doorways, windows, and arcade sections, creating the characteristic appearance we associate with medieval churches and monasteries. The thick walls and small windows of Romanesque buildings were necessary to support the heavy stone vaults above.

\n ','Romanesque Architecture: The Round Arch Revolution','','publish','open','open','','romanesque-architecture-the-round-arch-revolution','','','2025-03-28 11:34:30','2025-03-28 11:34:30','',0,'https://example.com/?p=3',0,'post','',0), +(11,1,'2025-03-28 11:01:53','2025-03-28 11:01:53','','Navigation','','publish','closed','closed','','navigation','','','2025-03-28 11:01:53','2025-03-28 11:01:53','',0,'http://echoes.local/navigation/',0,'wp_navigation','',0), +(13,1,'2025-03-28 10:58:39','2025-03-28 10:58:39','Chinese pagodas represent some of the most iconic structures in Oriental architecture, serving as both religious monuments and symbols of cultural identity. These multi-tiered towers, evolving from Indian stupas, have become distinctive features of the Chinese landscape. Each level of a pagoda typically features characteristic upturned eaves, creating a visual rhythm that draws the eye skyward.\n\nThe engineering behind these structures is remarkably sophisticated, incorporating innovative techniques for earthquake resistance and weight distribution. The use of a central pillar, known as the \"heart pillar,\" combined with sophisticated bracketing systems, allows these towers to maintain their stability despite their impressive heights. Many ancient pagodas have survived centuries of natural disasters, testament to their ingenious construction methods.\n\nBeyond their structural brilliance, pagodas also serve as repositories of Buddhist relics and sacred texts, making them important centers of spiritual life. Their placement often follows precise feng shui principles, ensuring harmony with the surrounding landscape and optimal energy flow.','The Ancient Art of Chinese Pagodas','','publish','open','open','','the-ancient-art-of-chinese-pagodas','','','2025-03-28 11:30:41','2025-03-28 11:30:41','',0,'https://example.com/?p=1',0,'post','',0), +(14,1,'2025-03-28 10:57:39','2025-03-28 10:57:39','Japanese Zen gardens, or karesansui, represent the epitome of minimalist architectural design in Oriental culture. These dry landscape gardens use carefully arranged rocks, gravel, and occasional plant elements to create spaces for meditation and contemplation. The architectural principles behind these gardens emphasize void spaces as much as physical elements, creating a perfect balance between presence and absence.\n\nThe design of Zen gardens follows strict principles that have been refined over centuries. The placement of each element is carefully considered, with rocks and sand patterns often representing natural landscapes in abstract forms. The surrounding architecture, including verandas and viewing pavilions, is integral to the garden experience, creating carefully framed views and meditation spaces.','Japanese Zen Gardens: Architecture of Tranquility','','publish','open','open','','japanese-zen-gardens-architecture-of-tranquility','','','2025-03-28 11:31:20','2025-03-28 11:31:20','',0,'https://example.com/?p=2',0,'post','',0), +(15,1,'2025-03-28 10:56:39','2025-03-28 10:56:39','The Forbidden City stands as the ultimate expression of Chinese imperial architecture, embodying centuries of architectural wisdom and symbolic design. This vast palace complex demonstrates the sophisticated planning principles of traditional Chinese architecture, with its strict axiality, hierarchical spaces, and profound symbolic meanings embedded in every architectural detail.\n\nThe architectural features of the Forbidden City are rich with symbolism: the yellow roof tiles, exclusive to imperial buildings, the number of studs on doors indicating the rank of the building\'s occupant, and the intricate bracketing systems known as dougong that support the massive roofs without nails. The entire complex was designed according to cosmic principles, reflecting the emperor\'s role as the Son of Heaven.\n\nThe palace\'s defensive architecture is equally impressive, featuring high walls, moats, and strategic gates that created multiple layers of security. Yet within these defensive walls lie some of the most refined examples of Chinese architectural aesthetics, from delicate gardens to grand ceremonial halls.','The Forbidden City: Marvel of Imperial Chinese Architecture','','publish','open','open','','the-forbidden-city-marvel-of-imperial-chinese-architecture','','','2025-03-28 11:31:33','2025-03-28 11:31:33','',0,'https://example.com/?p=3',0,'post','',0), +(16,1,'2025-03-28 10:55:39','2025-03-28 10:55:39','Japanese wooden architecture represents a unique tradition that has evolved over millennia, characterized by sophisticated joinery techniques that eliminate the need for nails or screws. This architectural tradition emphasizes the natural beauty of wood and creates structures that can be dismantled and rebuilt, contributing to their longevity and sustainability.\n\nThe most remarkable aspect of Japanese wooden architecture is its ability to create large, open spaces using post-and-beam construction combined with complex bracketing systems. Temples like Hōryū-ji, the world\'s oldest surviving wooden structure, demonstrate how these techniques have created buildings that have endured for over 1,300 years.\n\nThe aesthetic principles of Japanese wooden architecture emphasize the importance of the grain and natural patterns in the wood, often leaving it unfinished or minimally treated to maintain its natural beauty. This approach reflects the broader Japanese aesthetic principle of finding beauty in simplicity and natural materials.','Traditional Japanese Wood Architecture','','publish','open','open','','traditional-japanese-wood-architecture','','','2025-03-28 11:33:07','2025-03-28 11:33:07','',0,'https://example.com/?p=4',0,'post','',0), +(17,1,'2025-03-28 10:54:39','2025-03-28 10:54:39','Feng Shui principles have profoundly influenced Oriental architecture for thousands of years, shaping everything from city planning to interior design. This ancient practice of harmonizing people with their surrounding environment has created architectural guidelines that promote balance, prosperity, and well-being. The careful consideration of natural elements, cardinal directions, and energy flow has resulted in distinctive architectural features throughout East Asia.\n\nIn traditional Oriental architecture, Feng Shui principles determine crucial aspects such as building orientation, door placement, and room layout. The concept of qi (life force) flowing through buildings has led to specific architectural features like curved pathways in gardens, strategic placement of water features, and the deliberate positioning of structural elements to promote positive energy flow.\n\nModern architects continue to incorporate these ancient principles into contemporary designs, recognizing their value in creating harmonious living and working spaces. The enduring influence of Feng Shui demonstrates how traditional wisdom can inform modern architectural practices.','Feng Shui in Oriental Architecture','','publish','open','open','','feng-shui-in-oriental-architecture','','','2025-03-28 11:33:55','2025-03-28 11:33:55','',0,'https://example.com/?p=5',0,'post','',0), +(19,1,'2025-03-28 11:00:31','2025-03-28 11:00:31','Islamic geometric patterns represent one of the most distinctive features of Middle Eastern architecture, combining mathematical precision with artistic beauty. These intricate designs, which adorn everything from mosque walls to palace ceilings, reflect the Islamic appreciation of unity and order in art. The patterns are based on repeated geometric shapes, creating infinite patterns that symbolize the infinite nature of Allah.\n\nThe complexity of these patterns stems from the mathematical principles of symmetry and proportion. Architects and artisans used simple tools - compass and ruler - to create designs of astounding complexity. The patterns typically begin with a basic geometric shape, such as a circle, which is then repeated, interlaced, and expanded to create elaborate star patterns and complex polygonal compositions.\n\nThese geometric patterns serve both decorative and spiritual purposes. In the absence of figurative art in religious spaces, these patterns became a primary means of architectural decoration, creating spaces of contemplation and beauty that reflect the mathematical order of the universe.','The Art of Islamic Geometric Patterns','','publish','open','open','','the-art-of-islamic-geometric-patterns','','','2025-03-28 11:27:35','2025-03-28 11:27:35','',0,'https://example.com/?p=1',0,'post','',0), +(21,1,'2025-03-28 11:00:31','2025-03-28 11:00:31','Persian gardens and palaces represent a unique architectural tradition that has influenced design throughout the Middle East and beyond. The concept of the chahar bagh (four-garden) layout, with its quadrilateral design divided by waterways and walkways, creates an earthly paradise that reflects the Islamic description of heaven. These gardens are not merely decorative but represent a sophisticated understanding of hydraulics, climatology, and spatial design.\n\nThe palaces integrated within these gardens showcase the refinement of Persian architecture, with their intricate tile work, mirror mosaics, and carved stucco decorations. The interplay between indoor and outdoor spaces creates a seamless flow between architecture and nature, while clever design features like wind towers (badgirs) provide natural cooling in the harsh desert climate.\n\nFamous examples like the Golestan Palace complex in Tehran demonstrate how these architectural principles evolved over time, incorporating new influences while maintaining traditional Persian design elements. The integration of water features, shade, and carefully planned sight lines creates spaces of extraordinary beauty and comfort.','Persian Gardens and Palace Architecture','','publish','open','open','','persian-gardens-and-palace-architecture','','','2025-03-28 11:29:05','2025-03-28 11:29:05','',0,'https://example.com/?p=3',0,'post','',0), +(22,1,'2025-03-28 11:00:31','2025-03-28 11:00:31','Arabic calligraphy stands as one of the most distinctive features of Middle Eastern architecture, transforming buildings into three-dimensional manuscripts. This architectural calligraphy goes beyond mere decoration, incorporating Quranic verses, poetry, and historical inscriptions that give buildings both spiritual and cultural significance. The integration of script into architectural design reached its peak during the Islamic Golden Age, creating a unique fusion of text and architecture.\n\nThe evolution of architectural calligraphy reflects the development of various Arabic scripts, from the angular Kufic to the flowing Thuluth style. Artisans developed innovative techniques to incorporate these scripts into different materials - carved in stone, molded in stucco, or crafted in tilework. The placement of calligraphy often follows careful architectural planning, with specific texts chosen for particular locations within buildings.','The Evolution of Arabic Calligraphy in Architecture','','publish','open','open','','the-evolution-of-arabic-calligraphy-in-architecture','','','2025-03-28 11:29:24','2025-03-28 11:29:24','',0,'https://example.com/?p=4',0,'post','',0), +(23,1,'2025-03-28 11:00:31','2025-03-28 11:00:31','Arabesque patterns represent one of the most sophisticated developments in architectural decoration, combining floral motifs with geometric patterns to create intricate, endless designs. These flowing, interlaced patterns are characterized by a continuous stem system that produces a variety of abstract flowers, leaves, and tendrils, creating a rhythmic pattern that appears to extend infinitely in all directions.\n\nThe development of arabesque patterns reflects the Islamic artistic tradition\'s emphasis on non-representational art. These patterns serve multiple purposes: they create visual interest, demonstrate mathematical and artistic sophistication, and reflect theological concepts about the infinite nature of divine creation. The complexity of arabesque designs often increases around focal points such as mihrab niches or entrance portals.\n\nModern Middle Eastern architecture continues to incorporate arabesque patterns, often reinterpreting traditional designs through contemporary materials and techniques. This enduring influence demonstrates how historical decorative elements can be adapted for contemporary architectural expression while maintaining their cultural significance.','The Art of Arabesque in Middle Eastern Architecture','','publish','open','open','','the-art-of-arabesque-in-middle-eastern-architecture','','','2025-03-28 11:29:36','2025-03-28 11:29:36','',0,'https://example.com/?p=5',0,'post','',0), +(24,1,'2025-03-28 11:03:37','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2025-03-28 11:03:37','0000-00-00 00:00:00','',0,'http://echoes.local/?p=24',0,'post','',0), +(25,1,'2025-03-28 11:03:37','2025-03-28 11:03:37','{\"version\": 3, \"isGlobalStylesUserThemeJSON\": true }','Custom Styles','','publish','closed','closed','','wp-global-styles-twentytwentyfive','','','2025-03-28 11:03:37','2025-03-28 11:03:37','',0,'http://echoes.local/wp-global-styles-twentytwentyfive/',0,'wp_global_styles','',0), +(26,1,'2025-03-28 11:05:00','2025-03-28 11:05:00','a:38:{s:9:\"post_type\";s:8:\"building\";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:9:\"Buildings\";s:13:\"singular_name\";s:8:\"Building\";s:9:\"menu_name\";s:9:\"Buildings\";s:9:\"all_items\";s:13:\"All Buildings\";s:9:\"edit_item\";s:13:\"Edit Building\";s:9:\"view_item\";s:13:\"View Building\";s:10:\"view_items\";s:14:\"View Buildings\";s:12:\"add_new_item\";s:16:\"Add New Building\";s:7:\"add_new\";s:16:\"Add New Building\";s:8:\"new_item\";s:12:\"New Building\";s:17:\"parent_item_colon\";s:16:\"Parent Building:\";s:12:\"search_items\";s:16:\"Search Buildings\";s:9:\"not_found\";s:18:\"No buildings found\";s:18:\"not_found_in_trash\";s:27:\"No buildings found in Trash\";s:8:\"archives\";s:17:\"Building Archives\";s:10:\"attributes\";s:19:\"Building 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:20:\"Insert into building\";s:21:\"uploaded_to_this_item\";s:25:\"Uploaded to this building\";s:17:\"filter_items_list\";s:21:\"Filter buildings list\";s:14:\"filter_by_date\";s:24:\"Filter buildings by date\";s:21:\"items_list_navigation\";s:25:\"Buildings list navigation\";s:10:\"items_list\";s:14:\"Buildings list\";s:14:\"item_published\";s:19:\"Building published.\";s:24:\"item_published_privately\";s:29:\"Building published privately.\";s:22:\"item_reverted_to_draft\";s:27:\"Building reverted to draft.\";s:14:\"item_scheduled\";s:19:\"Building scheduled.\";s:12:\"item_updated\";s:17:\"Building updated.\";s:9:\"item_link\";s:13:\"Building Link\";s:21:\"item_link_description\";s:21:\"A link to a building.\";}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:5:{i:0;s:5:\"title\";i:1;s:6:\"editor\";i:2;s:7:\"excerpt\";i:3;s:9:\"thumbnail\";i:4;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:8:\"building\";s:19:\"graphql_plural_name\";s:9:\"buildings\";}','Buildings','buildings','publish','closed','closed','','post_type_67e68244b3194','','','2025-03-28 14:19:30','2025-03-28 14:19:30','',0,'http://echoes.local/?post_type=acf-post-type&p=26',0,'acf-post-type','',0), +(27,1,'2025-03-28 11:05:55','2025-03-28 11:05:55','a:32:{s:8:\"taxonomy\";s:6:\"period\";s:11:\"object_type\";a:2:{i:0;s:4:\"post\";i:1;s:8:\"building\";}s:22:\"advanced_configuration\";i:1;s:13:\"import_source\";s:0:\"\";s:11:\"import_date\";s:0:\"\";s:6:\"labels\";a:25:{s:4:\"name\";s:7:\"Periods\";s:13:\"singular_name\";s:6:\"Period\";s:9:\"menu_name\";s:7:\"Periods\";s:9:\"all_items\";s:11:\"All Periods\";s:9:\"edit_item\";s:11:\"Edit Period\";s:9:\"view_item\";s:11:\"View Period\";s:11:\"update_item\";s:13:\"Update Period\";s:12:\"add_new_item\";s:14:\"Add New Period\";s:13:\"new_item_name\";s:15:\"New Period Name\";s:12:\"search_items\";s:14:\"Search Periods\";s:13:\"popular_items\";s:15:\"Popular Periods\";s:26:\"separate_items_with_commas\";s:28:\"Separate periods with commas\";s:19:\"add_or_remove_items\";s:21:\"Add or remove periods\";s:21:\"choose_from_most_used\";s:33:\"Choose from the most used periods\";s:9:\"most_used\";s:0:\"\";s:9:\"not_found\";s:16:\"No periods found\";s:8:\"no_terms\";s:10:\"No periods\";s:22:\"name_field_description\";s:0:\"\";s:22:\"slug_field_description\";s:0:\"\";s:22:\"desc_field_description\";s:0:\"\";s:21:\"items_list_navigation\";s:23:\"Periods list navigation\";s:10:\"items_list\";s:12:\"Periods list\";s:13:\"back_to_items\";s:17:\"← Go to periods\";s:9:\"item_link\";s:11:\"Period Link\";s:21:\"item_link_description\";s:18:\"A link to a period\";}s:11:\"description\";s:0:\"\";s:12:\"capabilities\";a:4:{s:12:\"manage_terms\";s:17:\"manage_categories\";s:10:\"edit_terms\";s:17:\"manage_categories\";s:12:\"delete_terms\";s:17:\"manage_categories\";s:12:\"assign_terms\";s:10:\"edit_posts\";}s:6:\"public\";i:1;s:18:\"publicly_queryable\";i:1;s:12:\"hierarchical\";i:0;s:7:\"show_ui\";i:1;s:12:\"show_in_menu\";i:1;s:17:\"show_in_nav_menus\";i:1;s:12:\"show_in_rest\";i:1;s:9:\"rest_base\";s:0:\"\";s:14:\"rest_namespace\";s:5:\"wp/v2\";s:21:\"rest_controller_class\";s:24:\"WP_REST_Terms_Controller\";s:13:\"show_tagcloud\";i:1;s:18:\"show_in_quick_edit\";i:1;s:17:\"show_admin_column\";i:0;s:7:\"rewrite\";a:3:{s:17:\"permalink_rewrite\";s:12:\"taxonomy_key\";s:10:\"with_front\";s:1:\"1\";s:20:\"rewrite_hierarchical\";s:1:\"0\";}s:9:\"query_var\";s:13:\"post_type_key\";s:14:\"query_var_name\";s:0:\"\";s:12:\"default_term\";a:1:{s:20:\"default_term_enabled\";s:1:\"0\";}s:4:\"sort\";i:0;s:8:\"meta_box\";s:7:\"default\";s:11:\"meta_box_cb\";s:0:\"\";s:20:\"meta_box_sanitize_cb\";s:0:\"\";s:15:\"show_in_graphql\";i:1;s:19:\"graphql_single_name\";s:6:\"period\";s:19:\"graphql_plural_name\";s:7:\"periods\";}','Periods','periods','publish','closed','closed','','taxonomy_67e682650f8d6','','','2025-03-28 11:05:55','2025-03-28 11:05:55','',0,'http://echoes.local/?post_type=acf-taxonomy&p=27',0,'acf-taxonomy','',0), +(28,1,'2025-03-28 11:06:20','2025-03-28 11:06:20','a:32:{s:8:\"taxonomy\";s:5:\"style\";s:11:\"object_type\";a:2:{i:0;s:8:\"building\";i:1;s:4:\"post\";}s:22:\"advanced_configuration\";i:1;s:13:\"import_source\";s:0:\"\";s:11:\"import_date\";s:0:\"\";s:6:\"labels\";a:25:{s:4:\"name\";s:6:\"Styles\";s:13:\"singular_name\";s:5:\"Style\";s:9:\"menu_name\";s:5:\"Style\";s:9:\"all_items\";s:9:\"All Style\";s:9:\"edit_item\";s:10:\"Edit Style\";s:9:\"view_item\";s:10:\"View Style\";s:11:\"update_item\";s:12:\"Update Style\";s:12:\"add_new_item\";s:13:\"Add New Style\";s:13:\"new_item_name\";s:14:\"New Style Name\";s:12:\"search_items\";s:12:\"Search Style\";s:13:\"popular_items\";s:13:\"Popular Style\";s:26:\"separate_items_with_commas\";s:26:\"Separate style with commas\";s:19:\"add_or_remove_items\";s:19:\"Add or remove style\";s:21:\"choose_from_most_used\";s:31:\"Choose from the most used style\";s:9:\"most_used\";s:0:\"\";s:9:\"not_found\";s:14:\"No style found\";s:8:\"no_terms\";s:8:\"No style\";s:22:\"name_field_description\";s:0:\"\";s:22:\"slug_field_description\";s:0:\"\";s:22:\"desc_field_description\";s:0:\"\";s:21:\"items_list_navigation\";s:21:\"Style list navigation\";s:10:\"items_list\";s:10:\"Style list\";s:13:\"back_to_items\";s:15:\"← Go to style\";s:9:\"item_link\";s:10:\"Style Link\";s:21:\"item_link_description\";s:17:\"A link to a style\";}s:11:\"description\";s:0:\"\";s:12:\"capabilities\";a:4:{s:12:\"manage_terms\";s:17:\"manage_categories\";s:10:\"edit_terms\";s:17:\"manage_categories\";s:12:\"delete_terms\";s:17:\"manage_categories\";s:12:\"assign_terms\";s:10:\"edit_posts\";}s:6:\"public\";i:1;s:18:\"publicly_queryable\";i:1;s:12:\"hierarchical\";i:0;s:7:\"show_ui\";i:1;s:12:\"show_in_menu\";i:1;s:17:\"show_in_nav_menus\";i:1;s:12:\"show_in_rest\";i:1;s:9:\"rest_base\";s:0:\"\";s:14:\"rest_namespace\";s:5:\"wp/v2\";s:21:\"rest_controller_class\";s:24:\"WP_REST_Terms_Controller\";s:13:\"show_tagcloud\";i:1;s:18:\"show_in_quick_edit\";i:1;s:17:\"show_admin_column\";i:0;s:7:\"rewrite\";a:3:{s:17:\"permalink_rewrite\";s:12:\"taxonomy_key\";s:10:\"with_front\";s:1:\"1\";s:20:\"rewrite_hierarchical\";s:1:\"0\";}s:9:\"query_var\";s:13:\"post_type_key\";s:14:\"query_var_name\";s:0:\"\";s:12:\"default_term\";a:1:{s:20:\"default_term_enabled\";s:1:\"0\";}s:4:\"sort\";i:0;s:8:\"meta_box\";s:7:\"default\";s:11:\"meta_box_cb\";s:0:\"\";s:20:\"meta_box_sanitize_cb\";s:0:\"\";s:15:\"show_in_graphql\";i:1;s:19:\"graphql_single_name\";s:5:\"style\";s:19:\"graphql_plural_name\";s:5:\"style\";}','Styles','styles','trash','closed','closed','','taxonomy_67e68296e2309__trashed','','','2025-03-28 12:40:34','2025-03-28 12:40:34','',0,'http://echoes.local/?post_type=acf-taxonomy&p=28',0,'acf-taxonomy','',0), +(30,1,'2025-03-28 11:04:07','2025-03-28 11:04:07','The Inca civilization\'s most remarkable architectural achievement was their sophisticated stone masonry technique. Without the use of mortar, they created structures of such precision that even today, it\'s impossible to insert a knife blade between the stones. This technique, known as ashlar masonry, involved fitting massive stone blocks together like a complex three-dimensional puzzle, with each stone cut to perfectly match its neighbors.\n\nThe engineering principles behind Inca stone construction were remarkably advanced. The stones were cut to fit together in an interlocking pattern that made buildings extremely stable and earthquake-resistant. The slight inward tilt of walls, trapezoidal doorways, and rounded corners further enhanced structural stability, while the careful placement of stones created natural drainage systems that have preserved these structures for centuries.\n\nPerhaps most impressive is that these architectural feats were accomplished without the use of metal tools, the wheel, or any written language to record their techniques. The Inca builders relied on an intricate system of knotted cords called quipus for measurements and used stone hammers and bronze tools to achieve their remarkable precision.','Inca Stone Masonry: Engineering Marvel of the Ancient Americas','','publish','open','open','','inca-stone-masonry-engineering-marvel-of-the-ancient-americas','','','2025-03-28 11:25:04','2025-03-28 11:25:04','',0,'https://example.com/?p=1',0,'post','',0), +(31,1,'2025-03-28 11:04:07','2025-03-28 11:04:07','Mayan pyramids represent some of the most sophisticated astronomical observatories ever created in the ancient world. These structures were not just ceremonial centers but precise calendrical tools that tracked celestial movements. The famous pyramid of Kukulcán at Chichen Itza, for example, is designed so that during the spring and autumn equinoxes, the play of sunlight and shadow creates the appearance of a serpent descending the northern stairway.\n\nThe architectural design of Mayan pyramids typically followed strict mathematical and astronomical principles. Many pyramids were built with exactly 365 steps, one for each day of the year, while their orientation and alignment were precisely calculated to mark important celestial events. The structures often featured multiple layers, with each new layer corresponding to different periods in Maya chronology.','Mayan Pyramids: Sacred Architecture of Time and Space','','publish','open','open','','mayan-pyramids-sacred-architecture-of-time-and-space','','','2025-03-28 11:25:35','2025-03-28 11:25:35','',0,'https://example.com/?p=2',0,'post','',0), +(32,1,'2025-03-28 11:04:07','2025-03-28 11:04:07','The agricultural terraces of the Inca Empire represent one of the most impressive feats of ancient engineering and architectural innovation. These andenes (terraced fields) transformed steep mountain slopes into fertile farmland, creating microclimates that could sustain crops at altitudes where agriculture would otherwise be impossible. The terraces at sites like Moray served as agricultural laboratories where the Inca could study the effects of different growing conditions.\n\nThe construction of these terraces involved sophisticated engineering principles. Each terrace level was built with layers of stone, gravel, and soil that provided excellent drainage and prevented erosion. The stone retaining walls were slightly inclined inward to resist the pressure of the earth behind them, while sophisticated drainage systems helped prevent water accumulation that could destabilize the structures.\n\nBeyond their practical function, these terraces created stunning visual effects, transforming entire mountainsides into giant green staircases that followed the natural contours of the landscape. Sites like Machu Picchu demonstrate how the Inca seamlessly integrated agricultural functionality with aesthetic and ceremonial considerations.','Agricultural Terraces of the Inca Empire','','publish','open','open','','agricultural-terraces-of-the-inca-empire','','','2025-03-28 11:26:24','2025-03-28 11:26:24','',0,'https://example.com/?p=3',0,'post','',0), +(301,1,'2025-03-28 11:15:57','2025-03-28 11:15:57','

Overview

\nNotre-Dame Cathedral stands as one of the finest examples of French Gothic architecture. Construction began in 1163 and was largely completed by 1345. The cathedral\'s architectural innovations, including its pioneering use of the rib vault and flying buttress, set new standards for medieval architecture.\n

Architectural Features

\n
    \n
  • Flying buttresses
  • \n
  • Pointed arches
  • \n
  • Ribbed vaults
  • \n
  • Rose windows
  • \n
  • Twin western towers
  • \n
\n

Dimensions

\nHeight: 69 meters (towers)\nLength: 128 meters\nWidth: 48 meters\n

Historical Significance

\nThe cathedral has served as the religious heart of Paris for centuries and represents the peak of French Gothic architectural achievement. Its construction spanned multiple architectural phases, showcasing the evolution of Gothic style.','Notre-Dame Cathedral, Paris','','publish','closed','closed','','notre-dame-cathedral-paris','','','2025-03-28 11:40:52','2025-03-28 11:40:52','',0,'https://example.com/building/?p=301',0,'building','',0), +(302,1,'2025-03-28 11:15:57','2025-03-28 11:15:57','

Overview

\nDurham Cathedral represents the most complete survival of a Norman monastic cathedral church in England. Built between 1093 and 1133, it showcases innovative architectural solutions including the first known example of pointed ribbed vaults.\n

Architectural Features

\n
    \n
  • Ribbed vaulting
  • \n
  • Massive cylindrical piers
  • \n
  • Geometric stone patterns
  • \n
  • Galilee Chapel
  • \n
  • Central tower
  • \n
\n

Dimensions

\nHeight: 66 meters (central tower)\nLength: 143 meters\nWidth: 30 meters (nave)\n

Historical Significance

\nThe cathedral represents the height of Norman architectural achievement and serves as a prototype for later Gothic developments in architecture.','Durham Cathedral','','publish','closed','closed','','durham-cathedral','','','2025-03-28 11:41:00','2025-03-28 11:41:00','',0,'https://example.com/building/?p=302',0,'building','',0), +(303,1,'2025-03-28 11:15:57','2025-03-28 11:15:57','

Overview

\nThe Château de Loches is one of the best-preserved medieval castles in France. Built in the 9th century and expanded through the 14th century, it exemplifies medieval military architecture with its massive keep and fortified walls.\n

Architectural Features

\n
    \n
  • Square stone keep
  • \n
  • Defensive walls
  • \n
  • Arrow slits
  • \n
  • Machicolations
  • \n
  • Drawbridge
  • \n
\n

Dimensions

\nKeep height: 36 meters\nWall thickness: up to 3 meters\nSite area: 1.5 hectares\n

Historical Significance

\nThe castle served as both a military stronghold and royal residence, demonstrating the evolution of medieval defensive architecture.','Château de Loches','','publish','closed','closed','','chateau-de-loches','','','2025-03-28 11:41:08','2025-03-28 11:41:08','',0,'https://example.com/building/?p=303',0,'building','',0), +(304,1,'2025-03-28 11:15:57','2025-03-28 11:15:57','

Overview

\nSalisbury Cathedral, built between 1220 and 1258, represents the epitome of Early English Gothic architecture. Its spire, added in the 14th century, is the tallest medieval church spire in Britain.\n

Architectural Features

\n
    \n
  • Pointed spire
  • \n
  • Lancet windows
  • \n
  • Vaulted ceiling
  • \n
  • Flying buttresses
  • \n
  • Cloisters
  • \n
\n

Dimensions

\nSpire height: 123 meters\nLength: 134 meters\nWidth: 52 meters\n

Historical Significance

\nThe cathedral showcases the transition from Early English to Decorated Gothic styles and houses one of the four surviving copies of the Magna Carta.','Salisbury Cathedral','','publish','closed','closed','','salisbury-cathedral','','','2025-03-28 11:41:15','2025-03-28 11:41:15','',0,'https://example.com/building/?p=304',0,'building','',0), +(305,1,'2025-03-28 11:15:57','2025-03-28 11:15:57','

Overview

\nSainte-Chapelle, completed in 1248, represents the highest achievement of Rayonnant Gothic architecture. The chapel was built to house Christ\'s Crown of Thorns and other precious relics.\n

Architectural Features

\n
    \n
  • Stained glass walls
  • \n
  • Two-story chapel design
  • \n
  • Slender columns
  • \n
  • Intricate tracery
  • \n
  • Pointed spire
  • \n
\n

Dimensions

\nHeight: 42.5 meters\nLength: 36 meters\nWidth: 17 meters\n

Historical Significance

\nThe chapel is considered one of the highest achievements of the Rayonnant period of Gothic architecture, featuring the most extensive 13th-century stained glass collection anywhere in the world.','Saint-Chapelle','','publish','closed','closed','','saint-chapelle','','','2025-03-28 11:41:22','2025-03-28 11:41:22','',0,'https://example.com/building/?p=305',0,'building','',0), +(307,1,'2025-03-28 11:18:27','2025-03-28 11:18:27','

Overview

\nThe Great Mosque of Damascus, also known as the Umayyad Mosque, was completed in 715 CE and stands as one of the oldest and largest mosques in the world. The building represents a remarkable fusion of Byzantine and Islamic architectural traditions.\n

Architectural Features

\n
    \n
  • Three minarets
  • \n
  • Large courtyard
  • \n
  • Byzantine-style mosaics
  • \n
  • Prayer hall with central nave
  • \n
  • Marble floors and columns
  • \n
\n

Dimensions

\nTotal area: 4 hectares\nCourtyard: 122 x 50 meters\nPrayer hall: 136 x 37 meters\n

Historical Significance

\nThe mosque represents the architectural achievement of the Umayyad dynasty and set the standard for mosque architecture throughout the Islamic world.','Great Mosque of Damascus','','publish','closed','closed','','great-mosque-of-damascus','','','2025-03-28 11:39:22','2025-03-28 11:39:22','',0,'https://example.com/building/?p=306',0,'building','',0), +(308,1,'2025-03-28 11:18:27','2025-03-28 11:18:27','

Overview

\nFounded in 970 CE, Al-Azhar Mosque represents the finest Fatimid architecture in Egypt. It was established as both a mosque and a center of learning, becoming one of the world\'s oldest operating universities.\n

Architectural Features

\n
    \n
  • Five minarets from different periods
  • \n
  • Multiple prayer halls
  • \n
  • Pointed arches
  • \n
  • Decorated mihrab
  • \n
  • Central courtyard
  • \n
\n

Dimensions

\nTotal area: 3 hectares\nMain prayer hall: 80 x 50 meters\nTallest minaret: 84 meters\n

Historical Significance

\nThe mosque showcases the evolution of Islamic architecture through various historical periods and remains a crucial center of Islamic learning.','Al-Azhar Mosque','','publish','closed','closed','','al-azhar-mosque','','','2025-03-28 11:39:37','2025-03-28 11:39:37','',0,'https://example.com/building/?p=307',0,'building','',0), +(309,1,'2025-03-28 11:18:27','2025-03-28 11:18:27','

Overview

\nThe Citadel of Aleppo is one of the oldest and largest castles in the world. While the site has been occupied since the 3rd millennium BCE, the current structure dates mainly from the 12th and 13th centuries.\n

Architectural Features

\n
    \n
  • Massive stone walls
  • \n
  • Entrance bridge complex
  • \n
  • Great Mosque within the citadel
  • \n
  • Underground passages
  • \n
  • Defensive towers
  • \n
\n

Dimensions

\nHeight: 50 meters above city level\nTotal area: 4.5 hectares\nWall thickness: up to 3 meters\n

Historical Significance

\nThe citadel represents the pinnacle of medieval Islamic military architecture and demonstrates the evolution of fortress design during the Crusader period.','Citadel of Aleppo','','publish','closed','closed','','citadel-of-aleppo','','','2025-03-28 11:40:19','2025-03-28 11:40:19','',0,'https://example.com/building/?p=308',0,'building','',0), +(310,1,'2025-03-28 11:18:27','2025-03-28 11:18:27','

Overview

\nBuilt in 1233 CE in Baghdad, the Al-Mustansiriya Madrasah is one of the oldest examples of Islamic architectural educational institutions. It represents the sophistication of Abbasid architecture and academic tradition.\n

Architectural Features

\n
    \n
  • Four-iwan design
  • \n
  • Central courtyard
  • \n
  • Student cells
  • \n
  • Decorative brickwork
  • \n
  • Water clock system
  • \n
\n

Dimensions

\nBuilding length: 106 meters\nWidth: 48 meters\nCourtyard: 40 x 30 meters\n

Historical Significance

\nThe madrasah serves as a prime example of medieval Islamic educational architecture and the integration of academic and religious spaces.','Al-Mustansiriya Madrasah','','publish','closed','closed','','al-mustansiriya-madrasah','','','2025-03-28 11:40:30','2025-03-28 11:40:30','',0,'https://example.com/building/?p=309',0,'building','',0), +(311,1,'2025-03-28 11:18:27','2025-03-28 11:18:27','

Overview

\nKrak des Chevaliers, built in the 12th century, is one of the best-preserved Crusader castles in the world. It represents the height of medieval military architecture, combining European and Middle Eastern defensive features.\n

Architectural Features

\n
    \n
  • Concentric castle design
  • \n
  • Multiple baileys
  • \n
  • Gothic elements in chapel
  • \n
  • Massive towers
  • \n
  • Elaborate defensive systems
  • \n
\n

Dimensions

\nCastle area: 3 hectares\nOuter wall length: 270 meters\nWall height: up to 30 meters\n

Historical Significance

\nThe castle exemplifies the synthesis of Western and Eastern military architecture during the Crusader period and stands as one of the most important preserved medieval castles.','Krak des Chevaliers','','publish','closed','closed','','krak-des-chevaliers','','','2025-03-28 11:40:38','2025-03-28 11:40:38','',0,'https://example.com/building/?p=310',0,'building','',0), +(313,1,'2025-03-28 11:20:35','2025-03-28 11:20:35','

Overview

\nTodaiji Temple, constructed in 752 CE, is one of Japan\'s most historically significant temples. The Great Buddha Hall (Daibutsuden) remains the world\'s largest wooden building, despite being rebuilt in 1709 at two-thirds its original size.\n

Architectural Features

\n
    \n
  • Massive wooden structure
  • \n
  • Traditional bracketing system
  • \n
  • Central Buddha statue
  • \n
  • Curved roof lines
  • \n
  • Symmetrical design
  • \n
\n

Dimensions

\nHeight: 48.7 meters\nWidth: 57 meters\nDepth: 50.5 meters\n

Historical Significance

\nThe temple represents the pinnacle of ancient Japanese wooden architecture and served as the head temple of all provincial Buddhist temples.','Todaiji Temple','','publish','closed','closed','','todaiji-temple','','','2025-03-28 11:37:00','2025-03-28 11:37:00','',0,'https://example.com/building/?p=311',0,'building','',0), +(314,1,'2025-03-28 11:20:35','2025-03-28 11:20:35','

Overview

\nThe Forbidden City, constructed between 1406 and 1420, represents the pinnacle of Chinese imperial architecture. The complex demonstrates perfect symmetry and hierarchy in traditional Chinese architecture.\n

Architectural Features

\n
    \n
  • Yellow glazed roof tiles
  • \n
  • Dougong bracket system
  • \n
  • Red walls
  • \n
  • Marble terraces
  • \n
  • Ceremonial gates
  • \n
\n

Dimensions

\nTotal area: 72 hectares\nBuildings: 980\nRooms: 8,707\n

Historical Significance

\nThe palace complex exemplifies traditional Chinese architecture\'s principles of symmetry, hierarchy, and cosmic symbolism.','Forbidden City Imperial Palace','','publish','closed','closed','','forbidden-city-imperial-palace','','','2025-03-28 11:37:51','2025-03-28 11:37:51','',0,'https://example.com/building/?p=312',0,'building','',0), +(315,1,'2025-03-28 11:20:35','2025-03-28 11:20:35','

Overview

\nBuilt in 751 CE during the Silla Dynasty, Bulguksa Temple represents the golden age of Buddhist art in Korea. The temple complex showcases the unique characteristics of Korean Buddhist architecture.\n

Architectural Features

\n
    \n
  • Stone terraces
  • \n
  • Twin stone pagodas
  • \n
  • Wooden halls
  • \n
  • Stone bridges
  • \n
  • Decorative brackets
  • \n
\n

Dimensions

\nTemple grounds: 8 hectares\nMain hall width: 23 meters\nPagoda height: 10.4 meters\n

Historical Significance

\nThe temple exemplifies the adaptation of Buddhist architecture to Korean aesthetic and architectural traditions.','Bulguksa Temple','','publish','closed','closed','','bulguksa-temple','','','2025-03-28 11:37:58','2025-03-28 11:37:58','',0,'https://example.com/building/?p=313',0,'building','',0), +(316,1,'2025-03-28 11:20:35','2025-03-28 11:20:35','

Overview

\nBuilt in 652 during the Tang Dynasty, the Giant Wild Goose Pagoda in Xi\'an is a masterpiece of Chinese Buddhist architecture. Originally five stories tall, it was later expanded to seven stories.\n

Architectural Features

\n
    \n
  • Brick construction
  • \n
  • Multi-tiered eaves
  • \n
  • Internal staircase
  • \n
  • Carved Buddha images
  • \n
  • Square base design
  • \n
\n

Dimensions

\nHeight: 64 meters\nBase width: 25 meters\nStories: 7\n

Historical Significance

\nThe pagoda served as a repository for Buddhist scriptures and marked the eastern spread of Buddhism along the Silk Road.','Giant Wild Goose Pagoda','','publish','closed','closed','','giant-wild-goose-pagoda','','','2025-03-28 11:38:08','2025-03-28 11:38:08','',0,'https://example.com/building/?p=314',0,'building','',0), +(317,1,'2025-03-28 11:20:35','2025-03-28 11:20:35','

Overview

\nBuilt in 1053, the Phoenix Hall of Byodo-in Temple is one of the few remaining examples of Heian period architecture in Japan. Its unique wing-like design represents the tail feathers of a phoenix.\n

Architectural Features

\n
    \n
  • Central hall with flanking wings
  • \n
  • Curved roof lines
  • \n
  • Reflected pond design
  • \n
  • Gilded phoenix ornaments
  • \n
  • Interior Buddha statue
  • \n
\n

Dimensions

\nBuilding width: 24 meters\nCorridor length: 33 meters\nCentral hall height: 11 meters\n

Historical Significance

\nThe building represents the peak of Fujiwara period architecture and the adaptation of Buddhist temple design to Japanese aesthetic principles.','Byodo-in Phoenix Hall','','publish','closed','closed','','byodo-in-phoenix-hall','','','2025-03-28 11:38:25','2025-03-28 11:38:25','',0,'https://example.com/building/?p=315',0,'building','',0), +(320,1,'2025-03-28 11:23:35','2025-03-28 11:23:35','','tim-mossholder-dqxr8A7Twwc-unsplash','Photo by Tim Mossholder on Unsplash','inherit','open','closed','','tim-mossholder-dqxr8a7twwc-unsplash','','','2025-03-28 11:24:02','2025-03-28 11:24:02','',0,'http://echoes.local/wp-content/uploads/2025/03/tim-mossholder-dqxr8A7Twwc-unsplash.jpg',0,'attachment','image/jpeg',0), +(322,1,'2025-03-28 11:24:51','2025-03-28 11:24:51','','sebastian-tapia-huerta-5qba-p9ahTE-unsplash','Photo by Sebastian Tapia Huerta on Unsplash','inherit','open','closed','','sebastian-tapia-huerta-5qba-p9ahte-unsplash','','','2025-03-28 11:25:02','2025-03-28 11:25:02','',30,'http://echoes.local/wp-content/uploads/2025/03/sebastian-tapia-huerta-5qba-p9ahTE-unsplash.jpg',0,'attachment','image/jpeg',0), +(323,1,'2025-03-28 11:25:04','2025-03-28 11:25:04','The Inca civilization\'s most remarkable architectural achievement was their sophisticated stone masonry technique. Without the use of mortar, they created structures of such precision that even today, it\'s impossible to insert a knife blade between the stones. This technique, known as ashlar masonry, involved fitting massive stone blocks together like a complex three-dimensional puzzle, with each stone cut to perfectly match its neighbors.\n\nThe engineering principles behind Inca stone construction were remarkably advanced. The stones were cut to fit together in an interlocking pattern that made buildings extremely stable and earthquake-resistant. The slight inward tilt of walls, trapezoidal doorways, and rounded corners further enhanced structural stability, while the careful placement of stones created natural drainage systems that have preserved these structures for centuries.\n\nPerhaps most impressive is that these architectural feats were accomplished without the use of metal tools, the wheel, or any written language to record their techniques. The Inca builders relied on an intricate system of knotted cords called quipus for measurements and used stone hammers and bronze tools to achieve their remarkable precision.','Inca Stone Masonry: Engineering Marvel of the Ancient Americas','','inherit','closed','closed','','30-revision-v1','','','2025-03-28 11:25:04','2025-03-28 11:25:04','',30,'http://echoes.local/?p=323',0,'revision','',0), +(324,1,'2025-03-28 11:25:35','2025-03-28 11:25:35','Mayan pyramids represent some of the most sophisticated astronomical observatories ever created in the ancient world. These structures were not just ceremonial centers but precise calendrical tools that tracked celestial movements. The famous pyramid of Kukulcán at Chichen Itza, for example, is designed so that during the spring and autumn equinoxes, the play of sunlight and shadow creates the appearance of a serpent descending the northern stairway.\n\nThe architectural design of Mayan pyramids typically followed strict mathematical and astronomical principles. Many pyramids were built with exactly 365 steps, one for each day of the year, while their orientation and alignment were precisely calculated to mark important celestial events. The structures often featured multiple layers, with each new layer corresponding to different periods in Maya chronology.','Mayan Pyramids: Sacred Architecture of Time and Space','','inherit','closed','closed','','31-revision-v1','','','2025-03-28 11:25:35','2025-03-28 11:25:35','',31,'http://echoes.local/?p=324',0,'revision','',0), +(326,1,'2025-03-28 11:26:24','2025-03-28 11:26:24','The agricultural terraces of the Inca Empire represent one of the most impressive feats of ancient engineering and architectural innovation. These andenes (terraced fields) transformed steep mountain slopes into fertile farmland, creating microclimates that could sustain crops at altitudes where agriculture would otherwise be impossible. The terraces at sites like Moray served as agricultural laboratories where the Inca could study the effects of different growing conditions.\n\nThe construction of these terraces involved sophisticated engineering principles. Each terrace level was built with layers of stone, gravel, and soil that provided excellent drainage and prevented erosion. The stone retaining walls were slightly inclined inward to resist the pressure of the earth behind them, while sophisticated drainage systems helped prevent water accumulation that could destabilize the structures.\n\nBeyond their practical function, these terraces created stunning visual effects, transforming entire mountainsides into giant green staircases that followed the natural contours of the landscape. Sites like Machu Picchu demonstrate how the Inca seamlessly integrated agricultural functionality with aesthetic and ceremonial considerations.','Agricultural Terraces of the Inca Empire','','inherit','closed','closed','','32-revision-v1','','','2025-03-28 11:26:24','2025-03-28 11:26:24','',32,'http://echoes.local/?p=326',0,'revision','',0), +(327,1,'2025-03-28 11:27:29','2025-03-28 11:27:29','','alim-twul1x77QEo-unsplash','Photo by Alim on Unsplash','inherit','open','closed','','alim-twul1x77qeo-unsplash','','','2025-03-28 11:27:33','2025-03-28 11:27:33','',19,'http://echoes.local/wp-content/uploads/2025/03/alim-twul1x77QEo-unsplash.jpg',0,'attachment','image/jpeg',0), +(328,1,'2025-03-28 11:27:34','2025-03-28 11:27:34','Islamic geometric patterns represent one of the most distinctive features of Middle Eastern architecture, combining mathematical precision with artistic beauty. These intricate designs, which adorn everything from mosque walls to palace ceilings, reflect the Islamic appreciation of unity and order in art. The patterns are based on repeated geometric shapes, creating infinite patterns that symbolize the infinite nature of Allah.\n\nThe complexity of these patterns stems from the mathematical principles of symmetry and proportion. Architects and artisans used simple tools - compass and ruler - to create designs of astounding complexity. The patterns typically begin with a basic geometric shape, such as a circle, which is then repeated, interlaced, and expanded to create elaborate star patterns and complex polygonal compositions.\n\nThese geometric patterns serve both decorative and spiritual purposes. In the absence of figurative art in religious spaces, these patterns became a primary means of architectural decoration, creating spaces of contemplation and beauty that reflect the mathematical order of the universe.','The Art of Islamic Geometric Patterns','','inherit','closed','closed','','19-autosave-v1','','','2025-03-28 11:27:34','2025-03-28 11:27:34','',19,'http://echoes.local/?p=328',0,'revision','',0), +(329,1,'2025-03-28 11:27:35','2025-03-28 11:27:35','Islamic geometric patterns represent one of the most distinctive features of Middle Eastern architecture, combining mathematical precision with artistic beauty. These intricate designs, which adorn everything from mosque walls to palace ceilings, reflect the Islamic appreciation of unity and order in art. The patterns are based on repeated geometric shapes, creating infinite patterns that symbolize the infinite nature of Allah.\n\nThe complexity of these patterns stems from the mathematical principles of symmetry and proportion. Architects and artisans used simple tools - compass and ruler - to create designs of astounding complexity. The patterns typically begin with a basic geometric shape, such as a circle, which is then repeated, interlaced, and expanded to create elaborate star patterns and complex polygonal compositions.\n\nThese geometric patterns serve both decorative and spiritual purposes. In the absence of figurative art in religious spaces, these patterns became a primary means of architectural decoration, creating spaces of contemplation and beauty that reflect the mathematical order of the universe.','The Art of Islamic Geometric Patterns','','inherit','closed','closed','','19-revision-v1','','','2025-03-28 11:27:35','2025-03-28 11:27:35','',19,'http://echoes.local/?p=329',0,'revision','',0), +(330,1,'2025-03-28 11:28:12','2025-03-28 11:28:12','','junhan-foong-ERLAcTp-8MQ-unsplash','Photo by Junhan Foong on Unsplash','inherit','open','closed','','junhan-foong-erlactp-8mq-unsplash','','','2025-03-28 11:28:15','2025-03-28 11:28:15','',0,'http://echoes.local/wp-content/uploads/2025/03/junhan-foong-ERLAcTp-8MQ-unsplash.jpg',0,'attachment','image/jpeg',0), +(332,1,'2025-03-28 11:28:39','2025-03-28 11:28:39','Persian gardens and palaces represent a unique architectural tradition that has influenced design throughout the Middle East and beyond. The concept of the chahar bagh (four-garden) layout, with its quadrilateral design divided by waterways and walkways, creates an earthly paradise that reflects the Islamic description of heaven. These gardens are not merely decorative but represent a sophisticated understanding of hydraulics, climatology, and spatial design.\n\nThe palaces integrated within these gardens showcase the refinement of Persian architecture, with their intricate tile work, mirror mosaics, and carved stucco decorations. The interplay between indoor and outdoor spaces creates a seamless flow between architecture and nature, while clever design features like wind towers (badgirs) provide natural cooling in the harsh desert climate.\n\nFamous examples like the Golestan Palace complex in Tehran demonstrate how these architectural principles evolved over time, incorporating new influences while maintaining traditional Persian design elements. The integration of water features, shade, and carefully planned sight lines creates spaces of extraordinary beauty and comfort.','Persian Gardens and Palace Architecture','','inherit','closed','closed','','21-autosave-v1','','','2025-03-28 11:28:39','2025-03-28 11:28:39','',21,'http://echoes.local/?p=332',0,'revision','',0), +(333,1,'2025-03-28 11:28:58','2025-03-28 11:28:58','','let-s-see-persia-c8dFTAYI0-8-unsplash','Photo by let\'s see persia on Unsplash','inherit','open','closed','','let-s-see-persia-c8dftayi0-8-unsplash','','','2025-03-28 11:29:03','2025-03-28 11:29:03','',21,'http://echoes.local/wp-content/uploads/2025/03/let-s-see-persia-c8dFTAYI0-8-unsplash.jpg',0,'attachment','image/jpeg',0), +(334,1,'2025-03-28 11:29:05','2025-03-28 11:29:05','Persian gardens and palaces represent a unique architectural tradition that has influenced design throughout the Middle East and beyond. The concept of the chahar bagh (four-garden) layout, with its quadrilateral design divided by waterways and walkways, creates an earthly paradise that reflects the Islamic description of heaven. These gardens are not merely decorative but represent a sophisticated understanding of hydraulics, climatology, and spatial design.\n\nThe palaces integrated within these gardens showcase the refinement of Persian architecture, with their intricate tile work, mirror mosaics, and carved stucco decorations. The interplay between indoor and outdoor spaces creates a seamless flow between architecture and nature, while clever design features like wind towers (badgirs) provide natural cooling in the harsh desert climate.\n\nFamous examples like the Golestan Palace complex in Tehran demonstrate how these architectural principles evolved over time, incorporating new influences while maintaining traditional Persian design elements. The integration of water features, shade, and carefully planned sight lines creates spaces of extraordinary beauty and comfort.','Persian Gardens and Palace Architecture','','inherit','closed','closed','','21-revision-v1','','','2025-03-28 11:29:05','2025-03-28 11:29:05','',21,'http://echoes.local/?p=334',0,'revision','',0), +(335,1,'2025-03-28 11:29:24','2025-03-28 11:29:24','Arabic calligraphy stands as one of the most distinctive features of Middle Eastern architecture, transforming buildings into three-dimensional manuscripts. This architectural calligraphy goes beyond mere decoration, incorporating Quranic verses, poetry, and historical inscriptions that give buildings both spiritual and cultural significance. The integration of script into architectural design reached its peak during the Islamic Golden Age, creating a unique fusion of text and architecture.\n\nThe evolution of architectural calligraphy reflects the development of various Arabic scripts, from the angular Kufic to the flowing Thuluth style. Artisans developed innovative techniques to incorporate these scripts into different materials - carved in stone, molded in stucco, or crafted in tilework. The placement of calligraphy often follows careful architectural planning, with specific texts chosen for particular locations within buildings.','The Evolution of Arabic Calligraphy in Architecture','','inherit','closed','closed','','22-revision-v1','','','2025-03-28 11:29:24','2025-03-28 11:29:24','',22,'http://echoes.local/?p=335',0,'revision','',0), +(336,1,'2025-03-28 11:29:36','2025-03-28 11:29:36','Arabesque patterns represent one of the most sophisticated developments in architectural decoration, combining floral motifs with geometric patterns to create intricate, endless designs. These flowing, interlaced patterns are characterized by a continuous stem system that produces a variety of abstract flowers, leaves, and tendrils, creating a rhythmic pattern that appears to extend infinitely in all directions.\n\nThe development of arabesque patterns reflects the Islamic artistic tradition\'s emphasis on non-representational art. These patterns serve multiple purposes: they create visual interest, demonstrate mathematical and artistic sophistication, and reflect theological concepts about the infinite nature of divine creation. The complexity of arabesque designs often increases around focal points such as mihrab niches or entrance portals.\n\nModern Middle Eastern architecture continues to incorporate arabesque patterns, often reinterpreting traditional designs through contemporary materials and techniques. This enduring influence demonstrates how historical decorative elements can be adapted for contemporary architectural expression while maintaining their cultural significance.','The Art of Arabesque in Middle Eastern Architecture','','inherit','closed','closed','','23-revision-v1','','','2025-03-28 11:29:36','2025-03-28 11:29:36','',23,'http://echoes.local/?p=336',0,'revision','',0), +(337,1,'2025-03-28 11:30:36','2025-03-28 11:30:36','','clay-banks-8pFh9JUcQOY-unsplash','Photo by Clay Banks on Unsplash','inherit','open','closed','','clay-banks-8pfh9jucqoy-unsplash','','','2025-03-28 11:30:39','2025-03-28 11:30:39','',13,'http://echoes.local/wp-content/uploads/2025/03/clay-banks-8pFh9JUcQOY-unsplash.jpg',0,'attachment','image/jpeg',0), +(338,1,'2025-03-28 11:30:41','2025-03-28 11:30:41','Chinese pagodas represent some of the most iconic structures in Oriental architecture, serving as both religious monuments and symbols of cultural identity. These multi-tiered towers, evolving from Indian stupas, have become distinctive features of the Chinese landscape. Each level of a pagoda typically features characteristic upturned eaves, creating a visual rhythm that draws the eye skyward.\n\nThe engineering behind these structures is remarkably sophisticated, incorporating innovative techniques for earthquake resistance and weight distribution. The use of a central pillar, known as the \"heart pillar,\" combined with sophisticated bracketing systems, allows these towers to maintain their stability despite their impressive heights. Many ancient pagodas have survived centuries of natural disasters, testament to their ingenious construction methods.\n\nBeyond their structural brilliance, pagodas also serve as repositories of Buddhist relics and sacred texts, making them important centers of spiritual life. Their placement often follows precise feng shui principles, ensuring harmony with the surrounding landscape and optimal energy flow.','The Ancient Art of Chinese Pagodas','','inherit','closed','closed','','13-revision-v1','','','2025-03-28 11:30:41','2025-03-28 11:30:41','',13,'http://echoes.local/?p=338',0,'revision','',0), +(339,1,'2025-03-28 11:31:13','2025-03-28 11:31:13','','pepe-nero-JsSM2T9iPRU-unsplash','Photo by pepe nero on Unsplash','inherit','open','closed','','pepe-nero-jssm2t9ipru-unsplash','','','2025-03-28 11:31:18','2025-03-28 11:31:18','',14,'http://echoes.local/wp-content/uploads/2025/03/pepe-nero-JsSM2T9iPRU-unsplash.jpg',0,'attachment','image/jpeg',0), +(340,1,'2025-03-28 11:31:20','2025-03-28 11:31:20','Japanese Zen gardens, or karesansui, represent the epitome of minimalist architectural design in Oriental culture. These dry landscape gardens use carefully arranged rocks, gravel, and occasional plant elements to create spaces for meditation and contemplation. The architectural principles behind these gardens emphasize void spaces as much as physical elements, creating a perfect balance between presence and absence.\n\nThe design of Zen gardens follows strict principles that have been refined over centuries. The placement of each element is carefully considered, with rocks and sand patterns often representing natural landscapes in abstract forms. The surrounding architecture, including verandas and viewing pavilions, is integral to the garden experience, creating carefully framed views and meditation spaces.','Japanese Zen Gardens: Architecture of Tranquility','','inherit','closed','closed','','14-revision-v1','','','2025-03-28 11:31:20','2025-03-28 11:31:20','',14,'http://echoes.local/?p=340',0,'revision','',0), +(341,1,'2025-03-28 11:31:33','2025-03-28 11:31:33','The Forbidden City stands as the ultimate expression of Chinese imperial architecture, embodying centuries of architectural wisdom and symbolic design. This vast palace complex demonstrates the sophisticated planning principles of traditional Chinese architecture, with its strict axiality, hierarchical spaces, and profound symbolic meanings embedded in every architectural detail.\n\nThe architectural features of the Forbidden City are rich with symbolism: the yellow roof tiles, exclusive to imperial buildings, the number of studs on doors indicating the rank of the building\'s occupant, and the intricate bracketing systems known as dougong that support the massive roofs without nails. The entire complex was designed according to cosmic principles, reflecting the emperor\'s role as the Son of Heaven.\n\nThe palace\'s defensive architecture is equally impressive, featuring high walls, moats, and strategic gates that created multiple layers of security. Yet within these defensive walls lie some of the most refined examples of Chinese architectural aesthetics, from delicate gardens to grand ceremonial halls.','The Forbidden City: Marvel of Imperial Chinese Architecture','','inherit','closed','closed','','15-revision-v1','','','2025-03-28 11:31:33','2025-03-28 11:31:33','',15,'http://echoes.local/?p=341',0,'revision','',0), +(342,1,'2025-03-28 11:32:07','2025-03-28 11:32:07','','priscilla-fraire-_1LvAexVWa8-unsplash','Photo by Priscilla Fraire on Unsplash','inherit','open','closed','','priscilla-fraire-_1lvaexvwa8-unsplash','','','2025-03-28 11:32:11','2025-03-28 11:32:11','',7,'http://echoes.local/wp-content/uploads/2025/03/priscilla-fraire-_1LvAexVWa8-unsplash.jpg',0,'attachment','image/jpeg',0), +(343,1,'2025-03-28 11:32:12','2025-03-28 11:32:12','The Gothic cathedrals of France stand as testament to medieval architectural brilliance and religious devotion. These magnificent structures, built between the 12th and 16th centuries, revolutionized architectural design with their innovative features and soaring heights. The implementation of pointed arches, ribbed vaults, and flying buttresses allowed these buildings to reach unprecedented heights while featuring walls of stained glass that seemed to defy gravity.\n\nNotre-Dame de Paris, despite recent challenges, remains one of the finest examples of French Gothic architecture. Its harmonious proportions, twin towers, and spectacular rose windows have inspired architects and artists for centuries. The cathedral\'s flying buttresses, among the first of their kind, demonstrate the innovative engineering solutions that made Gothic architecture possible.','The Magnificent Gothic Cathedrals of France','','inherit','closed','closed','','7-revision-v1','','','2025-03-28 11:32:12','2025-03-28 11:32:12','',7,'http://echoes.local/?p=343',0,'revision','',0), +(344,1,'2025-03-28 11:33:02','2025-03-28 11:33:02','','alin-gavriliuc-sAkUB5aCRcs-unsplash','Photo by Alin Gavriliuc on Unsplash','inherit','open','closed','','alin-gavriliuc-sakub5acrcs-unsplash','','','2025-03-28 11:33:05','2025-03-28 11:33:05','',16,'http://echoes.local/wp-content/uploads/2025/03/alin-gavriliuc-sAkUB5aCRcs-unsplash.jpg',0,'attachment','image/jpeg',0), +(345,1,'2025-03-28 11:33:07','2025-03-28 11:33:07','Japanese wooden architecture represents a unique tradition that has evolved over millennia, characterized by sophisticated joinery techniques that eliminate the need for nails or screws. This architectural tradition emphasizes the natural beauty of wood and creates structures that can be dismantled and rebuilt, contributing to their longevity and sustainability.\n\nThe most remarkable aspect of Japanese wooden architecture is its ability to create large, open spaces using post-and-beam construction combined with complex bracketing systems. Temples like Hōryū-ji, the world\'s oldest surviving wooden structure, demonstrate how these techniques have created buildings that have endured for over 1,300 years.\n\nThe aesthetic principles of Japanese wooden architecture emphasize the importance of the grain and natural patterns in the wood, often leaving it unfinished or minimally treated to maintain its natural beauty. This approach reflects the broader Japanese aesthetic principle of finding beauty in simplicity and natural materials.','Traditional Japanese Wood Architecture','','inherit','closed','closed','','16-revision-v1','','','2025-03-28 11:33:07','2025-03-28 11:33:07','',16,'http://echoes.local/?p=345',0,'revision','',0), +(346,1,'2025-03-28 11:33:37','2025-03-28 11:33:37','','steve-douglas-JjEbmnY1e0w-unsplash','Photo by Steve Douglas on Unsplash','inherit','open','closed','','steve-douglas-jjebmny1e0w-unsplash','','','2025-03-28 11:33:41','2025-03-28 11:33:41','',8,'http://echoes.local/wp-content/uploads/2025/03/steve-douglas-JjEbmnY1e0w-unsplash.jpg',0,'attachment','image/jpeg',0), +(347,1,'2025-03-28 11:33:42','2025-03-28 11:33:42','Medieval castles were masterpieces of defensive architecture, designed to protect their inhabitants from siege and assault. The evolution of castle design reflects the ongoing battle between defensive innovations and offensive warfare techniques. From simple wooden structures on hills, castles evolved into sophisticated stone fortresses with multiple layers of defense.\n\nThe key elements of castle defense included high stone walls, moats, drawbridges, and strategic placement on elevated ground. Concentric castles, with their multiple rings of walls, represented the pinnacle of medieval defensive architecture. These formidable structures often featured arrow slits, murder holes, and machicolations, all designed to give defenders the advantage over attacking forces.\n\nThe great keeps of these castles served not only as last-resort defensive positions but also as symbols of power and authority. Their thick walls and limited access points made them nearly impregnable when properly defended, while their impressive height served as a constant reminder of the lord\'s authority over the surrounding lands.','Medieval Castle Defense Systems','','inherit','closed','closed','','8-revision-v1','','','2025-03-28 11:33:42','2025-03-28 11:33:42','',8,'http://echoes.local/?p=347',0,'revision','',0), +(348,1,'2025-03-28 11:33:55','2025-03-28 11:33:55','Feng Shui principles have profoundly influenced Oriental architecture for thousands of years, shaping everything from city planning to interior design. This ancient practice of harmonizing people with their surrounding environment has created architectural guidelines that promote balance, prosperity, and well-being. The careful consideration of natural elements, cardinal directions, and energy flow has resulted in distinctive architectural features throughout East Asia.\n\nIn traditional Oriental architecture, Feng Shui principles determine crucial aspects such as building orientation, door placement, and room layout. The concept of qi (life force) flowing through buildings has led to specific architectural features like curved pathways in gardens, strategic placement of water features, and the deliberate positioning of structural elements to promote positive energy flow.\n\nModern architects continue to incorporate these ancient principles into contemporary designs, recognizing their value in creating harmonious living and working spaces. The enduring influence of Feng Shui demonstrates how traditional wisdom can inform modern architectural practices.','Feng Shui in Oriental Architecture','','inherit','closed','closed','','17-revision-v1','','','2025-03-28 11:33:55','2025-03-28 11:33:55','',17,'http://echoes.local/?p=348',0,'revision','',0), +(349,1,'2025-03-28 11:34:26','2025-03-28 11:34:26','','mario-la-pergola-dSrEUAtF3kU-unsplash','Photo by Mario La Pergola on Unsplash','inherit','open','closed','','mario-la-pergola-dsreuatf3ku-unsplash','','','2025-03-28 11:34:29','2025-03-28 11:34:29','',9,'http://echoes.local/wp-content/uploads/2025/03/mario-la-pergola-dSrEUAtF3kU-unsplash.jpg',0,'attachment','image/jpeg',0), +(350,1,'2025-03-28 11:34:30','2025-03-28 11:34:30','\n \"Romanesque\n \n

Romanesque architecture, predominant in medieval Europe from the 6th to the 11th century, marked a significant evolution in building design. Characterized by its massive walls, round arches, and barrel vaults, this architectural style laid the foundation for the later Gothic period. The term \"Romanesque\" reflects the architecture\'s similarity to Roman designs, particularly in the use of round arches and vaulted ceilings.

\n\n

One of the most distinctive features of Romanesque architecture is the rounded arch, used for both structural and decorative purposes. These arches appeared in doorways, windows, and arcade sections, creating the characteristic appearance we associate with medieval churches and monasteries. The thick walls and small windows of Romanesque buildings were necessary to support the heavy stone vaults above.

\n ','Romanesque Architecture: The Round Arch Revolution','','inherit','closed','closed','','9-revision-v1','','','2025-03-28 11:34:30','2025-03-28 11:34:30','',9,'http://echoes.local/?p=350',0,'revision','',0), +(352,1,'2025-03-28 11:35:28','2025-03-28 11:35:28','','jf-martin-kZjBucSSj2s-unsplash','Photo by JF Martin on Unsplash','inherit','open','closed','','jf-martin-kzjbucssj2s-unsplash','','','2025-03-28 11:35:32','2025-03-28 11:35:32','',5,'http://echoes.local/wp-content/uploads/2025/03/jf-martin-kZjBucSSj2s-unsplash.jpg',0,'attachment','image/jpeg',0), +(353,1,'2025-03-28 11:35:33','2025-03-28 11:35:33','Stained glass windows were more than just decorative elements in medieval architecture; they were powerful tools for storytelling and religious education. These magnificent works of art combined innovative glass-making techniques with detailed artistic expression to create luminous scenes that transformed interior spaces. The way sunlight filtered through these colored windows was often described as \"divine light\" by medieval observers.\n\nThe creation of medieval stained glass was a complex process that required significant skill and knowledge. Craftsmen would cut colored glass into specific shapes, paint details onto the glass pieces, and join them together with lead cames. The most impressive examples of medieval stained glass can be found in Gothic cathedrals, where large rose windows and towering lancet windows create breathtaking displays of colored light.\n\nBeyond their artistic beauty, stained glass windows served as \"books of light\" for the largely illiterate medieval population, depicting biblical stories, saints\' lives, and moral lessons through their vivid imagery. The technical and artistic achievement of medieval stained glass makers continues to inspire awe and admiration today.','Stained Glass: The Medieval Art of Light','','inherit','closed','closed','','5-revision-v1','','','2025-03-28 11:35:33','2025-03-28 11:35:33','',5,'http://echoes.local/?p=353',0,'revision','',0), +(355,1,'2025-03-28 11:35:49','0000-00-00 00:00:00','','Auto Draft','','auto-draft','open','open','','','','','2025-03-28 11:35:49','0000-00-00 00:00:00','',0,'http://echoes.local/?p=355',0,'post','',0), +(356,1,'2025-03-28 11:40:15','2025-03-28 11:40:15','','dabbas-j0OhftYAXR4-unsplash','Photo by Dabbas on Unsplash','inherit','open','closed','','dabbas-j0ohftyaxr4-unsplash','','','2025-03-28 11:40:18','2025-03-28 11:40:18','',309,'http://echoes.local/wp-content/uploads/2025/03/dabbas-j0OhftYAXR4-unsplash.jpg',0,'attachment','image/jpeg',0), +(358,1,'2025-05-16 11:05:28','2025-05-16 11:05:28','The agricultural terraces of the Inca Empire represent one of the most impressive feats of ancient engineering and architectural innovation. These andenes (terraced fields) transformed steep mountain slopes into fertile farmland, creating microclimates that could sustain crops at altitudes where agriculture would otherwise be impossible. The terraces at sites like Moray served as agricultural laboratories where the Inca could study the effects of different growing conditions.\n\nThe construction of these terraces involved sophisticated engineering principles. Each terrace level was built with layers of stone, gravel, and soil that provided excellent drainage and prevented erosion. The stone retaining walls were slightly inclined inward to resist the pressure of the earth behind them, while sophisticated drainage systems helped prevent water accumulation that could destabilize the structures.\n\nBeyond their practical function, these terraces created stunning visual effects, transforming entire mountainsides into giant green staircases that followed the natural contours of the landscape. Sites like Machu Picchu demonstrate how the Inca seamlessly integrated agricultural functionality with aesthetic and ceremonial considerations.','Agricultural Terraces of the Inca Empire','','inherit','closed','closed','','32-autosave-v1','','','2025-05-16 11:05:28','2025-05-16 11:05:28','',32,'http://localhost:8888/?p=358',0,'revision','',0), +(359,1,'2025-05-15 16:17:31','2025-05-15 16:17:31','The Gothic cathedrals of France stand as testament to medieval architectural brilliance and religious devotion. These magnificent structures, built between the 12th and 16th centuries, revolutionized architectural design with their innovative features and soaring heights. The implementation of pointed arches, ribbed vaults, and flying buttresses allowed these buildings to reach unprecedented heights while featuring walls of stained glass that seemed to defy gravity.\n\nNotre-Dame de Paris, despite recent challenges, remains one of the finest examples of French Gothic architecture. Its harmonious proportions, twin towers, and spectacular rose windows have inspired architects and artists for centuries. The cathedral\'s flying buttresses, among the first of their kind, demonstrate the innovative engineering solutions that made Gothic architecture possible.','The Magnificent Gothic Cathedrals of France','','inherit','closed','closed','','7-autosave-v1','','','2025-05-15 16:17:31','2025-05-15 16:17:31','',7,'http://localhost:8888/?p=359',0,'revision','',0), +(360,1,'2025-05-15 16:13:53','2025-05-15 16:13:53','

Overview

\nBuilt in 1233 CE in Baghdad, the Al-Mustansiriya Madrasah is one of the oldest examples of Islamic architectural educational institutions. It represents the sophistication of Abbasid architecture and academic tradition.\n

Architectural Features

\n
    \n
  • Four-iwan design
  • \n
  • Central courtyard
  • \n
  • Student cells
  • \n
  • Decorative brickwork
  • \n
  • Water clock system
  • \n
\n

Dimensions

\nBuilding length: 106 meters\nWidth: 48 meters\nCourtyard: 40 x 30 meters\n

Historical Significance

\nThe madrasah serves as a prime example of medieval Islamic educational architecture and the integration of academic and religious spaces.','Al-Mustansiriya Madrasah','','inherit','closed','closed','','310-autosave-v1','','','2025-05-15 16:13:53','2025-05-15 16:13:53','',310,'http://localhost:8888/?p=360',0,'revision','',0), +(361,1,'2025-05-15 16:14:05','2025-05-15 16:14:05','

Overview

\nThe Château de Loches is one of the best-preserved medieval castles in France. Built in the 9th century and expanded through the 14th century, it exemplifies medieval military architecture with its massive keep and fortified walls.\n

Architectural Features

\n
    \n
  • Square stone keep
  • \n
  • Defensive walls
  • \n
  • Arrow slits
  • \n
  • Machicolations
  • \n
  • Drawbridge
  • \n
\n

Dimensions

\nKeep height: 36 meters\nWall thickness: up to 3 meters\nSite area: 1.5 hectares\n

Historical Significance

\nThe castle served as both a military stronghold and royal residence, demonstrating the evolution of medieval defensive architecture.','Château de Loches','','inherit','closed','closed','','303-autosave-v1','','','2025-05-15 16:14:05','2025-05-15 16:14:05','',303,'http://localhost:8888/?p=361',0,'revision','',0), +(363,1,'2025-05-16 11:04:35','2025-05-16 11:04:35','Mayan pyramids represent some of the most sophisticated astronomical observatories ever created in the ancient world. These structures were not just ceremonial centers but precise calendrical tools that tracked celestial movements. The famous pyramid of Kukulcán at Chichen Itza, for example, is designed so that during the spring and autumn equinoxes, the play of sunlight and shadow creates the appearance of a serpent descending the northern stairway.\n\nThe architectural design of Mayan pyramids typically followed strict mathematical and astronomical principles. Many pyramids were built with exactly 365 steps, one for each day of the year, while their orientation and alignment were precisely calculated to mark important celestial events. The structures often featured multiple layers, with each new layer corresponding to different periods in Maya chronology.','Mayan Pyramids: Sacred Architecture of Time and Space','','inherit','closed','closed','','31-autosave-v1','','','2025-05-16 11:04:35','2025-05-16 11:04:35','',31,'http://localhost:8888/?p=363',0,'revision','',0), +(365,1,'2025-05-16 11:05:55','2025-05-16 11:05:55','The Inca civilization\'s most remarkable architectural achievement was their sophisticated stone masonry technique. Without the use of mortar, they created structures of such precision that even today, it\'s impossible to insert a knife blade between the stones. This technique, known as ashlar masonry, involved fitting massive stone blocks together like a complex three-dimensional puzzle, with each stone cut to perfectly match its neighbors.\n\nThe engineering principles behind Inca stone construction were remarkably advanced. The stones were cut to fit together in an interlocking pattern that made buildings extremely stable and earthquake-resistant. The slight inward tilt of walls, trapezoidal doorways, and rounded corners further enhanced structural stability, while the careful placement of stones created natural drainage systems that have preserved these structures for centuries.\n\nPerhaps most impressive is that these architectural feats were accomplished without the use of metal tools, the wheel, or any written language to record their techniques. The Inca builders relied on an intricate system of knotted cords called quipus for measurements and used stone hammers and bronze tools to achieve their remarkable precision.','Inca Stone Masonry: Engineering Marvel of the Ancient Americas','','inherit','closed','closed','','30-autosave-v1','','','2025-05-16 11:05:55','2025-05-16 11:05:55','',30,'http://localhost:8888/?p=365',0,'revision','',0), +(366,1,'2025-05-16 11:06:34','2025-05-16 11:06:34','

Overview

\nNotre-Dame Cathedral stands as one of the finest examples of French Gothic architecture. Construction began in 1163 and was largely completed by 1345. The cathedral\'s architectural innovations, including its pioneering use of the rib vault and flying buttress, set new standards for medieval architecture.\n

Architectural Features

\n
    \n
  • Flying buttresses
  • \n
  • Pointed arches
  • \n
  • Ribbed vaults
  • \n
  • Rose windows
  • \n
  • Twin western towers
  • \n
\n

Dimensions

\nHeight: 69 meters (towers)\nLength: 128 meters\nWidth: 48 meters\n

Historical Significance

\nThe cathedral has served as the religious heart of Paris for centuries and represents the peak of French Gothic architectural achievement. Its construction spanned multiple architectural phases, showcasing the evolution of Gothic style.','Notre-Dame Cathedral, Paris','','inherit','closed','closed','','301-autosave-v1','','','2025-05-16 11:06:34','2025-05-16 11:06:34','',301,'http://localhost:8888/?p=366',0,'revision','',0); +/*!40000 ALTER TABLE `wp_posts` 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 = utf8mb4 */; +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 +(5,2,0), +(5,5,0), +(5,10,0), +(7,2,0), +(7,5,0), +(7,6,0), +(7,10,0), +(8,4,0), +(8,8,0), +(9,3,0), +(9,5,0), +(9,7,0), +(9,8,0), +(13,11,0), +(13,13,0), +(13,15,0), +(13,19,0), +(14,12,0), +(14,16,0), +(15,11,0), +(15,14,0), +(15,18,0), +(16,12,0), +(16,13,0), +(16,17,0), +(17,11,0), +(17,19,0), +(19,20,0), +(19,23,0), +(21,14,0), +(21,22,0), +(22,20,0), +(22,24,0), +(23,20,0), +(23,23,0), +(23,26,0), +(25,28,0), +(30,29,0), +(30,34,0), +(31,30,0), +(31,32,0), +(31,33,0), +(31,36,0), +(32,29,0), +(32,34,0), +(32,35,0), +(301,40,0), +(301,46,0), +(302,42,0), +(302,45,0), +(303,38,0), +(303,46,0), +(304,39,0), +(304,46,0), +(305,40,0), +(305,46,0), +(307,38,0), +(307,44,0), +(308,38,0), +(308,46,0), +(309,42,0), +(309,48,0), +(310,38,0), +(310,46,0), +(311,39,0), +(311,48,0), +(313,38,0), +(313,44,0), +(314,38,0), +(314,47,0), +(315,38,0), +(315,44,0), +(316,38,0), +(316,44,0), +(317,38,0), +(317,46,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 = utf8mb4 */; +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=50 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,2), +(3,3,'category','',0,1), +(4,4,'category','',0,1), +(5,5,'category','',0,3), +(6,6,'post_tag','',0,1), +(7,7,'post_tag','',0,1), +(8,8,'post_tag','',0,2), +(9,9,'post_tag','',0,0), +(10,10,'post_tag','',0,2), +(11,11,'category','',0,3), +(12,12,'category','',0,2), +(13,13,'category','',0,2), +(14,14,'category','',0,2), +(15,15,'post_tag','',0,1), +(16,16,'post_tag','',0,1), +(17,17,'post_tag','',0,1), +(18,18,'post_tag','',0,1), +(19,19,'post_tag','',0,2), +(20,20,'category','',0,3), +(21,21,'category','',0,0), +(22,22,'category','',0,1), +(23,23,'post_tag','',0,2), +(24,24,'post_tag','',0,1), +(25,25,'post_tag','',0,0), +(26,26,'post_tag','',0,1), +(27,27,'post_tag','',0,0), +(28,28,'wp_theme','',0,1), +(29,29,'category','',0,2), +(30,30,'category','',0,1), +(31,31,'category','',0,0), +(32,32,'category','',0,1), +(33,33,'post_tag','',0,1), +(34,34,'post_tag','',0,2), +(35,35,'post_tag','',0,1), +(36,36,'post_tag','',0,1), +(37,37,'post_tag','',0,0), +(38,38,'style','Characterized by round arches, thick walls, sturdy columns, large towers, and decorative arcading. Developed between 800-1200 CE.',0,9), +(39,39,'style','Features pointed arches, ribbed vaults, and flying buttresses. Emerged in 12th century France.',0,2), +(40,40,'style','Characterized by height, large windows, ornate decoration, and complex architectural features. Peaked in 13th century.',0,2), +(41,41,'style','Features elaborate tracery, ornate decoration, and flame-like window patterns. Late 14th-15th century.',0,0), +(42,42,'style','Anglo-Norman architecture characterized by massive proportions, round arches, and decorative geometric patterns.',0,2), +(43,43,'style','English Gothic style featuring vertical lines, large windows, and fan vaulting. Late 14th-16th century.',0,0), +(44,44,'period','Also known as the Dark Ages, spanning from 5th to 10th century CE.',0,4), +(45,45,'period','From late 10th to early 12th century, marked by the revival of stone architecture.',0,1), +(46,46,'period','From 11th to 13th century, characterized by Gothic architecture and cathedral building.',0,7), +(47,47,'period','14th and 15th centuries, featuring elaborate Gothic styles and secular architecture.',0,1), +(48,48,'period','11th to 13th century, featuring military architecture and fortifications influenced by European and Middle Eastern styles.',0,2), +(49,49,'period','Late 15th to early 16th century, showing the gradual shift from medieval to Renaissance styles.',0,0); +/*!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 = utf8mb4 */; +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 = utf8mb4 */; +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=50 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,'Uncategorized','uncategorized',0), +(2,'Gothic Architecture','gothic-architecture',0), +(3,'Romanesque','romanesque',0), +(4,'Castles','castles',0), +(5,'Religious Buildings','religious-buildings',0), +(6,'Buttresses','buttresses',0), +(7,'Arches','arches',0), +(8,'Stonework','stonework',0), +(9,'Vaulted Ceilings','vaulted-ceilings',0), +(10,'Stained Glass','stained-glass',0), +(11,'Chinese Architecture','chinese-architecture',0), +(12,'Japanese Architecture','japanese-architecture',0), +(13,'Temples','temples',0), +(14,'Palaces','palaces',0), +(15,'Pagodas','pagodas',0), +(16,'Zen Gardens','zen-gardens',0), +(17,'Wooden Architecture','wooden-architecture',0), +(18,'Imperial Design','imperial-design',0), +(19,'Feng Shui','feng-shui',0), +(20,'Islamic Architecture','islamic-architecture',0), +(21,'Mosques','mosques',0), +(22,'Persian Architecture','persian-architecture',0), +(23,'Geometric Patterns','geometric-patterns',0), +(24,'Calligraphy','calligraphy',0), +(25,'Domes','domes',0), +(26,'Arabesques','arabesques',0), +(27,'Minarets','minarets',0), +(28,'twentytwentyfive','twentytwentyfive',0), +(29,'Inca Architecture','inca-architecture',0), +(30,'Mayan Architecture','mayan-architecture',0), +(31,'Aztec Architecture','aztec-architecture',0), +(32,'Ceremonial Centers','ceremonial-centers',0), +(33,'Pyramids','pyramids',0), +(34,'Stone Masonry','stone-masonry',0), +(35,'Terraces','terraces',0), +(36,'Astronomical Alignment','astronomical-alignment',0), +(37,'Sacred Geometry','sacred-geometry',0), +(38,'Romanesque','romanesque',0), +(39,'Early Gothic','early-gothic',0), +(40,'High Gothic','high-gothic',0), +(41,'Flamboyant Gothic','flamboyant-gothic',0), +(42,'Norman','norman',0), +(43,'Perpendicular Gothic','perpendicular-gothic',0), +(44,'Early Middle Ages','early-middle-ages',0), +(45,'Romanesque Period','romanesque-period',0), +(46,'High Middle Ages','high-middle-ages',0), +(47,'Late Middle Ages','late-middle-ages',0), +(48,'Crusader Period','crusader-period',0), +(49,'Medieval-Renaissance Transition','medieval-renaissance-transition',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 = utf8mb4 */; +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=52 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',''), +(3,1,'last_name',''), +(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','0'), +(17,1,'wp_dashboard_quick_press_last_post_id','4'), +(18,1,'closedpostboxes_dashboard','a:0:{}'), +(19,1,'metaboxhidden_dashboard','a:0:{}'), +(20,1,'meta-box-order_dashboard','a:4:{s:6:\"normal\";s:41:\"dashboard_site_health,dashboard_right_now\";s:4:\"side\";s:21:\"dashboard_quick_press\";s:7:\"column3\";s:18:\"dashboard_activity\";s:7:\"column4\";s:17:\"dashboard_primary\";}'), +(21,1,'manageedit-acf-post-typecolumnshidden','a:1:{i:0;s:7:\"acf-key\";}'), +(22,1,'acf_user_settings','a:2:{s:19:\"post-type-first-run\";b:1;s:20:\"taxonomies-first-run\";b:1;}'), +(23,1,'closedpostboxes_acf-post-type','a:0:{}'), +(24,1,'metaboxhidden_acf-post-type','a:1:{i:0;s:7:\"slugdiv\";}'), +(25,1,'manageedit-acf-taxonomycolumnshidden','a:1:{i:0;s:7:\"acf-key\";}'), +(26,1,'closedpostboxes_acf-taxonomy','a:0:{}'), +(27,1,'metaboxhidden_acf-taxonomy','a:1:{i:0;s:7:\"slugdiv\";}'), +(28,1,'wp_user-settings','libraryContent=browse&mfold=o'), +(29,1,'wp_user-settings-time','1743760965'), +(30,1,'community-events-location','a:1:{s:2:\"ip\";s:12:\"192.168.65.0\";}'), +(31,1,'_application_passwords','a:0:{}'), +(50,1,'session_tokens','a:1:{s:64:\"f9ceb8ed1e177582330918c7ad0c01151dd8f10275adf931824857e59a07feb2\";a:4:{s:10:\"expiration\";i:1764951301;s:2:\"ip\";s:12:\"192.168.65.1\";s:2:\"ua\";s:117:\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36\";s:5:\"login\";i:1764778501;}}'); +/*!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 = utf8mb4 */; +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 '', + PRIMARY KEY (`ID`), + KEY `user_login_key` (`user_login`), + KEY `user_nicename` (`user_nicename`), + KEY `user_email` (`user_email`) +) 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_users` +-- + +LOCK TABLES `wp_users` WRITE; +/*!40000 ALTER TABLE `wp_users` DISABLE KEYS */; +INSERT INTO `wp_users` VALUES +(1,'admin','$wp$2y$10$DoOzizE.k4xf/9Z6R6cBBuGVYUoD.pRva36KnHWBLlR1RUfD0MhMO','admin','dev-email@wpengine.local','','2025-03-28 10:41:07','',0,'admin'); +/*!40000 ALTER TABLE `wp_users` ENABLE KEYS */; +UNLOCK TABLES; + +-- +-- Table structure for table `wp_wpgraphql_logging` +-- + +DROP TABLE IF EXISTS `wp_wpgraphql_logging`; +/*!40101 SET @saved_cs_client = @@character_set_client */; +/*!40101 SET character_set_client = utf8mb4 */; +CREATE TABLE `wp_wpgraphql_logging` ( + `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, + `channel` varchar(100) NOT NULL, + `level` smallint(5) unsigned NOT NULL, + `level_name` varchar(50) NOT NULL, + `message` longtext NOT NULL, + `context` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`context`)), + `extra` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL CHECK (json_valid(`extra`)), + `datetime` datetime NOT NULL, + PRIMARY KEY (`id`), + KEY `channel_index` (`channel`), + KEY `level_name_index` (`level_name`), + KEY `level_index` (`level`), + KEY `datetime_index` (`datetime`), + KEY `datetime_level_index` (`datetime`,`level`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_520_ci; +/*!40101 SET character_set_client = @saved_cs_client */; + +-- +-- Dumping data for table `wp_wpgraphql_logging` +-- + +LOCK TABLES `wp_wpgraphql_logging` WRITE; +/*!40000 ALTER TABLE `wp_wpgraphql_logging` DISABLE KEYS */; +/*!40000 ALTER TABLE `wp_wpgraphql_logging` 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 */; +/*M!100616 SET NOTE_VERBOSITY=@OLD_NOTE_VERBOSITY */; + +-- Dump completed on 2025-12-03 16:18:36 diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/setup/.htaccess b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/setup/.htaccess new file mode 100644 index 000000000..ad8663f5f --- /dev/null +++ b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/setup/.htaccess @@ -0,0 +1,21 @@ + + Header set Access-Control-Allow-Origin "*" + Header set Access-Control-Allow-Methods "GET, POST, OPTIONS" + Header set Access-Control-Allow-Headers "Authorization, Content-Type" + + +# BEGIN WordPress +# The directives (lines) between "BEGIN WordPress" and "END WordPress" are +# dynamically generated, and should only be modified via WordPress filters. +# Any changes to the directives between these markers will be overwritten. + +RewriteEngine On +RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}] +RewriteBase / +RewriteRule ^index\.php$ - [L] +RewriteCond %{REQUEST_FILENAME} !-f +RewriteCond %{REQUEST_FILENAME} !-d +RewriteRule . /index.php [L] + + +# END WordPress \ No newline at end of file diff --git a/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/uploads.zip b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/uploads.zip new file mode 100644 index 000000000..b177051b3 Binary files /dev/null and b/plugins/wpgraphql-logging/examples/wpgraphql-logging-nextjs/wp-env/uploads.zip differ